03
2018
04

XML之Javascript DOM复习以及XXE漏洞的理解

        今天想学习一下XEE(xml实体注入)漏洞,所以先学习了一下xml语法,在菜鸟教程上看了会资料,对xml的一些总结如下:

  1. xml 相比 html,前者的作用是存储数据,后者的作用是显示数据;

  2. 一个xml文档须有根元素(相对其他元素,该元素为父元素);

  3. 通过Javascript脚本可以通过xml文件获得 XML Document对象来获取xml文件里的数据.


        在通过XML Document获取xml数据的时候,复习了如下JS知识 ,XML Document对象通过 getElementsTagName() 方法获得HTML Collection 对象,这个对象就像一个数组,通过 [ ] 号取值的方法可以获得一个节点,也就是Element 对象,Element 对象在某些场合任然可以使用getElementsTagName() 方法再次获得HTML Connection 对象,得知,当一个Element 对象为单个元素的时候,可以通过childNodes方法获得一个NodeList对象,使用 [0] 方法获得一个 Text 对象,通过nodevalue获得该节点的值,附上图方便理解。

图片.png

图片.png

该HTML页面会显示出‘A’.


-----------------------------------------------------------------分割线----------------------------------------------------------------------------

从XXE常用的一个exp来看:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Anything [
<!ENTITY xxe  SYSTEM "file:///etc/passwd">]>

<a><b>&xxe;<b><a> 


ENTITY 为DTD规范,(DTD规范的作用是规范 xml ),ENTITY的作用是为变量xxe‘起别名’,值为"file:///etc/passwd"

下方的xml正文通过“&xxe;”来对这个变量进行调用,本来只是起到一个变量引用的,但是 SYSTEM 关键字被添加上去之后,这个变量的值可以将由一个基于URL/FILE协议的远程地址来进行确定,在php5.4中做如下实验:

图片.png

通过访问该php脚本,可以得到file协议中的内容:

图片.png


图片.png

该方法在php5.2以及5.4的版本中均成功(原因应该是在这些版本中 simplexml_load_string 等方法会自动解析外部实体),php 5.6 和php 7均失败.

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。