一、apache解析漏洞
1、多后缀
开启apache配置文件中的配置项AddType application/x-httpd-php .php
,这时服务器就会解析带有.php的url。例如:.php.xx
2、.htaccess文件
.htaccess
是可作用于当前目录及其子目录的配置文件,复现在上一节的总结写到了。
3、多后缀解析漏洞
(1)开启AddType
(2)随意上传一个带有phpinfo的文件,并且修改文件名为"1.php.xxx"
(3)访问测试
二、nginx解析漏洞
1、概述
该漏洞与nginx版本无关,属于用户配置php中的cgi.fix_pathinfo开启不当造成的解析漏洞。
2、解析过程
当请求的url中出现1.jpg/.php
,nginx会把这个文件交给php去处理。由于php拿到后发现1.jpg/.php
这个文件不存在,所以去掉/.php
,最后把1.jpg
当做php执行了。
3、测试环境
nginx_1.11.5,php5.2.17,vmware_win7
4、复现
(1)上传一张带有phpinfo代码的图片
(2)访问url后加上"/.php"
:
http://192.168.52.133/upload/upload//edit.png/.php
三、Pass-09
1、思路
经过代码审计发现过滤了许多东西,但是可以构造空格和点绕过。
2、过程
(1)上传文件并修改文件名
(2)访问上传的文件
四、Pass-19
1、思路
本题是在检测保存的文件名并且采用黑名单的手段,但是过滤的方法很少,所以可以利用大小写绕过和windows的命令特性绕过。
2、过程
(1)这里采用大小写绕过,上传文件并修改save_name的值为:"upload-19.pHp"
(2)forward并访问图片的地址
五、Pass-10
1、思路
经过代码审计发现这个str_ireplace
函数只是匹配替换一次,所以可以用双写绕过,同时此函数无视大小写,无法用大小写绕过。
2、上传文件
(1)bp抓包改文件名
(2)forward
3、访问测试
4、phpstorm调试
(1)抓包,改文件名
(2)phpstorm调试,刚开始获取到的文件名为"edit.pphphp"
(3)经过了关键函数str_ireplace
后文件名变为"edit.php"
,说明函数只匹配替换一次
六、Pass-11
1、思路
在url中%00
表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00
时就会认为读取已结束,需要关闭magic_quotes_gpc
并且php版本要小于5.3.4
。
2、上传文件
(1)抓包,添加url后加入"1.php%00"
(2)forward
3、访问测试
4、phpstorm调试
(1)重复上面的步骤在phpstorm中调试,可以看到刚开始的文件名为"edit.png"
(2)很显然是可以通过白名单校验的
(3)最后1.php的路径被添加进去了
七、条件竞争/Pass-17
1、概述
在文件上传的代码中先执行了上传文件的方法,后才对文件进行校验导致文件在服务器中存留一段时间。我们可以通过不断上传文件,并且不断访问文件来制造条件竞争。
2、复现思路
上传一个危险的php文件,并且不断访问这个php文件,一旦访问成功就会生成一个可连接shell文件
3、环境准备
一个生成shell的php文件,Burpsuite,蚁剑
4、上传危险php文件
(1)抓包
(2)丢到intruder模块中,随便找个地方设置变量
(3)设置payload
5、访问上传文件
(1)抓包
(2)丢到intruder模块中,随便找个地方设置变量
(3)设置payload
(4)这里可以把线程调大一点
6、开始竞争
(1)先发送上传的包
(2)再开始竞争的攻击
(3)可以看到有访问成功的请求
(4)尝试连接shell,成功!