基于Selenium的SQL注入漏洞检测系统的研究

2016-09-20 08:14栗迎结任洪敏
现代计算机 2016年21期
关键词:语句漏洞网页

栗迎结,任洪敏

(上海海事大学信息工程学院计算机系,上海 201306)

基于Selenium的SQL注入漏洞检测系统的研究

栗迎结,任洪敏

(上海海事大学信息工程学院计算机系,上海 201306)

在对Web应用进行安全漏洞检测时,手动检测和所使用的网页比对算法都会影响到检测的准确率和效率,在传统的SQL注入漏洞检测技术的基础上建立一个基于Selenium的自动化检测系统,并使用优化的Simhash文本相似性检测算法来提高系统性能,通过实验验证该系统的可行性和检测结果的可信度。

Web漏洞;SQL注入;Selenium;Simhash

0 引言

在计算机技术飞速发展的当今社会,随着互联网的普及使用,网络成为了人类生活和工作不可或缺的一部分。各种各样的Web应用也被大家使用,这些作为人类沟通交流的主流载体,承载着大量的私有或公有信息。但是,网络给人类带来便利的同时,也不可避免的出现大量漏洞,在这其中,SQL注入漏洞是一种最常见也是危害性最大的网络漏洞,如果这些带有漏洞的Web应用受到攻击,数据库里的信息遭到泄露,就会极大影响人类生活,甚至是经济发展和社会稳定。

因此,为了防御Web应用受到的SQL注入攻击,人们采用各种漏洞扫描技术主动检测SQL注入漏洞,避免一些网络安全隐患。本文针对现有检测技术的效率问题,在基于Selenium测试用例的基础上建立一个针对小型网站的自动化SQL注入漏洞检测系统。

1 SQL注入

SQL语言是用来对关系数据库进行结构化查询的语言。SQL注入的概念就是把SQL命令插入到Web域名或页面表单的字符串中,由于SQL注入表面上与一般的Web访问请求相似,防火墙等监控设备不容易检测到,服务器便会执行恶意的SQL命令。SQL注入攻击的基本原理:构建符合语法要求的SQL语句,插入到网页链接地址和form表单中,Web应用执行SQL语句,得到攻击结果。

现有的对SQL注入漏洞的检测可以分为客户端检测和服务端检测两种。客户端检测是通过比较注入前后网页的变化来实现的;而服务端检测需要通过检测后台代码、数据库等来实现,属于白盒测试。本文对SQL注入漏洞的检测是基于Selenium的黑盒测试,也就是客户端检测,先通过服务器发送一次正常请求,得到一个页面;然后构造SQL语句再次发送请求,又得到一个页面,通过网页比对算法比较两个网页差异,然后根据测试用例判断SQL注入漏洞是否存在。

2 Simhash网页特征值比对算法

进行网页比对的算法有很多,其中Simhash算法是目前Google公司在使用的海量数据查重算法,该算法的高效性也是被公认的。Simhash算法分为5个步骤:分词、hash、加权、合并、降维。算法的原理如图1所示。

利用Simhash算法比较网页特征值的主要思想是:首先将两个页面的HTML文档以词为单位进行拆分处理,然后通过Hash算法把每个词计算成Hash值,通过Simhash算法分别计算出两个网页的特征值,进行比较后便可判断两个网页的异同。流程如下:

(1)对HTML文档进行分词处理

HTML文档中的各个部分,各个符号都有不同的意义,因此若要计算出一个HTML文档的特征值,就需要对HTML文档以词为单位进行拆分处理,如去除停词,词根还原。

图1 Simhash算法原理图

(2)调用Simhash算法计算特征值

得到分词的HTML文档后,首先用传统hash算法计算出每个词的hash值,这样就把字符串变成一串数字;然后对生成的hash值进行纵位累加,如果该位为1,则simhash相应位的值加1,否则减1。然后对这串数字进行降维处理,如果每一位大于0记为1,小于0记为0。这样便得出一个HTML文档的Simhash值。

(3)计算特征值之间的海明距离

对于两个二进制串来a和b说,海明距离的值就相当于a和b进行异或运算后结果中1的个数。根据上一步得出的Simhash值计算出之间的海明距离,对于小网站来说,海明距离大于0时便可判断两个HTML文档存在差异,海明距离的值越大,差异就越大。通过该方法判断网页差异的方式是很高效的,并且可通过设置海明距离的大小来判断网页的差异程度。

3 基于Selenium的SQL注入漏洞检测系统

Selenium是一个用于对Web应用程序进行黑盒测试的工具。Selenium的测试用例直接运行在浏览器中,就像真正的用户在操作一样。Selenium支持IE、Firefox、Google Chrome等多种浏览器以及Java、C#、Ruby等多种运行语言的编程自动生成,用例制作简单,运行快。为了实现自动化测试,本系统基于Java开发,采用Selenium自动化测试框架来实现,实现了对Web应用SQL注入漏洞的自动检测,并且对SQL注入漏洞检测方法进行相关优化。

3.1 基于Selenium的SOL注入漏洞检测系统设计

本文将系统分为四大模块,系统的结构设计如图2:

图2 SQL注入漏洞检测系统

其中,每个模块实现的功能如下:

(1)网络爬虫模块

该模块调用Selenium2中的FindElements()方法,通过标签名找到发送正常请求后所得页面的url和form表单,并把其保存为HTML文档,为构造SQL攻击语句做准备。

(2)构造SQL注入语句模块

该模块根据编写的测试用例自动构造多种SQL语句对上一个模块保存的HTML文档中的url和form表单进行SQL注入,然后将注入后发送请求得到的HTML页面保存。

(3)SQL注入漏洞检测模块

该模块对前两个模块中保存的HTML文档,包括正常请求的HTML文档和SQL注入后的HTML文档,利用Simhash算法分别对两个HTML文档进行分词处理,计算后产生一个二进制的特征值。通过计较两个特征值之间的海明距离来判断网页的差异程度。然后根据测试用例的判断标准来判断漏洞是否存在。

(4)检测报告生成模块

在完成SQL注入漏洞检测之后,将待测网站网址、SQL注入漏洞所在页面网址、SQL注入点和漏洞检测时间等数据生成一份检测报告放在一份txt格式的文档中。

3.2 基于Selenium的SOL注入漏洞检测系统实现

(1)系统界面

系统基于Java实现,主界面如下图所示。操作过程为:首先在地址栏中输入待检测的网站地址,然后点击开始按钮,系统自动开始检测。检测过程和检测结果都会显示在文本区域内。

图3 系统主界面

(2)Selenium实现网页爬虫模块

网页爬虫模块主要通过调用Selenium的API接口,按深度优先遍历网页的链接、表单。对于表单,提取其<input>属性,作为待注入的参数。将遍历得到的链接,加入队列,启动另外的线程,访问链接队列,调用Selenium的drive方法访问链接,获取网页的源代码,以供(3)中漏洞检测模块使用。主要调用的函数及实现功能如下:

WebDriver driver=new FirefoxDriver();//加载Selenium的火狐浏览器驱动组件

driver.get(“http://xxxx”);//自动调用浏览器访问

List<WebElement>forms=driver.findElements(By.tag-Name("form");

//调用Selenium的API方法,获取当前页面中所有表单<form></form>标签

List<WebElement>forms=driver.findElements(By.tag-Name("a");

//获取当前页面中所有链接<a>…</a>标签

driver.get(forms.get(i).getAttribute("action");

//获取<form></form>表单中action(URL)的值

String page=driver.getPageSource();//调用Selenium的API方法,获取当前页面的源代码

(3)Simhash算法实现漏洞检测模块

漏洞检测模块是本系统的核心模块,主要利用Java语言实现了Simhash算法,并对(2)中经过SQL注入攻击前后下载得到的页面文件进行计算,以判别是否存在漏洞。主要代码如下所示:

StringTokenizer stringTokens=new StringTokenizer(this.tokens);//定义分词的大小

while(stringTokens.hasMoreTokens(){

String temp=stringTokens.nextToken();

BigInteger t=this.hash(temp);

for(int i=0;i<this.hashbits;i++){

BigInteger bitmask=new BigInteger("1").shiftLeft(i);

if(t.and(bitmask).signum()!=0){

v[i]+=1;

}else{

v[i]-=1;

}//根据分词大小对文本分词,并对分词赋予权值

BigInteger fingerprint=new BigInteger("0");

StringBuffer simHashBuffer=new StringBuffer();

for(int i=0;i<this.hashbits;i++){

if(v[i]>=0){

fingerprint=fingerprint.add(new BigInteger("1").shiftLeft (i);

simHashBuffer.append("1");

}else{

simHashBuffer.append("0");

}//通过hash函数计算各个特征向量的hash值

his.strSimHash=simHashBuffer.toString();//得到hash值

3.3 优化SQL注入漏洞检测方法

在所设计的基于Selenium的SQL注入漏洞检测系统中,将系统性能做优化处理。由于一些Web应用具备SQL注入攻击防御机制,例如对某页面攻击后返回的是一个提示“请输入合法参数”的页面,这时的页面与正常响应页面的内容肯定不相同,其Simhash值也不相同,但并不能证明该存在漏洞,因为并没有攻击成功。因此需对漏洞检测方法进行改进:首先调用Selenium2中的getPageSource()方法分别将发送正常请求后的页面a和SQL注入后的页面b保存为HTML文档,存放在本地。然后调用Simhash算法对两个网页进行处理,计算出网页的Simhash值,根据SQL注入测试用例设定不同的判断标准,按照标准进行比对,若满足标准则证明所构造的SQL注入语句被执行,即系统存在SQL注入漏洞。这样根据SQL注入语句类型来设置判断标准从而进行漏洞检测的方法,具有一定的严谨性,不仅优化了系统的检测效率,而且提高了检测结果的可信度。

4 系统测试

4.1 SQL 注入测试用例

对于一些具备防御机制的Web应用来说,简单的SQL注入语句会被过滤而无法成功攻击,因此,若要检测出漏洞,就需要构造不同等级的SQL语句来进行攻击,针对Web应用客户端的SQL注入攻击语句有如下7种,分为初级、中级、高级三个级别,每一种注入类型都有不同的判断标准。SQL注入测试用例如下表所示:

表1 测试用例

在该表中,A类属于初级SQL注入语句;B、C两种属于中级SQL注入语句;而后四种D、E、F、G则属于高级SQL注入语句,主要针对一些具有防御机制的Web应用客户端。

4.2 漏洞检测系统功能性验证

利用该系统对测试网站进行A、B、C三类漏洞检测,该网站大约含有150个链接。网络爬虫的递归深度为5。最终对网站的测试结果输出如下图:

图4 测试结果

对测试结果统计如下表所示。

表2 测试结果统计

4.3 漏洞检测系统有效性验证

在利用该系统对网站进行SQL注入测试之后,检测报告中会给出存在漏洞并建议再次验证的链接地址,对这些地址进行手动验证,即进行人工注入。同时选取市面上常用的啊D、Pongolin两种SQL注入漏洞检测工具,对同一个测试网站进行相同的SQL注入攻击,并比较检测结果。比较结果如表所示:

表3 不同检测工具结果比较

对比不同检测工具的检测结果分析可发现,本文检测系统在检测率上远远优于另外两种,同时检测漏洞的准确率也很高,虽然平均检测时间稍长,但系统的整体性能优于其他检测工具。

5 结语

SQL注入漏洞是威胁Web安全的重要因素,因此SQL注入漏洞的检测对于网络安全有很高的应用价值,只有快速准确地检测出漏洞,才能在应用受到攻击前将其清除。本文把Selenium自动化测试工具和Simhash网页快速比较技术应用于SQL注入漏洞检测系统中,不仅实现了自动化测试,而且提高了漏洞检测的效率和准确率。但该检测系统在对大网站或者一些拥有简易防注入措施的网站进行检测过程中产生误报,从而影响检测结果的正确率和检测的效率。因此需要构造更多类型的SQL注入攻击语句,同时也要优化网页相似度比对方法,来加强系统在不同情况下检测SQL注入漏洞的能力,优化系统性能。

[1]张晨,汪永益,王雄等.基于网页DOM树比对的SQL注入漏洞检测[J].计算机工程,2012.18:111-115.

[2]Clarke J.SQL注入攻击与防御[M].黄晓磊,李化,译.北京:清华大学出版社,2010.

[3]边耐政,张琳.一种基于Selenium的Web自动化测试低耦合框架[J].计算机应用与软件,2014,31(8):13-16,37.

[4]罗明宇.基于Selenium的安全自动测试技术的研究与实现[D].广东工业大学,2015.

[5]池水明,阚歆炜,张昱等.基于Simhash的SQL注入漏洞检测技术研究[J].计算机时代,2014.3:3-5.

[6]Inyong Lee,Soonki Jeong,Sangsoo Yeo,Jongsub Moon.A novel method for SQL Injection Attack Detection Based on Removing SQL Query Attribute Values[J].Mathmatic 1 and Computer Modelling,2011,55(1):58-68.

[7]练坤梅,许静,田伟等.SQL注入漏洞多等级检测方法研究[J].计算机科学与探索,2011,5(5):474-480.

[8]Unmesh G.Selenium Testing Tools Cookbook[M].Packt Publishing,2012:11-33.

[9]刘书一.基于文本相似度的网页消重策略[J].计算机应用与软件,2011,28(11):228-278.

[10]郭俊刚.基于Eclipse的自动化测试工具的研究与实现[D].北京交通大学,2012.

[11]高洪涛.SQL注入攻击途径及策略分析[J].网络安全技术与应用,2011:14-16

[12]成晓利.Web应用SQL注入漏洞测试系统的研究与实现[D],2012.

SQL Injection Vulnerability Detection System Based on Selenium

LI Ying-jie,REN Hong-min
(College of Information Engineering,Shanghai Maritime University,Shanghai 201306)

In the Web application security vulnerability detection,manual inspection and the use of page alignment algorithm will affect the detection accuracy and efficiency,in the traditional SQL injection vulnerability detection technology based on the establishment of an automatic detection system based on the selenium and use optimization Simhash text similarity detection algorithm to improve the performance of the system,the credibility of the system,the feasibility and results is verified by experiment.

Vulnerabilities with Web Applications;SQL Injection;Selenium;Simhash

1007-1423(2016)21-0020-05

10.3969/j.issn.1007-1423.2016.21.004

栗迎结(1992-),女,河南开封人,硕士,研究方向为软件开发、自动化测试

2016-05-04

2016-07-20

任红敏(1969-),男,上海人,博士,副教授,研究方向为软件体系结构、构件技术、软件复用、过程工程、软件项目管理,基于社会计算、群体智能、人本计算、社会网络、舆情分析等技术的软件资产管理、船舶协同设计知识管理等

猜你喜欢
语句漏洞网页
漏洞
基于HTML5与CSS3的网页设计技术研究
重点:语句衔接
基于selenium的SQL注入漏洞检测方法
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
基于URL和网页类型的网页信息采集研究
漏洞在哪儿
我喜欢
作文语句实录