XDT——基于Python的XSS自动化检测工具
2016-07-18 14:50
786 查看
前言
XDT(XSS Detection Tool)是一个基于Python的XSS自动化检测工具。关于Python
作为最受欢迎的程序设计语言之一,其语法简洁,代码执行快速(不需编译),具有丰富和强大的库,可以帮助处理各种工作,包括线程、数据库、文档生成、正则表达式、单元测试、网页浏览器、CGI、FTP、电子邮件等等。由于其简单快速且强大的特性,测试工具开发者偏爱使用Python进行开发,这里,对于XDT的实现我也选择使用它来进行实现。关于XSS
1.XSS介绍XSS(Cross Site Scripting,跨站脚本攻击)是一类特殊的Web客户端脚本注入攻击手段,通常指攻击者通过“HTML注入”篡改了网页,插入恶意的脚本,从而在用户浏览网页时控制浏览器的一种攻击。
当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的转义,或者在这些内容被显示在页面之前没有验证它们都是安全的,使得输入被视为浏览器中的动态内容,就会导致存在跨站脚本漏洞。
2.XSS分类
反射型XSS是把用户输入的数据“反射”给浏览器,攻击代码主要存在于用户请求的URL路径当中。反射型XSS是一次性的,也被称作非持久性XSS。
存储型XSS提交的恶意脚本代码会持久存在服务器端,因此这种类型的XSS也被称为持久型XSS。
XDT的实现
框架设计
检测模型如下1.网络爬虫模块实现网页抓取和获取注入点。开始漏洞检测前首先要获取网页内容,在给定一个网址URL后,当给定的URl含参数,那么攻击位置在于其各个参数值,需要对各个参数名称进行提取从而得到注入点;当给定的URL不含参数时,需要分析网页内容,对于Form表单的注入点在于允许用户提交的数据域。获取到反射型XSS注入点或存储型XSS注入点用以测试。
2.漏洞检测模块实现提交恶意负载和分析服务器返回的响应。通过构造含有特定的恶意负载,如:
"<img src=1 onerror=alert(1);>" "</script><script>alert(1);</script>"等等,将恶意负载作为参数提交给服务器,然后捕获分析服务器返回的响应,看是否有弹出窗或者引起浏览器脚本错误,从而判断是否存在XSS漏洞。
3.结果分析模块实现测试报告的生成和发送。需要设计实现一个公共模板的测试报告,在漏洞检测完成后,检测工具将根据分析判断结果自动生成一份新的测试报告,然后发送到设定的收件人邮箱。
测试
测试一:反射型和存储型XSS漏洞页面用例设计1.反射型
a.作用位置在HTML标签之间
Demo:
<html> <body> <?php $first=$_GET["first_name"]; $last=$_GET["last_name"]; echo "first_name:",$first,"<p>"; echo "last_name:",$last; echo"<p>hello"; ?> </body> </html> <!--http://localhost/test/first.php?first_name=1&last_name=1输出在标签之间-->
b.作用位置在HTML标签之内
Demo:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test XSS_property</title> <script type="text/javascript" > function writeToDom(str){ document.writeln(str); } function writelnToDom(str){ document.writeln("<br>"+str + "<br>"); } function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } var scriptVar=getQueryString("name"); document.getElementById("a").setAttribute("value",scriptVar); </script> </head> <body> <p> <input type='text' id='a' value=''> <?php $first=$_GET["name"]; $ss=$_GET["age"]; ?> </body> <script> var scriptVar=getQueryString("name"); document.getElementById("a").setAttribute("value",scriptVar); writelnToDom("original: " + scriptVar); </script> </html> <!--http://localhost/test/third_property.php?name=as--> <!--eval('alert(1)');void-->
c.成为JavaScript代码的值
Demo:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test XSS_script</title> </head> <body> name:<input type="text" name="name" > <?php ?> </body> </html> <script type='text/javascript'> function writeToDom(str){ document.writeln(str); } function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } var scriptVar=getQueryString("name") var script = document.createElement("script"); script.innerHTML = scriptVar; document.getElementsByTagName('body')[0].appendChild(script); </script> <!--http://localhost/test/forth_script.php?name=aaaa-->
2.存储型
在线测试地址:
http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedTest.php
启动XDT后,点击DVWA demonstration对应的start按钮,将开始演示检测。
·方法步骤:启动XDT后,填写邮箱地址,输入待测试的URL,点击Detection按钮,将开始检测XSS。
测试二:DVWA漏洞平台
1.安装wamp集成环境,然后下载dvwa地址是
http://www.dvwa.co.uk/
·方法步骤:启动XDT后,填写邮箱地址,点击DVWA demonstration对应的start按钮,将开始演示检测。
源代码
GitHub地址:https://github.com/swallowing0619/XDT
分享至此,感谢指教~
相关文章推荐
- Android之使用Http协议实现文件上传功能
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例