Tag:XML

Tag (XML)'s result:

一文熟悉XXE

0x00 概述 XXE(XML External Entity attack),即外部实体注入,攻击利用xml作为数据交换的功能点,较为少见,但是威力巨大。 0x01 危害 任意文件读取,如/etc/passwd 命令执行(expect://id) 内网端口探测 攻击内网网站(struts2) DOS(billion laughs)   0x02 前置知识 XML: 一种允许用户对自己的标记语言进行定义的源语言。 文档结构包括: 1.XML声明: <?xml version=”1.0″?> 2.DTD文档类型定义(可选) DTD 可以在 XML 文档内声明,也可以外部声明。 内部声明: <?xml version=”1.0″?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don’t forget the meeting!</body> </note> 外部声明: <?xml version=”1.0″?> <!DOCTYPE note SYSTEM “note.dtd”> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don’t forget the meeting!</body> </note> note.dtd: <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> 很像css的内部样式和外部样式。 dtd实体用于定义引用普通文本或特殊字符的快捷方式的变量。 分为一般实体和参数实体。 一般实体:<!ENTITY 实体名 “实体内容“> &实体名 参数实体:<!ENTITY % 实体名 “实体内容“> %实体名   内部实体声明: <?xml version=”1.0″?> <!DOCTYPE test [ <!ENTITY writer “Bill Gates”> <!ENTITY copyright “Copyright W3School.com.cn”> ]> <test>&writer;&copyright;</test> 外部实体声明: <?xml version=”1.0″?> <!DOCTYPE test [ <!ENTITY writer SYSTEM “http://www.w3school.com.cn/dtd/entities.dtd”> <!ENTITY copyright SYSTEM “http://www.w3school.com.cn/dtd/entities.dtd”> ]> <author>&writer;©right;</author> 3.文档元素 <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don’t forget the meeting!</body> </note> 0x02 原理分析 有回显: 测试代码: //测试代码来源 //www.mottoin.com/wp-content/uploads/2016/11/xxe.txt <?php # Enable the ability to load external entities libxml_disable_entity_loader (false); $xmlfile = file_get_contents(‘php://input’); $dom = new DOMDocument(); # http://hublog.hubmed.org/archives/001854.html # LIBXML_NOENT: 将 XML 中的实体引用 替换 成对应的值 # LIBXML_DTDLOAD: 加载 DOCTYPE 中的 DTD 文件 $dom->loadXML($xmlfile,……