文件上传漏洞之labs续(09,10,11,17,19)


一、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,成功!


文章作者: xi3w3n
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xi3w3n !
评论
  目录