一、文件上传
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、抓包改后缀名