文件上传漏洞过程

  用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

一般的情况有:

  1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
  2. 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
  3. 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
  4. 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈;

上传漏洞需要具备以下几个条件:

  1. 上传的文件具备可执行性或能够影响服务器行为,所以文件后所在的目录必须在WEB容器覆盖的路径之内;
  2. 用户可以从WEB上访问这个文件,从而使得WEB容器解释执行该文件;
  3. 上传后的文件必须经过安全检查,不会被格式化、压缩等处理改变其内容;

常见,绕过文件上传检查功能

    常见的文件上传检查针对文件类型进行,攻击者可以使用手动修改POST包然后添加%00字节用于截断某些函数对文件名的判断。如xxx.php[\0].JPG,对于一个只允许上传JPG格式的服务器,此文件可以绕过文件上传检查,但是对于服务器端解释来说,函数会被[\0]截断,导致成为xxx.php代码。除了修改文件名来绕过类型检查外,还可以修改文件头来伪造文件头,欺骗文件上传检查。

如何安全上传文件

针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的:

  1. 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
  2. 文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式;此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
  3. 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
  4. 单独设置文件服务器的域名;

各种形式的文件上传漏洞总结

1.在很早以前,很多上传文件过滤是用的是javascript,所以改一下javascript或直接nc发包就行了。有的是判断后缀,有的只是判断id,比如:

“uploadfile” style=”file” size=”uploadfile” runat=
“lbtnUpload” runat=
“JavaScript”>

只是简单的对ID进行验证,只要构造javascript:lbtnUpload.click();满足条件达到上传木马的效果。成功以后查看源代码

a “lbtnUpload” “javascript:__doPostBack(‘lbtnUpload’,”)”script ‘javascript’

2.IIS6的目录解析问题如/a.aspx/a.jpg,在某些特殊情况下会应用到,在很早的时候由我同事1982发现的。

3.某些上传文件的被动过滤有缺陷,有的只过滤asp,却忘了.asa、.cdx、cer等等,php的话就尝试php2、.php3、.php4 等等,相关实例有动力文章(Powereasy),具体参考http://www.sebug.net/vulndb/4326/

4.结束符%00截断最后的后缀,最早是老外发现,当时非常流行,主流bbs程序都有此漏洞,比如dvbbs就存在此漏洞,非常经典!

5.iis的文件名解析漏洞,比如a.asp;.gif,分号本身以及后面的都会被系统忽略,国人kevin1986发现的,非常经典!

6.apache文件名解析漏洞,比如a.php.gif或a.php.aaa,最早看到国内的superhei先提出的。不过在新版 apache/php给补了。

7.二次上传漏洞,最新的上传漏洞方法,主要是利用逻辑漏洞,比如无惧无组件上传代码:

view sourceprint?1 fileExt=lcase(Mid(ofile.filename,InStrRev(ofile.filename,".")+1))   

 arrUpFileType=split(UpFileType,"|")'获得允许上传的所有文件扩展名   

 for i=0 to ubound(arrUpFileType)'判断上传的文件扩展名是否在允许的范围内   

 if fileEXT=trim(arrUpFileType(i)) then   

 EnableUpload=true   

 exit for   

 end if   

这里的EnableUpload只验证了一次就变为了true,第一次上传合法文件使其变为true,第二次再上传webshell,利用这个漏洞需要上传组件支持一次多文件上传。

有此类逻辑漏洞的不在少数,比如fckeditor最新版中,由于Fckeditor对第一次上传123.asp;123.jpg 这样的格式做了过滤。也就是IIS6解析漏洞。
上传第一次,被过滤为 123_asp;123.jpg 从而无法运行。但是第2次上传同名文件123.asp;123.jpg后。由 于”123_asp;123.jpg”已经存在。
文件名被命名为123.asp;123(1).jpg 123.asp;123(2).jpg这样的编号方式。其他的还有fckeditor 2.4 提交1.php再提交1.php+空格,详见http://superhei.blogbus.com/logs/4603932.html 《又见fckeditor》superhei一文。

8.关键字一次性替换,比如有的后台增加.asa上传类型asa被过滤替换为空字符,但用.asasaa被过滤其中的asa剩下.asa就绕过了, 比如还有科讯Kesion CMS,漏洞在http://localhost/User/UpFileSave.asp?user_upfile.asp,文件名最后保证 是.asachr0.jpg或者.cerchr0.jpg就行了。

9.上传程序存在sql注入。比如fckeditor 2.1.6就可以通过sql注入增加一个.asp上传类型。还有PunBB pun_attachment上传附件扩展sql注射漏洞,详见http://sebug.net/vulndb/12538/。

10.小数点或空格被忽视,这个也是利用了win系统特性了,比如a.asp.和a.asp空格、a.php.

11.超长文件名截断文件后缀,各系统版本的超长文件名长度可能各不相同,最常见的是应用在本地包含漏洞方面,由于php新版过滤了%00,所以用 a.php?files=../../../../../../../../../etc/passwd…………………………………(N个 点).html,推荐用.和/或空格来试。在win下:

echo aaaa>a.asp若干个空格.gif

dir a.asp

2010-03-15 17:41 2,852 a.asp

12.只校验了文件头和文件完整性

有的上传程序校验文件头,并只允许上传图片文件类型且验证图片文件完整性(仅伪造文件头还是不行),但没有验证文件后缀,也没有强制更改上传文件的 后缀。我们可以新建一个几kb大小以内的jpg图片文件(颜色填充),然后用ue以十六进制打开文件,在文件内容末尾加些空格后再加上一句话木马< ?fputs(fopen("c.php","w"),"“)?>存为 aaa.php上传。如果有验证文件后缀,也可以结合以上方法绕过文件的后缀验证。

WEB安全:文件上传漏洞的更多相关文章

  1. Web应用安全之文件上传漏洞详解

    什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...

  2. web服务端安全之文件上传漏洞

    一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...

  3. 基于 java 【Web安全】文件上传漏洞及目录遍历攻击

    前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...

  4. web安全之文件上传漏洞攻击与防范方法

    一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...

  5. WEB服务端安全---文件上传漏洞

    1.简述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力.这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业 ...

  6. web文件上传漏洞

    什么是文件上传漏洞? 指利用系统的对文件上传部分的控制不足或处理缺陷,上传可执行的动态脚本文件/webShell进行攻击行为. 原因 对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的 ...

  7. WEB安全性测试之文件上传漏洞

    1.漏洞描述:文件上传漏洞,是指可以利用WEB上传一些特定的文件包含特定代码如(<?php phpnfo;?> 可以用于读取服务器配置信息.上传成功后可以点击) 上传漏洞是指用户上传了一个 ...

  8. web安全之文件上传漏洞

    成因: 当文件上传时,若服务端脚本语言未对上传的文件进行严格验证和过滤,若恶意用户上传恶意的 脚本文件时,就有可能控制整个网站甚至是服务器,这就是文件上传漏洞. 权限: 1. 后台权限:登陆了后台,可 ...

  9. 小白日记38:kali渗透测试之Web渗透-手动漏洞挖掘(四)-文件上传漏洞

    手动漏洞挖掘 文件上传漏洞[经典漏洞,本身为一个功能,根源:对上传文件的过滤机制不严谨] <?php echo shell_exec($_GET['cmd']);?> 直接上传webshe ...

随机推荐

  1. Coursera 机器学习笔记(七)

    主要为第九周内容:异常检测.推荐系统 (一)异常检测(DENSITY ESTIMATION) 核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非 ...

  2. java加密算法入门(二)-对称加密详解

    1.简单介绍 什么是对称加密算法? 对称加密算法即,加密和解密使用相同密钥的算法. 优缺点: 优点:算法公开.计算量小.加密速度快.加密效率高. 缺点: (1)交易双方都使用同样钥匙,安全性得不到保证 ...

  3. [codeforces113D]Museum

    D. Museum time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input ...

  4. Thrift中required和optional

    最近在搞Thrift,对其字段声明中的required关键字有所误解,仔细调试了一下才明白其真实含义. required的意思不是说声明对象时,必须填这个值,而是Thrift在传输(序列化)过程中无论 ...

  5. ajax、PHP、session做购物车

    购物车网页代码 1.登录界面login.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  6. Appcan开发笔记:结合JQuery的$.Deferred()完善批量异步发送

    appcan的 uexXmlHttpMgr.send 或者 appcan.ajax无法同步请求(没有找到这个属性),只能异步,造成循环多次提交时由于延迟或网络堵塞等原因无法同步响应,导致提交顺序混乱, ...

  7. 【LeetCode】87. Scramble String

    题目: Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty subs ...

  8. 12.引入依赖项目的时候,如果找不到jar

    原因是bin没有生成,先clean依赖包,再clean原工程包,就可以了

  9. 经验之谈——gulp使用教程

    gulp的最实用教程 使用gulp编译less.sass.压缩js等常用功能讲解 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多 ...

  10. MySQL--当mysqldump --single-transaction遇到alter table

    部分生产环境采用mysqldump --single-transaction的方式在夜间进行数据库备份,而同事恰好在备份期间执行了alter table操作,操作部分成功部分失败,为啥呢? 在mysq ...