您的位置:首页 > 编程语言 > Python开发

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

分享至此,感谢指教~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 自动化 XSS 测试