[web安全] 上传漏洞之绕过上传漏洞
2015-07-16 16:45
155 查看
程序员在防止文件上传漏洞时可以分为以下两种:
$客户端检测:客户端使用JavaScript检测,在文件未上传时,就对文件进行验证;
$服务器端检测:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,甚至有些程序员检测文件中是否嵌入恶意代码
一句话木马的常见代码:
PHP: <?php @eval($_POST['chopper']);?>
ASP: <%eval request("chopper")%>
ASP.NET: <%@ Page Language="Jscript"%><%eval (Request.Item["chopper"],"unsafe");%>
图片一句话:
是将一句话木马插入在图片文件中,而且并不损坏图片文件,这一方法可以躲过少许的防火墙检测。
专业的制作软件LEdjpgcom
一、客户端检测
程序员使用JavaScript来拒绝非法文件上传。
绕过方法:
FireBug插件:将用于检验文件扩展名的onsubmit事件删除。
中间人攻击:使用Burp Suite。首先把木马扩展名改为一张正常图片的扩展名,比如JPG扩展名,在上传时使用Burp Suite拦截上传数据,再将其中的扩展名JPG修改为PHP,就可以绕过客户端验证。(可能还需要相应地修改Content-Length)
任何客户端验证都是不安全的。客户端验证是防止用户输入错误,减少服务器开销,而服务器端验证才可以真正防御攻击者。
二、服务器端检测
2.1 白名单与黑名单验证
黑名单过滤方法:定义不允许上传的文件扩展名
黑名单的绕过方法:1.攻击者可以从黑名单中找到Web开发人员忽略的扩展名,如:cer
2.对文件的后缀名进行大小写转换,比如黑名单中有php,可以将文件的后缀改为pHp,仅限windows平台
3.在windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动删除“.”与空格,利用此特性也可以绕过黑名单验证。(asp.或asp_)
白名单过滤方法:定义允许上传的文件扩展名
白名单的绕过方法:结合Web容器的解析漏洞
2.2 MIME验证
php中通过$_FILE['file']['type']来检验
绕过方法:可以在Burp Suite中更改Content-Type的内容为image/jpeg
2.3 目录验证
在文件上传时,程序通常允许用户将文件放到指定的目录中,如果指定的目录存在,就将文件写入目录中,不存在的话则先建立目录,然后写入。
比如:在前端的HTML代码中,有一个隐藏标签<input type="hidden" name="Extension" value="up"/>
在服务器端有如下代码
if(!is_dir($Extension)){ //如果文件夹不存在,就建立文件夹
mkdir($Extension);
}
攻击者可以利用工具将表单中value的值由“up”改为“pentest.asp”,并上传一句话图片木马文件。
程序在接收到文件后,对目录判断,如果服务器不存在pentest.asp目录,将会建立此目录,然后再将图片一句话密码文件写入pentest.asp目录,如果Web容器为IIS 6.0,那么网页木马会被解析。
2.4 截断上传攻击
在ASP程序中最常见,也就是%00将后面的字符都截断了,比如上传文件名为1.asp%00xxser.jpg。
实际操作过程中,利用Burp Suite的Repeater中的HEX选项卡可以进行这样的操作。
截断上传漏洞不仅出现在ASP程序上,在PHP、JSP程序中也存在这样的问题。
0x00不是针对所有基于白名单的后缀名检查都能绕过,代码的实现过程中必须存在截断上传漏洞。
$客户端检测:客户端使用JavaScript检测,在文件未上传时,就对文件进行验证;
$服务器端检测:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,甚至有些程序员检测文件中是否嵌入恶意代码
一句话木马的常见代码:
PHP: <?php @eval($_POST['chopper']);?>
ASP: <%eval request("chopper")%>
ASP.NET: <%@ Page Language="Jscript"%><%eval (Request.Item["chopper"],"unsafe");%>
图片一句话:
是将一句话木马插入在图片文件中,而且并不损坏图片文件,这一方法可以躲过少许的防火墙检测。
专业的制作软件LEdjpgcom
一、客户端检测
程序员使用JavaScript来拒绝非法文件上传。
绕过方法:
FireBug插件:将用于检验文件扩展名的onsubmit事件删除。
中间人攻击:使用Burp Suite。首先把木马扩展名改为一张正常图片的扩展名,比如JPG扩展名,在上传时使用Burp Suite拦截上传数据,再将其中的扩展名JPG修改为PHP,就可以绕过客户端验证。(可能还需要相应地修改Content-Length)
任何客户端验证都是不安全的。客户端验证是防止用户输入错误,减少服务器开销,而服务器端验证才可以真正防御攻击者。
二、服务器端检测
2.1 白名单与黑名单验证
黑名单过滤方法:定义不允许上传的文件扩展名
黑名单的绕过方法:1.攻击者可以从黑名单中找到Web开发人员忽略的扩展名,如:cer
2.对文件的后缀名进行大小写转换,比如黑名单中有php,可以将文件的后缀改为pHp,仅限windows平台
3.在windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动删除“.”与空格,利用此特性也可以绕过黑名单验证。(asp.或asp_)
白名单过滤方法:定义允许上传的文件扩展名
白名单的绕过方法:结合Web容器的解析漏洞
2.2 MIME验证
php中通过$_FILE['file']['type']来检验
绕过方法:可以在Burp Suite中更改Content-Type的内容为image/jpeg
2.3 目录验证
在文件上传时,程序通常允许用户将文件放到指定的目录中,如果指定的目录存在,就将文件写入目录中,不存在的话则先建立目录,然后写入。
比如:在前端的HTML代码中,有一个隐藏标签<input type="hidden" name="Extension" value="up"/>
在服务器端有如下代码
if(!is_dir($Extension)){ //如果文件夹不存在,就建立文件夹
mkdir($Extension);
}
攻击者可以利用工具将表单中value的值由“up”改为“pentest.asp”,并上传一句话图片木马文件。
程序在接收到文件后,对目录判断,如果服务器不存在pentest.asp目录,将会建立此目录,然后再将图片一句话密码文件写入pentest.asp目录,如果Web容器为IIS 6.0,那么网页木马会被解析。
2.4 截断上传攻击
在ASP程序中最常见,也就是%00将后面的字符都截断了,比如上传文件名为1.asp%00xxser.jpg。
实际操作过程中,利用Burp Suite的Repeater中的HEX选项卡可以进行这样的操作。
截断上传漏洞不仅出现在ASP程序上,在PHP、JSP程序中也存在这样的问题。
0x00不是针对所有基于白名单的后缀名检查都能绕过,代码的实现过程中必须存在截断上传漏洞。
相关文章推荐
- sqlit数据库升级,添加字段
- 类库调用Response
- cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode
- XMPP之ios即时通讯客户端开发-配置XMPP基本信息(四)
- .net 按比例显示图片的缩略图
- iptables 状态机
- C# 连接 Oracle 的几种方式
- cocos2d-x初探学习笔记(29)-cocosBuilder
- 2014公积金新政策对你买房有什么好处?
- 算法の堆排序
- Java IO
- 干掉浏览器锁定的2345主页
- UVa540插队问题
- phpmyadmin 显式ip
- c++编程经验一
- scala学习笔记(三)
- scala学习笔记(二)
- scala学习笔记(一)
- uniq命令
- 数据结构与算法五