PHP xml实体注入

PHP xml实体注入

1. 环境介绍

  • PHP 7.0.30
  • libxml 2.8.0

libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。为了演示PHP环境下的XXE漏洞,本例会将libxml2.8.0版本编译进PHP中。PHP版本并不影响XXE利用。

2. 漏洞利用

利用vulhub漏洞环境,启动后,访问http://your-ip:8080/index.php即可看到phpinfo,搜索libxml即可看到其版本为2.8.0。

该漏洞环境包含dom.php、SimpleXMLElement.php、simplexml_load_string.php等文件均可触发XXE漏洞。

以SimpleXMLElement.php为例:

(1) 查看其源码如下,

PHP xml实体注入

 (2)php://input可以读取post请求中的 http body数据,构建如下payload以读取敏感文件信息。

PHP xml实体注入

其他环境同理可利用成功。

3.相关函数介绍 

  • loadxml()函数:解析xml标签字符串。
  • new SImpleXMLElement($data),构建可操作的对象,$data是xml字符串。
  • simplexml_load_string($data) ,转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元
  • php://input是个可以访问请求的原始数据的只读流。可以读取http entity body中指定长度的值,由于Content-Length指定长度。
  1. php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini 
  2. php://input 与 $HTTP_RAW_DATA读取的数据是一样的,都是只读取Content-Type的值不是multipart/form-data的数据。
  3. Content-Type: application/x-www-data-urlencoded时,php://input数据和$_POST数据相一致。$_POST是对php://input做了再封装。
                       

点击阅读全文

上一篇 2023年 5月 26日 am11:14
下一篇 2023年 5月 26日 am11:15