一、XXE
XML外部实体攻击(用户输入数据被当做XML实体代码执行,然后利用DTD部分可以通过SYSTEM关键词发起网络请求,从而获得数据)
典型攻击,定义实体必须写在DTD部分
外部实体是TDT部分的一个特殊地方(SYSTEM)可以调用外部文件进行XML文件的规划(可以发起网络请求)
1、XML
一种类似html的语言,用于传输数据,没有被预定义,需要自行定义标签
2、原理
有了XML实体,关键字’SYSTEM’会令XML解析器从URI中读取内容,并允许它在XML文档中被替换。
因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。
简单来说,攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)
php中存在一个叫做simplexml_load_string的函数(用来处理XML)这个函数是将XML转化为对象
实例:
<?php
$test = '<!DOCTYPE scan [<!ENTITY test SYSTEM "file:///f:/1.txt">]><scan>&test;</scan>'; $obj = simplexml_load_string($test, 'SimpleXMLElement', LIBXML_NOENT);
print_r($obj);
?>
变量test里面是XML
然后用simplexml_load_string将其转化为对象,第一个参数是xml语句,SimpleXMLElement是调用了SimpleXMLElement