文件上传概要
Web应用程序通常会有文件上传功能,例如论坛的附件上传,上传图片/头像/Zip压缩包等,只要被Web应用程序允许上传文件,就可能存在文件上传漏洞。在不对被上传的文件进行限制/过滤或者限制被绕过,从而上传恶意文件、可执行脚本到服务器上,进一步导致服务器沦陷
如何确认Web应用程序是否存在上传漏洞呢?例如论坛由PHP开发,用户可上传头像,也就是图片文件,但是没有对图片格式进行验证,比如能上传.php文件,这就是一个上传漏洞,上传的文件被当做脚本成功解析,就代表有上传漏洞。
文件上传漏洞成因
-
服务器配置不当
在不需要上传文件的情况下可导致任意文件上传,参考HTTP请求方法PUT -
本地文件上传被绕过
只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改上传时发送的数据包就可以轻松绕过上传限制a.抓包看,禁用JS插件(这个插件用作文件上传本地验证),现上传一个恶意文件,如果是本地限制,执行过滤的就是浏览器的js插件,禁用后就能上传恶意文件
b.如果是服务器限制,先把恶意文件传给服务器,然后服务器再返回过滤结果,这个时候单单禁用本地的js插件没什么用 -
过滤不严或被绕过
有些网站使用上传黑名单过滤掉一些可执行文件脚本的后缀,但是黑名单不全或者被绕过,也可导致恶意文件上传。如果使用白名单,仅允许名单内所包含的文件格式上传会更加安全。 -
文件解析漏洞导致文件执行
-
路径截断
文件解析漏洞
解析漏洞是指web服务器因对http请求处理不当导致将非可执行的脚本,文件等当做可执行的脚本,文件等执行。该漏洞一般配合服务器的文件上传功能使用,以获取服务器的权限。
例如xxx.php.jpg看似是图片文件,实际解析被当做php文件
路径截断
上传的文件中使用一些特殊的符号,文件被上传到服务器时路径被这些符号截断,从而控制文件上传的路径。常见截断字符 \0 ? %00
例如xxx.php%00xx.jpg
IIS 5.x/6.0解析漏洞
- 目录解析
文件夹名称中带有.asp .asa等可执行脚本文件的后缀,其目录内(这个文件夹内)的任何扩展名的文件都会被IIS当做可执行文件解析并执行
例如:www.xxx.com/xx.asp/123.jpg - 文件解析
IIS6.0下,分号;后面的不被解析
例如:www.xx.com/123.asp;jpg,实际被当做asp文件解析。6.0默认可执行后缀asp、asa、cer、cdx
IIS7.0/7.2/Nginx0.8.3以下版本畸形解析漏洞
在默认开启Fast-CGI情况下,访问http://www.xxx.com/xx.jpg/.php,被当做php解析
Apache解析漏洞
Apache对文件解析从右往左,如果遇到不可识别的后缀,再从左向右判断
例如xx.php.owf.rar,因无法解析rar和owf,就会从左开始,当做php文件
绕过上传漏洞
- 本地黑名单验证:可以找到不在黑名单之内的扩展名
- 文件扩展名大小写转换,Asp、pHp,这一类在Windows依然会被web容器解析
- Windows系统下,如果文件名以"."或者空格结尾,系统会自动去除.和空格。如上传asp.服务器端接收文件在读写文件时会自动去除
- %00截断。 vir%00us.asp
- 服务器端MIME验证:用来设定某种扩展名文件的打开方式,当具有该扩展名的文件被访问时,浏览器会自动使用指定的应用程序来打开。如GIF图片MIME为image/gif, CSS文件MIME类型为text/css。上传时,程序会对文件MIME类型做验证。那么我就可以通过修改HTTP请求中的Content-Type,比如修改为image/jpeg,告诉服务器我传的是图片文件,实际上我是传php脚本
漏洞修复/应对方法
- 开源编辑器上传漏洞
选择已经修复漏洞的新版本进行更新 - 本地上传限制绕过
在服务器后台对上传的文件进行过滤 - 过滤不严/被绕过
建议使用白名单 - 文件解析漏洞导致文件执行
升级web服务器版本或者安装相应补丁 - 路径截断
使用随机数改写文件名和文件路径,不使用用户定义的文件夹和路径
还可以将上传文件限制在某一路径下,并且在文件上传的目录禁止解析
除此之外
文件上传漏洞复现
DWVA平台
1. 新建TXT文档,写下 一句话木马 ,后缀改为.php
eval()函数可以将括号内语句当做php语言进行执行。结合$_POST,QQQ为木马口令
<?PHP @eval($_POST['QQQ']);?>
2.网站安全等级调至中等
3. 找到文件上传模块
4. 选择浏览-----选中刚才写的.php后门木马上传
可以看到php文件上传失败了,原因就是系统为了安全,把php文件过滤掉了,只允许上传图片,那我们就迎合它,把文件后缀加上.jpg
再次上传,提示上传成功,并且显示出了后门木马的路径,那么我们就通过这个路径,运行它
看到空白页面,说明在执行成功
5. 利用渗透软件–中国菜刀或者是其他工具,我这里用的是蚁剑
右键—添加数据—把后门木马执行的链接贴进去—连接密码就是脚本里面写的$_POST[‘QQQ’]-----添加
双击链接就可以进入网站后台,成功拿到服务器系统目录与文件