文章目录
实验室链接 https://portswigger.net/web-security
XXE漏洞如何产生
一些应用程序使用XML格式在浏览器和服务器之间传输数据.而服务器端又没有对XML数据进行很好的检查,就可能产生XXE漏洞.
如: 某个网页可能传输如下的数据
如果稍加修改:
利用XXE读取文件
要执行从服务器的文件系统中读取任意文件的XXE注入攻击,需要修改两处XML:
- 引入(或编辑)一个
DOCTYPE
元素,该元素定义一个包含文件路径的外部实体。 - 编辑应用程序响应中返回的XML中的数据值,以使用已定义的外部实体
例如,假设购物应用程序通过向服务器提交以下XML来检查产品的库存:
<?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>
就可以读取文件
利用XXE执行SSRF攻击
除了检索敏感数据外,XXE攻击的另一个主要影响是,它们可用于执行服务器端请求伪造(SSRF) ,
这可能导致服务器端应用程序对服务器可以访问的任何URL发出HTTP请求
通过查看请求相应判断请求资源是否存在等.
操作方法也是先引入一个实体,再替换响应值:
如下:
引入实体探测内网: 探测http://169.254.169.254/时
说明我们请求的资源存在,返回了一个目录的名称latest
持续的请求最终可以读取到文件
XXE盲注检测
前面两种都是有回显情况下的XXE注入,但实际上XXE漏洞的许多情况都是没有回显的.
这意味着应用程序不会在其响应中返回任何已定义外部实体的值,因此无法直接检索服务器端文件
但是可以通过别的方法来间接检测
检测方法:
- 报错注入
- 与外网交互
通过Burpsuite的Collaborator可以测试XXE盲注
Burp Collaborator测试XXE盲注
具体使用可以参考 https://blog.csdn.net/fageweiketang/article/details/89073662
在BurpSuite专业版中.
开启Collaborator Server
通过工具栏可以打开
点击Copy to clipboard可以生成连接
类似xxx.burpcollaborator.net
当我们发现 存在疑似XXE漏洞,测试的时候只能看见"Invalid product ID"