XML基础
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。一个完整的XML例子:
1 | "1.0" encoding="GBK" xml version= |
可以看到有xml声明、DOCTYPE声明(实体必须在DOCTYPE中声明)等。解析结果:
XML安全问题
XXE
what’s XXE?
XXE也就是XML External Entity,XML外部实体注入。外部实体分SYSTEM和PUBLIC两种,引入外部实体格式如下:
1 | <!ENTITY 引用名 SYSTEM(PUBLIC) "URI地址"> |
下面分别是PUBLIC和SYSTEM的例子
1 | <?xml version="1.0" encoding="UTF-8"?> |
1 | "1.0" encoding="UTF-8" xml version= |
可以看到,PUBLIC的话,需要在文件名前面加一个PUBLIC_ID.这里的原理是通过file协议把
/etc/passwd
的值赋给了实体f,然后f又被放在x元素中,被print出来了。
for windows:此处可以使用各种协议
xml.php:
1 |
|
通过编码绕过关键词检测:
XXE用于端口扫描、SSRF
1 |
|
BLIND XXE?
遇到没有回显的情况,可以用BLIND XXE的技巧:1.用file协议读文件。2.用http协议把实体内容带出。本地测试各种换版本都不行,先放着不写。
用XML当数据库?
XPATH注入
test.xml:
1 | "1.0" encoding="UTF-8" xml version= |
xml.php
1 |
|
XPATH盲注
可以看这篇文章