Snuck:一款自动化XSS漏洞扫描工具
工具简介
snuck是一款自动化的漏洞扫描工具,它可以帮助你扫描Web应用中存在的XSS漏洞。snuck基于Selenium开发,并且支持Firefox、Chrome和IE浏览器。
snuck与传统的Web安全扫描工具有显著的区别,它会尝试利用特殊的注入向量来破坏网站的XSS过滤器,并通过这种方法提高漏洞的检出成功率。基本上说,snuck所采用的检测方法与iSTAR漏洞扫描工具的检测方法较为相似,但snuck针对的是特定的XSS过滤器。
下载和运行
snuck是一款采用Java编程语言开发的开源软件,该工具遵循Apache2.0许可证,你可以使用svn下载该工具。
svn checkout https://github.com/mauro-g/snuck snuck
下载完成之后,你可以使用build.xml文件来让Ant帮你编译源文件,并生成一个jar文件。
cd snuck
ant jar
运行完上面这两个命令之后,你就可以得到一个可执行的jar文件了。
除此之外,你也可以直接下载一个可执行的jar文件【传送门】。但是这个文件是2012年10月份发布的,所以它可能不支持新版的浏览器。
snuck不需要特定的依赖环境,你只需要安装一个JVM和Firefox浏览器即可。如果你想用Chrome/Chromium来进行测试的话,你需要下载一个特定的服务器【传送门】,这个服务器将作为Web浏览器和snuck扫描引擎之间的通信桥梁。对于IE浏览器也是一样,你也需要下载一个服务器【传送门】。当前版本的snuck可以在IE9上正常工作,但是在旧版本的IE浏览器中可能会出现问题,开发小组目前也正在努力解决这些问题。当然了,snuck采用Java编写,因此你可以在任何平台上使用它。
当你下载或生成了这个jar文件之后,你需要熟悉一下snuck的命令行选项,具体如下所示:
> java -jar snuck.jar
Usage: snuck [-start xmlconfigfile ] -config xmlconfigfile-report htmlreportfile [-d # ms_delay]
[-proxy IP:port] [-chrome chromedriver ] [-ie iedriver][-remotevectors URL] [-stop-first]
[-reflected targetURL -p parameter_toTest] [-no-multi]
Options :
-start path to login use case (XML file)
-config path to injection use case (XML file)
-report report file name (html extension isrequired)
-d delay (ms) between each injection
-proxy proxy server (IP: port)
-chrome perform a test with Google Chrome,instead of Firefox. It needs the path to the chromedriver
-ie perform a test with InternetExplorer, instead of Firefox.
Disable the built in XSS filter in advance
-remotevectors usean up-to-date online attack vectors source instead of the local one
-stop-first stop the test upon a successful vector isdetected
-no-multi deactivate multithreading for the reverseengineering process - a sequential approach will be adopted
-reflected perform a reflected XSS test (withoutwriting the XML config file)
-p HTTP GET parameter to inject(useful if -reflected is set)
-help show this help menu
XSS攻击向量
该工具自带了一套XSS攻击向量集,你可以直接在项目目录下的paylaods文件夹中找到这些测试向量。该目录包含下列四个文件:
1. html_payloads:它存储了用于生成警告弹窗的HTML标签。你可以直接在向量集中使用占位符,比如说,测试用例为,该工具便会随机选择一个javascript alert来替代攻击向量中的%alert%。同理,类似这样的向量也是类似的。
2. js_alert:存储了大量的javascript代码来触发警告弹窗,例如alert(1)或eval(alert(2))等等。
3. uri_payloads:存储了大量恶意URI,例如javascript:alert(1)。
4. expression_alert_payloads:它存储了大量恶意payload。例如expression(URL=0),此时,snuck会强制生成一个以字符“0”结尾的重定向URL,并用它来尝试捕获漏洞。
当然了,测试人员也可以向工具添加自定义的测试向量,添加过程也很简单,只需要将测试向量写入即可。如果你不想使用本地测试向量集的话,你也可以使用一个在线攻击向量库(运行snuck时加上-remotevectors参数即可)。此时你需要提供一个指向远程攻击向量库的URL地址,并且其中要包含一个名为“payloads”的目录。比如说,向量库的地址为http://www.example.com/repository/,那么snuck会在http://www.example.com/repository/payloads/中寻找上述的四个payload文件。