CN104881607B - 一种基于模拟浏览器行为的xss漏洞检测系统 - Google Patents
一种基于模拟浏览器行为的xss漏洞检测系统 Download PDFInfo
- Publication number
- CN104881607B CN104881607B CN201510262307.3A CN201510262307A CN104881607B CN 104881607 B CN104881607 B CN 104881607B CN 201510262307 A CN201510262307 A CN 201510262307A CN 104881607 B CN104881607 B CN 104881607B
- Authority
- CN
- China
- Prior art keywords
- page
- module
- url
- xss
- decanting point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Abstract
一种基于模拟浏览器行为的XSS漏洞动态检测系统。该系统由爬虫模块和漏洞检测模块组成。爬虫模块含有浏览器的内核,可以模拟浏览器行为来解析JavaScript和加载Ajax以得到页面中隐藏式注入点,相比传统而言,该系统大大增加了对注入点的覆盖。漏洞检测模块使用黑盒测试的方法,在提交攻击向量后,通过模拟浏览器行为检测页面是否有异常情况出现,即能够检测浏览器是否执行了网页脚本,直接判断出当前注入点是否有漏洞,相比传统方法更加准确。此外,该系统完全采用python语言开发,具有易于维护和进行二次开发的特点,对XSS漏洞的检测与研究有非常重要的应用价值。
Description
技术领域
本发明涉及一种基于模拟浏览器行为的XSS漏洞检测系统,属于计算机软件跨站脚本漏洞领域。
背景技术
近年来,随着Web应用的广泛使用,Web安全问题也日益突出。OWASP公布的2013年十大Web应用安全风险中,跨站脚本漏洞XSS(Cross Site Scripting)名列第三,这表明XSS漏洞已成为当前各类网站需共同面对的常见的安全风险之一。
XSS漏洞的产生是由于来自用户的不可信数据被应用程序在没有进行验证,以及反射回浏览器而没有进行编码或转义的情况下进行了处理,导致浏览器引擎执行了代码时。很多网站在开发过程中忽略了必要的输入验证,缺乏足够的安全性,这样的网站就很容易被跨站脚本攻击。通常攻击者会将恶意脚本提交到存在XSS漏洞的Web页面,当客户端用户浏览该页面时,脚本会被浏览器自动解析执行,达到挂马、钓鱼、盗取用户Cookie、劫持用户Web行为等目的,因此,对XSS漏洞的检测是非常必要的。
一般地,Web页面中可能存在XSS漏洞的地方称为注入点。如何在大量页面中找到潜在的注入点并进行检测是防范XSS漏洞的关键之一,同时也是一项繁杂的工作。在网站内容日益丰富的今天,人工检测注入点显然是不现实的,而需要尽可能采用自动化方法。网络爬虫对于基于网络的自动化测试工具是重要的基础功能,它可以从一个起始URL开始,通过分析网页的内容,运用相关算法找到新的URL并不断地循环抓取网页,直到满足一定的结束条件,从而获取大量的页面以寻找注入点。找到注入点后,测试工具再构造攻击测试请求发送给目标站点,并根据目标站点的回应信息来判断是否存在漏洞。
目前针对自动化XSS漏洞检测工具的研究还不是很充足,传统的方法均是以静态爬虫爬取页面,通过获取目标站点的目录结构、对各个页面的源码进行解析,将其中的表单信息提取出来,以达到寻找注入点的目的。然而,注入点很可能隐藏在网页的动态内容中,需要通过用户操作,如点击某个按钮,使浏览器解析JavaScript或加载Ajax才能生成。传统爬虫由于无法模拟浏览器行为,很难解析JavaScript或加载Ajax,从而忽略了隐藏式注入点。同时在页面解析时,它们还需要提取整个表单内容,获取表单的属性以分析向服务器提交数据的方式才能提交攻击向量,比较复杂,并且在漏洞检测方面不能动态地分析目标站点的回应信息,因此未必能判断出XSS漏洞是否存在。
发明内容
本发明采用动态分析,通过检查Web应用程序运行时的行为来检测XSS漏洞,设计并实现了以Ghost.py库为基础的爬虫框架。该系统框架使用黑盒测试判断XSS漏洞是否存在的准确率更高。
为达到以上发明目的,本发明采用的技术方案为一种基于模拟浏览器行为的XSS漏洞检测系统,本系统完全由python语言在Windows 64位系统上编写,在Windows 64位系统上正常运行。同时,本系统具有较强的通用型且支持其它操作系统。
本系统总体设计包括爬虫模块、漏洞检测模块两大模块;这两大模块又包含了若干子模块以实现核心功能,其中:
(1)爬虫模块包含页面探索模块和网页解析模块两个子模块,两个子模块共同使用Ghost.py作为浏览器引擎,共享URL列表并对其进行操作。页面探索模块实现探索页面对功能,而网页解析模块则实现网页解析功能。页面探索模块使用递归的深度优先爬虫,不断地循环抓取网页存入URL队列,直到将同域名下的页面全部访问完成,从而获取大量的页面以寻找注入点;网页解析模块从URL队列中提取出页面的URL链接,将页面动态加载完,并触发页面中的事件以获取JavaSricpt或Ajax生成的新的URL和注入点。其中,新的URL也会存入URL队列,等待页面探索模块的访问。
网页解析模块实现功能的步骤包括,
1)事件的搜集,寻找网页中可能解析JavaScript和加载Ajax的点击事件并触发;
2)URL搜集,将新的URL放入待访问的URL列表用于探索页面;
3)注入点搜集,用于之后的漏洞检测。
(2)漏洞检测模块:该模块包含自动检测模块和漏洞判断模块两个子模块,两个子模块共同使用Ghost.py作为浏览器引擎,自动检测模块对注入点自动填充攻击向量,采用的攻击向量为RSnake提供的Cheat Sheet,它包括多种绕过XSS检验的攻击向量。这些经过设计的攻击向量提交后,执行结果交由漏洞判断模块来判断,如果存在漏洞的话,页面会执行一个弹出提醒框的脚本,其内容为XSS,此时基于Ghost.py引擎提供的wait_for_alert()函数检测是否有提醒框出现,即可检测网页是否执行了脚本,直接判断出当前注入点是否有漏洞。
在探索页面前,还需要进行网页解析,将页面动态加载完,并触发页面中的事件以获取JavaSricpt或Ajax生成的新的URL和注入点。其中的加载页面由Ghost.py提供的API完成,
本系统使用Python的Beautiful Soup库来完成网页解析。Beautiful Soup是一个用Python写的HTML/XML的解析器,用以处理不规范标记并生成剖析树,并且提供简单又常用的导航,搜索以及修改剖析树的操作。
综上所述,为了更好地进行自动化检测,本系统实现了以下两个方面的功能:①能够解析JavaScript和加载Ajax以得到页面中隐藏式注入点的支持网络爬虫运行的框架。②通过提交攻击向量以判断XSS漏洞是否存在的高效方法。
该核心库包括re,pywebfuzz,ghost,bs4,pySide,pyQt,这些库在所有主流的操作系统上运行,因此很好的实现跨平台移植。
该系统完全采用python语言开发,具有易于维护和进行二次开发的特点,对XSS漏洞的检测与研究有非常重要的应用价值。
附图说明
图1系统总体架构(按模块)。
图2URL处理模型设计。
图3漏洞检测流程设计。
具体实施方式
本系统的原理是基于Ghost.py的对服务器的黑盒测试,它由爬虫模块和漏洞检测模块两个部分组成。系统架构如图1所示。
1.1爬虫模块
爬虫模块实现探索页面功能和网页解析功能。探索页面的爬虫使用本文提出的递归的深度优先算法,仅挖掘同域名下的页面。该算法描述如算法1所示。
算法1.页面探索的深度优先递归算法
输入:起始网站URL
输出:以输入URL为起点爬取到的所有同域名页面URL
1.设置最大深度MAX_DEPTH;
2.设置当前深度depth=0;
3.如果当前深度大于最大深度,结束;否则,执行步骤4;
4.访问当前URL;
5.获取页面所有URL存入URL_List;
6.如果URL_List为空,结束;否则执行步骤7;
将URL_List中下一个URL作为当前URL,当前深度加1,执行步骤3;
在探索页面前,还需要进行网页解析,将页面动态加载完,并触发页面中的事件以获取JavaSricpt或Ajax生成的新的URL和注入点。其中的加载页面由Ghost.py提供的API完成,
网页解析主要完成三个功能,一是事件搜集,寻找网页中可能解析JavaScript和加载Ajax的点击事件并触发;二是URL搜集,将新的URL放入待访问的URL列表用于探索页面;三是注入点搜集,用于之后的漏洞检测。
本系统使用Python的Beautiful Soup库来完成网页解析。Beautiful Soup是一个用Python写的HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树,并且提供简单又常用的导航,搜索以及修改剖析树的操作。
(1)触发事件
触发事件时,使用Beautiful Soup库搜索带有事件属性的标签,之后用Ghost.py模拟用户点击触发事件。对事件进行点击后可能使浏览器解析JavaScript和加载Ajax,产生DOM元素的改变或者URL的跳转,对此采取不同的方式应对。如果跳转到新的URL,存储当前URL并返回之前页面即可,而产生DOM元素则需再次寻找是否出现了新的事件,直至不再产生DOM元素为止,步骤如算法2描述:
算法2.页面DOM元素展开算法
输入:第一次请求得到的页面HTML代码
输出:展开后的页面HTML代码
1.获取所有含有事件的标签存入tag_list,去除重复的标签;
2.模拟点击tag_list中下一个未访问过的标签;
3.将该标签存入visit[],标记为访问过;
4.若页面跳转,执行步骤5;否则,执行步骤6;
5.将跳转后的页面URL存入URL_List,执行步骤2;
如果DOM元素改变,执行步骤1;
通过这种方式,可以将网页不断展开,以达到寻找隐藏式注入点的目的。
(2)添加URL
URL超链接一般存在于<a>标签的href属性中,对于HTML中的<a>标签,其href属性的值可以是任何有效文档的相对或绝对URL,包括片段标识符和JavaScript代码段。一般用户点击<a>标签中的内容时,浏览器除了会跳转到href属性指定的URL,也可能会执行JavaScript表达式、方法和函数的列表。
传统的网络爬虫仅采用正则表达式匹配一般URL的形式,这样很可能会漏掉页面和注入点,所以本系统借助带有浏览器引擎的Ghost.py库,对href的值进行多种处理,如图2所示。标准化函数针对不同情况进行字符串处理,将其转换成一般URL的形式。若转换后的URL不在列表中,将存储至URL列表以用于之后的页面挖掘。
1.2漏洞检测模块
(1)漏洞检测
本系统采用黑盒测试方法来检测目标表单是否存在XSS漏洞。漏洞检测的基本方法是使用RSnake提供的Cheat Sheet作为攻击向量来填写表单并提交。该Cheat Sheet包括多种可以绕过XSS检验的攻击向量,如图2所示。
这些经过设计的攻击向量提交后,如果存在漏洞,则页面会执行一个弹出提醒框的脚本,其内容为XSS,此时通过Ghost.py提供的wait_for_alert()检测是否有提醒框出现,即检测网页是否执行了脚本,直接判断出当前注入点是否有漏洞。使用此方法时,如果弹出了对话框,且对话框中含有污点数据,则当前表单一定存在XSS漏洞。漏洞检测的执行过程如图3所示。
(2)查找表单及其注入点
如果要提交某一个表单,需要标记该表单在DOM树中的位置,之后使用CSS属性选择器找到它,首先寻找HTML文档中的所有表单并存于数组,标记为form[0]、form[1],之后找到form[0]中input[0],form[1]中的input[1]、input[2],将其name属性存于二维数组中,由于name属性是提交请求时唯一需要的属性,所以其它属性不用保存。
(3)自动填写并提交表单
本文使用Ghost.py提供的填写表单的函数在表单栏填写XSS攻击向量:
ghost.set_field_value("input[name=%s]"%name,xss)
此外,Ghost.py还可以模拟JavaScript语句来提交表单:
ghost.evaluate(
"document.querySelectorAll('form')[%d]['submit']();"%form_i),expect_loading=True)
表单有可能存在限制输入长度,不允许一些非法字符等前端验证,导致攻击向量不能提交。这些验证事件存在于表单的属性中,需要模拟JavaScript语句将这些属性移除。
document.querySelectorAll('input[type=submit]')[0].removeAttribute('onclick');
document.querySelectorAll('input[type=submit]')[0].removeAttribute('onfocus');
之后对表单操作的具体步骤如算法3描述:
算法3.自动填充攻击向量提交
输入:存储表单及其注入点的二维数组
输出:漏洞检测结果
1.遍历保存全部XSS攻击向量的xss_rsnake数组;
2.对于表单中的每一个用户输入出,用当前攻击向量填充;
3.提交表单;
4.根据漏洞检测方法判断是否存在XSS漏洞,如果存在则执行步骤5,;否则执行步骤1;
5.存储漏洞在DOM中的位置、当前页面URL及其它信息;
6.结束;
表1 一些经过设计的攻击向量
Claims (3)
1.一种基于模拟浏览器行为的XSS漏洞检测系统,其特征在于:本系统完全由python语言在Windows 64位系统上编写,在Windows 64位系统上正常运行;同时,本系统具有较强的通用性;
本系统总体设计包括爬虫模块、漏洞检测模块两大模块;这两大模块又包含了若干子模块以实现核心功能,其中:
(1)爬虫模块包含页面探索模块和网页解析模块两个子模块,两个子模块共同使用Ghost.py作为浏览器引擎,共享URL列表并对其进行操作;页面探索模块实现探索页面对功能,而网页解析模块则实现网页解析功能;页面探索模块使用递归的深度优先爬虫,不断地循环抓取网页存入URL队列,直到将同域名下的页面全部访问完成,从而获取大量的页面以寻找注入点;网页解析模块从URL队列中提取出页面的URL链接,将页面动态加载完,并触发页面中的事件以获取JavaSricpt或Ajax生成的新的URL和注入点;其中,新的URL也会存入URL队列,等待页面探索模块的访问;
网页解析模块实现功能的步骤包括,
1)事件的搜集,寻找网页中可能解析JavaScript和加载Ajax的点击事件并触发;
2)URL搜集,将新的URL放入待访问的URL列表用于探索页面;
3)注入点搜集,用于之后的漏洞检测;
(2)漏洞检测模块:该模块包含自动检测模块和漏洞判断模块两个子模块,两个子模块共同使用Ghost.py作为浏览器引擎,自动检测模块对注入点自动填充攻击向量,采用的攻击向量为RSnake提供的Cheat Sheet,它包括多种绕过XSS检验的攻击向量;这些经过设计的攻击向量提交后,执行结果交由漏洞判断模块来判断,如果存在漏洞的话,页面会执行一个弹出提醒框的脚本,提醒框的脚本内容为XSS,此时基于Ghost.py引擎提供的wait_for_alert()函数检测是否有提醒框出现,即能检测网页是否执行了脚本,直接判断出当前注入点是否有漏洞。
2.根据权利要求1所述的一种基于模拟浏览器行为的XSS漏洞检测系统,其特征在于:在探索页面前,还需要进行网页解析,将页面动态加载完,并触发页面中的事件以获取JavaSricpt或Ajax生成的新的URL和注入点;其中的将页面动态加载完由Ghost.py提供的API完成。
3.根据权利要求1所述的一种基于模拟浏览器行为的XSS漏洞检测系统,其特征在于:本系统使用Python的Beautiful Soup库来完成网页解析;Beautiful Soup是一个用Python写的HTML/XML的解析器,用以处理不规范标记并生成剖析树,并且提供简单又常用的导航,搜索以及修改剖析树的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510262307.3A CN104881607B (zh) | 2015-05-21 | 2015-05-21 | 一种基于模拟浏览器行为的xss漏洞检测系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510262307.3A CN104881607B (zh) | 2015-05-21 | 2015-05-21 | 一种基于模拟浏览器行为的xss漏洞检测系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104881607A CN104881607A (zh) | 2015-09-02 |
CN104881607B true CN104881607B (zh) | 2017-12-29 |
Family
ID=53949097
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510262307.3A Expired - Fee Related CN104881607B (zh) | 2015-05-21 | 2015-05-21 | 一种基于模拟浏览器行为的xss漏洞检测系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104881607B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105279086B (zh) * | 2015-10-16 | 2018-01-19 | 山东大学 | 一种基于流程图的自动检测电子商务网站逻辑漏洞的方法 |
CN105430002A (zh) * | 2015-12-18 | 2016-03-23 | 北京奇虎科技有限公司 | 漏洞检测方法及装置 |
CN106022135A (zh) * | 2016-02-23 | 2016-10-12 | 北京工业大学 | 一种可动态判断xss漏洞的自动化检测系统 |
CN108234403A (zh) * | 2016-12-15 | 2018-06-29 | 中国电信股份有限公司 | 针对使用ajax技术网站的安全检测方法和装置 |
CN106845248A (zh) * | 2017-01-18 | 2017-06-13 | 北京工业大学 | 一种基于状态转换图的xss漏洞检测方法 |
CN107046533A (zh) * | 2017-03-15 | 2017-08-15 | 广西科技大学 | 一种存储型xss攻击向量的自动生成方法 |
CN107147645B (zh) * | 2017-05-11 | 2020-05-05 | 北京安赛创想科技有限公司 | 网络安全数据的获取方法及装置 |
CN107103242B (zh) * | 2017-05-11 | 2020-07-17 | 北京安赛创想科技有限公司 | 数据的获取方法及装置 |
WO2019055235A1 (en) * | 2017-09-14 | 2019-03-21 | Siemens Corporation | SYSTEM AND METHOD FOR VERIFYING PROJECT SECURITY VULNERABILITIES OF AUTOMATION SYSTEM |
CN107800692A (zh) * | 2017-10-13 | 2018-03-13 | 郑州云海信息技术有限公司 | 一种基于web浏览器的XSS漏洞检测方法及系统 |
CN108846286A (zh) * | 2018-06-21 | 2018-11-20 | 腾讯科技(深圳)有限公司 | 跨站脚本漏洞检测方法及装置 |
CN110365641A (zh) * | 2019-05-31 | 2019-10-22 | 阿里巴巴集团控股有限公司 | 跨站脚本攻击漏洞检测方法、设备及计算机可读介质 |
CN115221529B (zh) * | 2022-09-14 | 2022-12-27 | 杭州天谷信息科技有限公司 | 一种前端网页的异常注入方法以及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7343626B1 (en) * | 2002-11-12 | 2008-03-11 | Microsoft Corporation | Automated detection of cross site scripting vulnerabilities |
CN101242279A (zh) * | 2008-03-07 | 2008-08-13 | 北京邮电大学 | 用于web系统的自动化渗透性测试系统和方法 |
CN101964025A (zh) * | 2009-07-23 | 2011-02-02 | 中联绿盟信息技术(北京)有限公司 | Xss检测方法和设备 |
US8949990B1 (en) * | 2007-12-21 | 2015-02-03 | Trend Micro Inc. | Script-based XSS vulnerability detection |
-
2015
- 2015-05-21 CN CN201510262307.3A patent/CN104881607B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7343626B1 (en) * | 2002-11-12 | 2008-03-11 | Microsoft Corporation | Automated detection of cross site scripting vulnerabilities |
US8949990B1 (en) * | 2007-12-21 | 2015-02-03 | Trend Micro Inc. | Script-based XSS vulnerability detection |
CN101242279A (zh) * | 2008-03-07 | 2008-08-13 | 北京邮电大学 | 用于web系统的自动化渗透性测试系统和方法 |
CN101964025A (zh) * | 2009-07-23 | 2011-02-02 | 中联绿盟信息技术(北京)有限公司 | Xss检测方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104881607A (zh) | 2015-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104881608B (zh) | 一种基于模拟浏览器行为的xss漏洞检测方法 | |
CN104881607B (zh) | 一种基于模拟浏览器行为的xss漏洞检测系统 | |
CN106022135A (zh) | 一种可动态判断xss漏洞的自动化检测系统 | |
Iqbal et al. | Adgraph: A graph-based approach to ad and tracker blocking | |
CN103559235B (zh) | 一种在线社交网络恶意网页检测识别方法 | |
Huang et al. | A testing framework for web application security assessment | |
US20080235671A1 (en) | Injecting content into third party documents for document processing | |
CN102436563B (zh) | 一种检测页面篡改的方法及装置 | |
CN111797407B (zh) | 一种基于深度学习模型优化的xss漏洞检测方法 | |
CN102591965B (zh) | 一种黑链检测的方法及装置 | |
CN101751530B (zh) | 检测漏洞攻击行为的方法及设备 | |
CN106022132A (zh) | 一种基于动态内容分析的网页木马实时检测方法 | |
CN110581864B (zh) | 一种sql注入攻击的检测方法及装置 | |
CN107832622A (zh) | 漏洞检测方法、装置、计算机设备及存储介质 | |
CN110191096A (zh) | 一种基于语义分析的词向量网页入侵检测方法 | |
CN109104421A (zh) | 一种网站内容篡改检测方法、装置、设备及可读存储介质 | |
CN103617390A (zh) | 一种恶意网页判断方法、装置和系统 | |
CN106603490A (zh) | 一种钓鱼网站的检测方法和系统 | |
Hou et al. | A dynamic detection technique for XSS vulnerabilities | |
Liu et al. | Multi-scale semantic deep fusion models for phishing website detection | |
CN104778232B (zh) | 一种基于长查询的搜索结果的优化方法和装置 | |
Brisset et al. | Erratum: Leveraging flexible tree matching to repair broken locators in web automation scripts | |
Liu et al. | A XSS vulnerability detection approach based on simulating browser behavior | |
Shyni et al. | Phishing detection in websites using parse tree validation | |
CN104077353B (zh) | 一种黑链检测的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171229 Termination date: 20200521 |