SQL漏洞研究及实战分析

2018-02-25 02:39卢成浪郑城仁
电子技术与软件工程 2018年7期
关键词:漏洞

卢成浪 郑城仁

摘要 SQL漏洞是众多web漏洞中最常见的漏洞之一,也是黑帽子黑客最常见的攻击手段之一。随着SQL漏洞被频频曝光,对于SQL用户的隐私保护得到人们的广泛关注。文章主要研究SQL漏洞原理及各种攻击手段,同时通过实战分析来总结防范措施。文章主要通过四方面进行描述,第一章描述SQL漏洞的历史及当前现状;第二章分析SQL的原理;第三章描述SQL的攻击模型及检测方法;第四章进行总结并展望。

【关键词】SQL 漏洞 Web 用户隐私

1 SQL注入漏洞的历史及现状

1.1 SQL漏洞发现历史

SQL注入最早是由Jeff Forristal在1998年发现的,在1998年的10月份,Forristal写了一篇关于如何在Windows NT服务器上进行攻击的文章,他发现,那时候大部分的网站都使用的是Access数据库,并通过分析源代码,程序员在写SQL语法中存在逻辑上的错误,于是,他通过分析SQL语法及后端连接数据库程度,成功从数据库中返回用户的敏感信息,通过SQL漏洞,数据库被成功渗透。

1.2 SQL漏洞的现状

SQL注入在2007年被认为是在web应用程序中十大漏洞之一,在2010年作为主要的研究对象在公开的web应用安全项目中,在2013年,SQL注入攻击在OWASP十大攻击中是最常见的攻击手法之一。具体例子如下(以下涉及的网站注入己修复):

(1)在2002年二月,Jeremiah Jacks发现Guess.com网站存在SQL注入漏洞,允许任何人能够重构URL参数来访问数据库,使得数据库返回20000个用户名、银行卡号以及用户的其它敏感信息;

(2)在2005年11月,一个青年黑客利用SQL注入来破坏台湾的一家信息安全杂志社网站,并且窃取了用户的信息;

(3)在2006年一月,俄罗斯的电脑犯罪者通过SQL漏洞进入了爱尔兰的一家政府网站并窃取了用户的银行卡号等敏感信息,然后在网站将这些信息公开贩卖;

(4)在2006年三月,一个黑客发现了offical印度官方旅游网站的一个SQL漏洞;

(5)在2007年六月,一名电脑罪犯利用SQL注入漏洞破坏了微软在英国的网站,微软发言人确认了网站存在该漏洞;

(6)在2007年九月和2009年一月,土耳其黑客组织mOsted通过SQL注入来利用微软的SQL服务器攻击美国军事工程网站;

(7)在2008年一月,有成千上万装有微软SQL数据库的PC机感染了SQL注入攻击,该攻击主要是利用应用程序中脆弱的代码实现的;

(8)在2008年五月,在中国的一名程序员通过google搜索工具来自动查找SQL服务网站,并通过自动化SQL注入工具来进行大范围攻击;

(9)在2009年八月,美国司法部门逮捕了一名叫Albert Gonzalez的美国公民和两名俄罗斯公民,原因是他们使用SQL注入攻击来窃取了1300万的信用卡数据。这一事件被当时称为‘美国历史上最大的窃取个人信息案犯罪分子通过信用卡数据在支付平台上进行大规模的金钱交易,不仅造成个人财产损失,也使支付平台造成混乱;

(10)在2010年七月,瑞士选举期间,黑客企图重写SQL命令来进行代码注入,使得产生大量非人为的选票;

(11)在2011年三月,MySQL官方网站mysql.com被黑客利用SQL盲注实现了攻击,导致大量的数据库信息泄露;

(12)在2013年十一月,黑客组织RaptorSwag声称利用SQL注入攻击了中国国际运动事务所中71家中国政府数据库,并通过匿名的形式將这些信息公开泄露。

2 SQL原理分析

2.1 原理简介

SQL(结构化查询语句)注入攻击主要使通过构造特殊的输入参数传入到Web应用程序中,这些输入参数大部分是由合法的SQL组合构成,从而使的数据库溢出敏感信息。

2.2 Web应用程序框架

当我们访问一个网站,然后网站返回我们需要的内容,这看上去只是一个简单的request和response的过程,但是对于数据的转化和访问过程,具体包括如下:

2.2.1 界面层/表示层

这层主要是呈现用户需要的内容,主要是由浏览器将HTML代码转化为适合人们阅读的内容。

2.2.2 业务逻辑层/领域层

这层主要是利用后台服务器语言(如:PHP、ASP、JSP等)将表示层上的代码转化、连接到下一层(数据访问层),同时将数据访问层返回的数据解析成HTML代码,发送至表示层。

2.2.3 数据访问层/存储层

这层主要是存储数据的,由上一层脚本来连接DBMS(数据库管理系统),并执行SQL语言将数据添加或取出,然后传回结果给Web服务器。

2.3 SQL注入产生

如果只是简单的访问一个网站,没有提交数据表单,一般是不会存在SQL注入的,我们称这种访问为线性访问。但是在大多数情况下,访问一个网站是需要结合用户的输入数据,从而返回用户需要的内容,这种网站一般是动态网站,具体的实现方式将会在下一章描述。

3 攻击模型及检测方法

3.1 实验环境

本实验运行在Kali linux平台上,处理器:Intel(R) Core(TM) 15-3210M cpu @2.50GHz2.50GHz;内存(RAM): 6.OOGB;版本号:Linuxkali 4.9.O-kali3-amd64

3.2 攻击模型

首先我们分析漏洞的检测技术,具体包含以下五个方面:

3.2.1 基于布尔的盲注检测

基于布尔的盲注在注入布尔语法时,服务器仅仅会返回两种结果,True或False,但是并不能获取我们需要的信息,比如数据库的大小、长度和数据库名等,所以我们需要构造SQL语法使得数据库返回我们需要的内容,比如:原始URL(同一资源定位符)为http://127.O.O.l/s qlilabs/Less-5/?id=l;我们获取数据库长度的最终URL为:http://127.O.O.l/sqlilabs/Less-5/?id=l' andlength(database(》=8%23;此时如果页面返回正确结果,则说明数据库的长度为8。

3.2.2 基于时间的盲注

基于时间的盲注顾名思义就是根据时间的长短来判断是否有漏洞,我们在查找SQL漏洞时,经常会发现有些漏洞难以被识别,及Web页面不会返回任何信息,所以无法检索到任何信息。虽然Web页面不会返回任何信息,但当我们向数据库注入一个时间延迟时,可以根据服务器响应时间的长短来判断是否有漏洞的存在,具体的参数构造如下:

‘and (select* from (select(sleep(20》)a)--+;

这条语句主要的功能是让服务器延迟20秒返回响应,在具体的攻击环节可以根据不同需求而改变。

3.2.3 基于错误的检测

基于错误的检测是当构造一个参数(比如加一个括号或加一个单引号)传给服务器时,服务器会判断你的语法是否正确,如果错误,会返回一个错误信息,当用户在浏览器中看到返回的错误信息时,基本可以判断该数据库存在注入漏洞,因为这就说明服务器并没有对用户的输入进行过滤或者转义。

3.2.4 基于UNION的联合查询检测

Union语句可联合两个或多个select查询语句,但是前提是多个查询需要满足相同的列数及数据类型相同才能正确返回查询结果。简单的查询语句可以是:

SELECT column name FROM table__ nameUNION SELECT column name FROM tablename,

3.2.5 基于堆叠查询的检测

因为在SQL语句中,分号(;)表示一个语句的结束,因此,当我们在一条SQL语句后面在插入一条SQL语句,相当于就执行了两条SQL语句,从而达到攻击者的需求。例如以下:

SELECT * FROM product WHEREid=l;DELETE FROM product;

因此,如果在服務器端没有进行过滤,当攻击者插入这条语句时,首先它会显示product表中id为1的信息,然后再删除product这张表,从而破坏用户的数据。

以上我们分析了多种攻击检测方式,但其实归结起来就是两方面的类型:基于数字型注入和基于字符型注入。

(1)基于数字型注入:假如原始URL为:http://xxX /abc.php?id=x我们再后面添加参数,构成新的URL:http://xxx/abc.php?id=x and1=1和http://xxx/abc.php?id=x and l=2。如果分别返回正确页面和错误页面,则说明该注入为数字型注入。因为1=1为真,1=2为假,所以分别会返回正确和错误。

(2)基于字符型注入:同理,假设原URL为http://xxx/abc.php?id=x插入参数后,新 的URL为http://xxx/abc.php?id=x' and'l=1和http://xxx/abc.php?id=x' and'1=2。如果分别返回正确页面和错误页面,则说明该漏洞为字符型漏洞。上面两个插入参数都闭合了单引号,所以还是判断1=1和1=2的真假情况。

3.3 攻击实战

接下来,我们用具体的实战形式进行演示操作。图1是一个大概的攻击模型,首先从客户端发起攻击,然后让服务器返回结果。

因为手动检测相对来说效率低,并且比较麻烦,所以我们使用自动化测试攻击sqlmap,下面我们简单介绍sqlmap的用法。

-u表示需要检测的URL地址

-g表示使用google搜索来作为一个URL地址

--current-user表示查找当前数据库管理系统的所有用户

--currenr-db表示查找当前的所有数据库

--passwords表示查找用户的所有密码哈希值

--tables表示查找一个数据库中的表

--columns表示查找一个表中的列

--dump表示查找表中的值

这里,我们以http://www.xxx.com/subcatphp?id=2网站为例,因为sqlmap集成了上述五种的注入检测方法,首先,我们查看该网站是否有漏洞存在:

sqlmap -u “http://www.xxx.com/subcatphp?id=2”

返回结果显示,id存在漏洞注入,则获取数据库:

sqlmap -u “http://www.xxx.com/subcatphp?id=2” dbs会返回所有数据库(bibleglossary. bible_history、information schema.keywords、kidsdict)

查看数据库keywords中的表有哪些:

sqlmap -u “http://www.xxx.com/subcatphp?id=2”-D keywords -tables结果返回所有表(admin、proj ects、style)。查看表admin的列字段:

sqlmap -u “http://www.xxx.com/subcat

4 总结并展望

SQL漏洞注入的危害很大,若遭到攻击后,小则网站无法访问,大则数据库遭到破坏,用户敏感信息泄露,不但造成经济上的损失,还可能给人精神和心里造成创伤,所以,对于SQL漏洞注入的防范是必不可少的,下面將进行一个简单的归纳和总结。

(1)封装客户端的提交信息。

(2)屏蔽出错信息。

(3)对用户的输入信息进行转义和过滤处理。

(4)不要使用字符串来连接SQL查询语句,而是使用SQL变量来处理。

(5)将权限设置为最小化,尽量不要赋予写的权限。

(6)去掉或修改Web服务器上危险的命令,比如ftp、telnet、cmd等。

(7)将密码设置的更加复杂,包含大小写、英文字符、特殊字符等,并且使用混合加密而不是单单的md5加密方式。

(8)将SQL语句进行预编译。本文主要是描述了当前SQL注入漏洞的检测,同时借助自动化测试工具sqlmap进行自动化检测并攻击,在最后根据漏洞注入的原理提出了一些防范措施,对防范措施的具体实现过程及分析将是下一步研究的目标。

参考文献

[1] Yu

Jing. GaoFeng, XuLianghua,et al.Research on penetration testingbased on SQL injection[J].Computer Engineering andDesign, 2007, 28 (15): 3577-3579.

[2]Williams J,Wichers D.OWASP top 10-2010 rcl [R]. Washington: OWASP, 2010.

[3]Zhang Zhuo. SQL injection attacktechniques and countermeasuresanalysis [D]. Shanghai Jiao TongUniversity, 2007.

[4] Shelly D A, Tront J G, Chair S F,et al. Using a Web Server TestBed to Analyze the Limitationsof Web Application VulnerabilityScanners [J] . Virginia Tech, 2 010.

[5] Shelly, David A,et al. "Using a WebServer Test Bed to Analyze theLimitations of Web ApplicationVulnerability Scanners. "VirginiaTech, 2010.

[6] Shelly, D. A. , Tront, J. G. , Chair,S. F. ,Midkiff, R. C. , Marchany, &Shelly,A. (2010).Using a web servertest bed to analyze the limitationsof web application vulnerabilityscanners. Virginia Tech.

[7]Tabatabaei S A,Asadpour M.Study ofInfluential Trends, Communities,and Websites on the Post-electionEvents of Iranian PresidentialElection in Twitter[M].SocialNetwork Analysis-Community Detectionand Evolution. Springer InternationalPublishing, 2014: 71-87.

[8]张勇,李力,薛倩.Web环境下SQL注A攻击的检测与防御 [J].现代电子技术,2004,182(15):105-107.

猜你喜欢
漏洞
漏洞
侦探推理游戏(二)
三明:“两票制”堵住加价漏洞
高铁急救应补齐三漏洞
细数监管漏洞