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) 查看其源码如下,

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

 

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

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做了再封装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值