spon插件之spon-xssmark

什么是spon-xssmark

spon-xssmark是标记文件中(包括js、css、html、tmpl文件)xss漏洞的一款插件,它与spon-xssprobe的区别在于是否可以针对其他非语义化代码进行漏洞分析。spon-xssprobe插件只能针对可编译成AST的代码进行分析,在前端领域就是js文件;而spon-xssmark则是针对所有的文件进行漏洞检测,排查出可能的xss source和sink。

如何使用spon-xssmark

使用xssmark仍然很简单,同样针对单个“页面工程”(页面工程包括页面对应的html、js、css、tmpl文件)使用,但是v0.0.1版本的插件仅仅针对js文件做了分析,有待继续开发。

执行命令方式: "spon xssmark xxx"

同样,spon-xssmark提供了一个“-s(--show)”选项,用于在tty标记所有的代码,大家可以自行尝试。

下面,采用同样的例子对比与spon-xssprobe的区别:


示例代码:

hello.js

function timedMsg(callback) {  
  if (callback) {
    var t = setTimeout(eval('callback'), 3000);
    Function('return alert(323)');
    document.writeln('abc');
    document.write('abc');
    return 0;
  }
}

function fire() {  
  var call = location.hash.split("#")[1];
  var test = timedMsg;
  test(call);
  test(location.hash.split("#")[1]);
  (100)['constructor']['constructor']('alert(3)')();
}

fire();  

执行 spon xssmark hello命令:


XSS漏洞由攻击者利用开发者的漏洞注入外站JS代码,窃取用户数据或者进行CSRF攻击。在XSSMark中,定义XSS Source为攻击者可能的输入源(开发者利用这些被污染的数据源进行DOM操作或者JS执行),定义XSS Sink为可能发生XSS漏洞的位置,一般而言在于DOM操作、事件处理和JS执行。利用XSSMark进行标记相应的位置,针对可能出现的漏洞做修补--最安全的方法就是不信任所有的跨域数据源,不信任所有的用户输入数据,进行转码!

XSS Marked:(XSS Source用黄色标记,XSS Sink用红色标记)

XSSMark共发现4个XSS Source,10个XSS Sink!

XSS Source Found:

XSSMark Info: XSS Source Marked!  
    Line:24    codes: location.  @@@   var call = location.hash.split("#")[1];
XSSMark Info: XSS Source Marked!  
    Line:27    codes: location.  @@@   test(location.hash.split("#")[1]);
XSS Sink Found:

XSSMark Info: XSS Source Marked!  
    Line:15    codes: setTimeout(  @@@     var t = setTimeout(eval('callback'), 3000);
XSSMark Info: XSS Source Marked!  
    Line:15    codes: eval(  @@@     var t = setTimeout(eval('callback'), 3000);
XSSMark Info: XSS Source Marked!  
    Line:17    codes: writeln(  @@@     document.writeln('abc');
XSSMark Info: XSS Source Marked!  
    Line:18    codes: write(  @@@     document.write('abc');
XSSMark Info: XSS Source Marked!  
    Line:28    codes: ['constructor']['constructor'](  @@@   (100)['constructor']['constructor']('alert(3)')();

可以看出,xssmark会标记出所有存在的漏洞的地方,并针对jQuery(Zepto)做了兼容,因此针对标红和标黄的代码,我们要十分确定它们的执行后果!!

上文说过,xssmark有"-s"选项,大家可以尝试使用下,不过针对较多代码的文件,还是建议不要使用该选项。

欲休

继续阅读此作者的更多文章

海创园尚妆