赞
踩
测试怎么测
一、前提条件:(1)有入口用户可上传XML (2)后台解析了XML & 允许DTD或外部实体扩展
二、测试发现漏洞点
https://xz.aliyun.com/t/3357
1、实体循环DDOS
a)、发送以下XML代码到服务器,如:
<!ENTITY % xx '%zz;'>
<!ENTITY % zz '%xx;'>
%xx;
b)、当执行到最后一行,%xx会变成%zz,然后%zz又会变成%xx,实体转换变成一个死循环。
c)、查看XML解析器在解析时是否被拒绝服务攻击,即Web系统是否被DDOS。
2、XML炸弹DDOS
a)、发送以下XML代码到服务器,如:
<?xml version=""1.0"" encoding=""utf-8""?>
<!DOCTYPE something [
<!ENTITY x0 ""Developers!"">
<!ENTITY x1 ""&x0;&x0;"">
<!ENTITY x2 ""&x1;&x1;"">
<!ENTITY x3 ""&x2;&x2;"">
<!ENTITY x4 ""&x3;&x3;"">
...
<!ENTITY x100 ""&x99;&x99;"">]>
<something>&x100;</something>
b)、当执行到最后一行,最终字符串变成了一个超大字符串。
c)、查看XML解析器在解析时是否被拒绝服务攻击,即Web系统是否被DDOS。
3、外部实体注入
a)、实体能够引用文件的内容,也可以通过指定外部URL,如发送以下代码:(windows服务器)
<?xml version=""1.0"" encoding=""UTF-8""?>
<!DOCTYPE myTest [
<!ELEMENT secTest ANY>
<!ENTITY xxe SYSTEM ""c:/boot.ini"">]>
<secTest>&xxe;</secTest>
b)、查看是否显示服务器C盘下的boot.ini配置内容。
三、渗透
1)分析XML参数的意义,设计构造输入内容(如保存用户的格式为<USER role="“guest”">test时,通过修改用户名test为User1User2的方式增加用户)分析对功能的影响
2)使用特别长的标签 像使用1024个及超过1024个A的标签
3)使用特别多的属性 像<AA a=‘a’b=‘b’>的n个
4)递归负载攻击,注入深层次的循环嵌套的xml数据,造成服务器上XML分析器崩溃,造成Dos
5)外部实体攻击。使用<!Entityname SYSTEM “URI”>
开发怎么改
一、XXE(XML External Entity漏洞),是一种针对XML终端实施的攻击,黑客想要实施这种攻击,需要在XML的payload包含外部实体声明,且服务器本身允许实体扩展。这样的话,黑客或许能读取WEB服务器的文件系统,通过UNC路径访问远程文件系统,或者通过HTTP/HTTPS连接到任意主机。借助XXE,攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等。
二、危险方法
解析xml格式的数据的函数:将XML数据反序列化到新创建的Java内容树中的过程
以下方法均不禁用DTD
SAXReader
SAXBuilder
unmarshaller
DocumentBuilderFactory(DocumentBuilder)
SAXParserFactory (SAXParser)
SAXParserFactory(XMLReader)
XMLReader
XMLInputFactory
TransformerFactory
三、安全的写法
需要禁用DTD,或者禁止外部实体解析和参数实体解析。
场景1:SAXReader。默认情况下,SAXReader不禁用DTD,需要通过调用setFeature方法设置相应的属性完全禁止或部分禁止DTD来防御XXE注入。
错误示例:
SAXReader reader = new SAXReader();
Document doc = reader.read(new File(fileName));
System.out.println(doc);
正确示例(不允许DTD,优选):
SAXReader reader = new SAXReader();
//禁用DTDs (doctypes),不允许使用 DOCTYPE。
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
//如果不能禁用DTDs,可以使用下两项,必须两项同时存在
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
//防止外部实体POC
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
//防止参数实体POC
Document doc = reader.read(new File(fileName));
System.out.println(doc);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。