spon插件之spon-xssprobe

什么是spon-xssprobe

spon-xssprobe是spon的一个插件,它用于分析js代码中可能存在的xss漏洞,并标记代码中已经存在的XSS Source和XSS Sink,开发人员根据tty输出信息进行修改,修复xss漏洞。

spon-xssprobe基于代码构建AST,并提取出所有可能导致XSS漏洞的变量、函数和js执行处,针对这些token做关键字过滤并进行语法分析,最后输出相关信息。

如何使用spon-xssprobe

在项目的主目录中使用spon xss命令,针对单个js文件进行漏洞分析。在这里需要提醒各位,在使用spon-xssprobe应该在代码构建之前,即在spon mb build之前进行spon xss操作。

目前spon xss仅针对单个文件进行分析,我们应养成一个习惯,即开发完业务代码之后,紧接着之行spon xss检测漏洞,检测通过后进入构建流程。

e.x.
存在文件 comment-m/src/pages/abc/abc.js

pwd: comment-m

exec: spon xss abc

根据输出信息进行修复。

示例代码:

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 xss hello后,输出信息:


XSSProbe Info: XSS Found - Source reached to the sink! 

     Line: 15   Codes:     var t = setTimeout(eval('callback'), 3000);

XSSProbe Info: Active Source is passed which is reached to the sink later! 

     Line: 24   Codes:   var call = location.hash.split("#")[1];

XSSProbe Info: XSS Found - Source reached to the sink! 

     Line: 26   Codes:   test(call);

XSSProbe Info: XSS Found - Source reached to the sink!

     Line: 27   Codes:   test(location.hash.split("#")[1]);

根据提示的信息,修改出现的xss source和sink。如,eval代码、采用location用户可修改的数据等。我们需要保障xss source的数据“干净”,确保xss sink是我们想要的操作,不会被注入。

欲休

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

海创园尚妆