1免责声明
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。
2内容速览
一、文件上传漏洞简介
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。大多数的上传漏洞被利用后攻击者都会留下WebShell以方便后续进入系统。攻击者在受影响系统放置或者插入WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。
二、文件上传漏洞原理:
在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。
文件上传漏洞对Web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。
三、文件上传漏洞高危触发点
存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏阔的高危地带,另外像文件管理器这样的功能也有可能被攻击者所利用。
值得注意的是,如果移动端也存在类似的操作的话,那么相同的原理,也存在文件上传漏洞的风险。
四、前端检测:
主要是通过
javascript代码
进行检测,非常容易进行绕过。
1. 原理:
Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。
2. 如何判断当前页面使用前端is的验证方式:
前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不成功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求。
3. 绕过方法:
- 删除或者禁用js:
火狐浏览器-->about:config-->JavaScriptenable-false (ajax)
- 使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。
3.1 删除js绕过:
直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可:
或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行修改,本地提交即可。
五、后端检测_后缀名检测漏洞:
1. 原理:
通常是针对文件的扩展名后缀进行检测,主要是通过黑白名单进行过滤检测,如果不符全过滤规则则不允许上传。
2. 黑名单:
2.1 原理:
黑名单检测:一般有个专门的
blacklist 文件
,里面会包含常见的危险脚本文件。 例如: fckeditor 2.4.3 或之前版本的黑名单:
2.2 绕过方法:
解析漏洞
.htaccess
文件解析漏洞- apache解析漏洞- IIS7.0 | IIS7.5 | Nginx的解析漏洞
- IIS6.0解析漏洞
截断上传
- 截断类型:PHP 截断
- 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断
- 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
大小写绕过
比如:
aSp
和pHp
之类。
黑名单扩展名的漏网之鱼
比如:
asa
和cer
之类asp:
asa
cer
aspx
jsp:
jspx
jspf
php:
php
php3
php4
php5
phtml
pht
exe:
exee
利用Windows的命名机制
shell.php.
shell.php空格
shell.php:1.jpg
shell. php::$DATA
shell.php:1.jpg
在windows中,后缀名后面的点和空格都会被删除掉。
双写绕过
有时候在检测时,后台会把敏感字符替换成空格,这个时候,我们可以使用双写进行绕过。比如:
pphphp
3. 白名单:
3.1 原理:
白名单检测:一般有个专门的
whitelist 文件
,里面会包含的正常文件:Jpg
png
GIF
3.2 绕过方法:
解析漏洞
- .htaccess文件解析漏洞
- apache解析漏洞
- IIS7.0 | IIS7.5 | Nginx的解析漏洞
- IIS6.0解析漏洞
截断上传
- 截断类型:PHP 截断
- 截断原理:由于00代表结束符,所以会把00后面的所有字符都截断
- 截断条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态
六、后端检测_00截断:
1. 原理:
虽然web应用做了校验,但是由于文件上传后的
路径用户可以控制
,攻击者可以利用手动添加字符串标识符0X00
的方式来将后面的拼接的内容进行截断
,导致后面的内容无效,而且后面的内容又可以帮助我们绕过黑白名单的检测。
2. 绕过思路:
在
C语言
中,空字符
有一个特殊含义,代表字符串的拼接结束。 这里我们使用的是php语言
,属于高级语言,底层靠C语言
来实现的,也就是说空字符
的字符串拼接结束功能在PHP
中也能实现。但是我们在URL中不能直接使用空
,这样会造成无法识别;我们通过查看ASCII对照表
,发现ASCII对照表
第一个就空字符
,它对应的16进制是00
,这里我们就可以用16进制的00
来代替空字符
,让它截断
后面的内容。
使用burpsuite
进行抓包,因为这里是通过URL
进行传递的文件上传后存储路径,所以需要对16进制
的00
进行URL编码
,编码的结果就是