文件上传漏洞之upload-labs(1-8)


一、文件上传

1、概述

上传文件的时候,如果服务器端脚本语言(PHP),未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。

2、实验环境

实验第四关之前是在centos7下的,第四关后是在win7+phpstudy

二、前端js验证

1、概述

本题的代码是作用在前端的,所以只要绕过前端的代码,在bp中修改文件后缀即可达到文件上传的目的。

2、Pass-01

(1)修改php文件后缀为.jpg

(2)开启抓包
(3)文件上传
(4)修改文件后缀

(5)Forward,并验证webshell

三、服务端MIME白名单验证

1、概述

本题为服务端验证,验证客户端发送数据包请求头中的Content-Type的值是否为image/jpeg||image/png||image/gif

2、Pass-02

(1)开启抓包
(2)上传php后缀的文件
(3)修改Content-Type的值

(4)上传成功后用蚁剑链接

四、文件后缀黑名单

1、概述

黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多,一般有个专门的blacklist,里面包含常见的危险脚本文件。

2、绕过方法

(1)文件名大小写绕过(Asp、pHp)
(2)黑白名单绕过(php、php2、php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx)cdx,\x00hh\x46php
(3)特殊文件名绕过
修改数据包里的文件名为”test.php”,或者”test.php “(文件后面有空格)由于这种命名方式在windows系统里是不允许的,所以在绕过上传后windows系统会自动去掉点和空格,Unix/linux系统没有这个特性。
(4)NTFS硬盘格式特性绕过 ::$DATA

3、Pass-03

(1)在配置apache配置文件中添加一个解析后缀
AddType application/x-httpd-php .php .phtml .php1

(2)上传后缀为.php1的文件
(3)测试连接情况

4、Pass-04

(1)先上传一个后缀为.jpg的phpinfo文件

(2)访问后没有解析

(3)上传修改后的.htaccess文件

(4)测试访问之前传的phpinfo的文件

5、Pass-05

(1)代码审计发现没有大小写绕过
(2)修改文件名为phpinfo.PhP
(3)上传
(4)访问测试

五、Pass-06

1、思路

代码审计后发现没有首位去空

2、绕过

既然没有过滤后首尾去空,那就上传一个"phpinfo.php "

3、抓包修改后缀名

4、访问测试

5、phpstorm调试观察

(1)开启调试
(2)可以发现经过一系列的函数过滤剩下的是".php "

(3)步入后发现没有到else中,直接绕过黑名单了

解释:in_array函数是把第一个参数值与第二个参数(数组)进行比对,如果找到则返回true,否则返回false。因为这里没有可以和".php "比对成功的,所以返回false,但是in_array前面有一个!,所以上传成功。

六、Pass-07

1、思路

代码审计发现没有过滤文件末尾的点,利用windows下会自动删除文件后的点的特性利用成功。

2、抓包改后缀名

3、访问上传的文件

4、查看上传的文件


可以发现没有后缀点

七、Pass-08

1、思路

因为要求不让用::$DATA..绕过,所以可以多加一些点和空格绕过

2、抓包改后缀名

3、访问上传的文件


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