XXE初探

XXE初探最近经常看到XXE出没,以为是最近才出现的一种类型,后来发现14年,乌云上面就有好多的案例,实在是我太lo了~@Time:2018/11/15在jarvisoj上面有着一道xxe的练习题,感兴趣的大佬可以去玩玩https://www.jarvisoj.com/challenges在写题之前,我们先科普一下,什么是xxe?xxe是xml外部实体注入,这里有一段xml的解释XM…

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

最近经常看到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格式如下

<?xml version="1.0"?>
<!DOCTYPE task [
  <!ENTITY search SYSTEM "/etc/passwd">
]>
<task>&search;</task>

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

进入的页面是这个

XXE初探

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

<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初探

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

XXE初探

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

XXE初探

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

XXE初探

END :)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java工程师简历项目经验怎么写_高级java开发工程师简历

    java工程师简历项目经验怎么写_高级java开发工程师简历开头在找工作的过程中,对于Redis技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了…redis了解吗?你说说怎么用redis实现分布式锁?Redis常用数据结构及底层数据结构实现如何解决Redis的并发竞争Key问题如何保证缓存与数据库双写时的数据一致性?剩下的不太记得了…为此面试完回来针Redis专门做了一个面试问题大总结架构筑基大家都知道,性能一直

    2025年6月1日
    3
  • linux基本操作_shell入门教程

    linux基本操作_shell入门教程linux环境虚拟机管理使用VMwareWorkstationlunix系统使用redhat7.4(镜像.ios) linux常用命令::Id用户名查看用户信息查询端口号占用netstat-tunlp|grep端口号pwd查看当前文件夹目录cat查看文件,不可修改cat文件|more以分页模式查看文件,(空格键下一页,回车下移一行,q退…

    2022年10月3日
    1
  • Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

    Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

    2022年1月16日
    46
  • sdio接口wifi模块_zynq wifi

    sdio接口wifi模块_zynq wifi1、sdio接口层解析SDIO总线SDIO总线和USB总线类似,SDIO也有两端,其中一端是HOST端,另一端是device端。所有的通信都是由HOST端发送命令开始的,Device端只要能解析命令,就可以相互通信。CLK信号:HOST给DEVICE的时钟信号.每个时钟周期传输一个命令或数据位。CMD信号:双向的信号,用于传送命令和反应。DAT0…

    2022年10月3日
    3
  • 华为云服务器手机密码找回,忘记华为账号密码怎么办?两招就能帮你解决

    华为云服务器手机密码找回,忘记华为账号密码怎么办?两招就能帮你解决每天跟我们生活息息相关的账号密码,实在是太多太多了。银行卡密码、支付密码、游戏账号密码、各种APP账号密码等等……账号密码太多,也导致了我们有时候会忘记某些账号密码。那么问题来了,如果忘记了华为账号密码,怎么破?别担心,官维君教大家两招如何找回密码,一起来看看吧!第一招:登录华为云服务官网找回密码登录华为云服务官网☛https://cloud.huawei.com/,点击“忘记密码”,然后根据提示…

    2022年6月18日
    233
  • Python实现AI视频识别——手势控制[通俗易懂]

    Python实现AI视频识别——手势控制[通俗易懂]用opencv识别手势实现原理代码importcv2importmediapipeasmpclasshandDetector():#经典OOP#设置初始条件def__init__(self,mode=False,maxHands=2,detectionCon=0.5,trackCon=0.5):self.mode=modeself.maxHands=maxHands#最多同时出现几只手

    2022年5月9日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号