SQL注入攻击及漏洞检测防范技术

2017-02-14 09:26◆吴
网络安全技术与应用 2017年1期
关键词:应用程序漏洞网页

◆吴 斌 刘 循

(四川大学计算机学院 四川 610065)

SQL注入攻击及漏洞检测防范技术

◆吴 斌 刘 循

(四川大学计算机学院 四川 610065)

随着Internet的快速普及和发展,Web技术得到了广泛的应用,基于Web技术的应用系统覆盖金融、保险、电子商务、出版传媒等众多行业和领域,在促进社会生产力发展的同时提高了民众的生活水平,但随之而来的针对Web应用程序的攻击也越来越多。由于Web开发人员的安全意识欠缺、相关的技术管理人员安全防护技能较弱等原因,导致很多Web应用程序存在漏洞且易被攻破,扰乱了社会经济秩序,威胁民众财产安全和隐私安全。Web应用程序的漏洞有很多种,SQL注入漏洞是其中较为常见的一种。SQL注入漏洞具有易发生、难防范、危害大的特点。本文以SQL注入漏洞为研究重点,在介绍SQL注入漏洞基本概念、攻击原理和主要攻击手段的基础上,使用DVWA实验系统搭建漏洞测试环境,然后用SQLMAP软件进行漏洞测试、分析和研究,最后归纳防范SQL注入攻击的主要技术手段和措施。

SQL注入; 漏洞; 检测技术; 防范

1 研究背景

1.1 综述

Web应用程序具有易开发部署、易升级维护等特点,越来越受广大开发者的青睐,越来越多的应用系统使用B/S模式(即浏览器服务器模式)架构。由于架构、编码、管理等方面存在安全问题,Web应用程序存在多种漏洞,而目前几乎所有的Web应用程序都要用到数据库系统,且以关系数据库为主,导致SQL漏洞成为Web应用程序主要的漏洞种类。互联网的开放性和无边界性,经济利益的驱动以及人的好奇心、好胜心等因素,导致针对Web应用程序的攻击成高发态势。由于SQL漏洞存在易发生、难防范、危害大的特点,SQL注入(SQL Injection)成为一种典型的攻击方式。相当数量的程序员在编写代码的时候,没有充分考虑对用户提交数据进行安全检查,使应用程序存在安全隐患。用户可以精心构造一串包含数据库SQL语句的字符串作为参数提交,如果存在SQL漏洞,SQL语句就会被执行,如果该SQL语句带有攻击性,则很容易导致Web应用程序重要数据被非法获取、篡改,甚至数据库服务器被操控。SQL注入技术在国外最早出现在1999年,2002年后开始大量在我国出现,微软中国技术中心从两个方面进行了描述2:

(1)脚本注入式的攻击;

(2)恶意用户输入用来影响被执行的SQL脚本。

1.2 研究意义

根据美国国家漏洞数据库(NVD,National Vulnerability Da tabase)的统计2,2008年,SQL注入漏洞占全年所有漏洞总数的19.41%,2009年这个比例为16.85%。开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)的统计结果表明2,Web应用十大安全漏洞中,SQL注入漏洞的比例约为18%,名列第二。

Web应用程序应用领域广泛性、SQL注入漏洞的易发性、S QL注入攻击的高发性、以及攻击成功后导致后果的严重性,因此,在充分掌握SQL注入漏洞原理和检测技术的基础上,研究改进Web应用程序安全策略,修补SQL注入漏洞,提升Web系统安全防护等级,有效防范SQL注入攻击,保护网络信息安全具有重要的现实意义。

2 SQL注入的实现原理

SQL(Structured Query Language)即结构化查询语言,SQ L注入,就是把SQL命令插入到Web表单的输入域名或页面请求参数的查询字符串中,向Web服务器提交GET或POST请求,如果服务器端未严格验证参数的有效性和合法性,将导致数据库服务器执行恶意的SQL命令。我们访问互联网上的网站时,需要输入URL,如果URL仅是对静态网页访问,不存在SQL注入问题,如果是存在数据库动态查询请求的URL,就可能存在SQ L注入,如:http://www.***.cn/article.asp?id=32,其中id就是一个变量,最后提交给数据库服务器的SQL查询很可能如“selec t * from table_name where id = 32”形式。与网络层面的攻击不同,SQL注入攻击利用的是Web应用向外提供的服务,跟正常访问Web网站没有区别,不会被绝大多数防火墙检测到,具有很高的隐蔽性。如果管理员不检查分析数据库日志,很难发现S QL注入攻击。

图1所示的网页提供一个功能,在User ID后面的文字输入框中可以输入数字,例如:“1”、“2”,点击提交,输入的数字就会提交到网页后台的响应代码处理。

图1 SQL注入示例网页页面

图2展示的是后台用于处理提交的数字参数PHP代码片段。

图2 存在SQL注入漏洞的PHP代码段

可以看出,提交的参数直接被赋值给变量$id,之后,变量$ id的内容被直接连接到$query这个用于存储SQL语句变量后面,之后$query变量作为参数直接传给了PHP语言中标准的MySQL数据库查询函数。

假设此时传入参数1,sql语句内容为“SELECT first_name,last_name FROM users WHERE user_id = '1'”,不论数据库中有没有“user_id='1'”的记录,这条语句的执行显然不会有任何问题。攻击者如果提交的参数为“' and exists(select * from admin)--+”就可以测试数据库中有没有名为“admin”的表。

SQL注入攻击的过程:

(1)判断Web应用是否可以进行SQL注入。

(2)寻找SQL注入点。

(3)猜解用户名和密码。

(4)寻找Web系统管理后台入口。

(5)实施入侵和破坏。

3 漏洞测试环境搭建

3.1 DVWA平台介绍

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。DVWA是RandomStorm的一个开源项目,项目开始于2008年12月。平台提供带有SQ L注入漏洞的网页参数提交接口,供用户进行SQL注入研究测试,可以设置高、中、低三个层次的危险等级。

3.2 安装步骤

3.2.1 安装WampServer2.2

WampServer2.2集成了Apache2.2.21,MySQL 5.5.20,PHP 5.3.10,PHPMyAdmin 3.4.10.1等系统,安装过程非常简单,只需按照提示点击“进一步”即可,安装完毕后已经帮用户配置好了Apache服务器和PHP服务器。

3.2.2 安装DVWA平台

将DVWA平台的PHP源码全部复制到PHP服务器的www目录下,在网页浏览器中输入网址打开平台的首页,安装平台提供的安装向导,填写MySQL数据库系统管理员用户名和密码,安装DVWA平台运行所需的数据库直至配置完成。DVWA首页如图3所示。

图3 DVWA平台首页

4 SQL注入漏洞测试工具的使用

4.1 sqlmap介绍

Sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,日前支持的数据库是MS SQL Server,MySQL,oracle和postgresql。SQLMAP采用四种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,堆查询和基于时间的SQL盲注入。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

4.2 sqlmap的安装和运行

sqlmap是用python语言开发的,使用sqlmap必须先安装p ython语言环境。本文使用的是python2.7,安装完python后,把sqlmap的目录复制到python27这个文件夹下。在开始-〉运行处输入“cmd”,打开命令控制台,进入到python27文件夹下,输入命令sqlmap.py就可以运行sqlmap。

4.3 sqlmap常用命令介绍

Target(目标):至少需要设置其中一个选项,设置目标URL。

-d DIRECT 直接连接到数据库。

-u URL,--url=URL 目标URL。

Request(请求):这些选项可以用来指定如何连接到目标URL。

――data=DATA 通过POST发送的数据字符串。

――cookie=COOKIE HTTP Cookie头。

Optimization(优化):这些选项可用于优化sqlmap的性能。

-o 开户所有优化开关。

--threads=THREADS 最大的HTTP(S)请求并发量(默认为1)。

Injection(注入):这些选项可以用来指定测试哪些参数。

-p TESTPARAMETER 可测试的参数。

--prefix=PREFIX 注入payload字符串前缀。

4.4 用sqlmap对DVWA平台进行攻击测试

在DVWA平台上选择“DVWA Security”项,把安全等级设置为low,之后选择SQL Injection选项,在这个网页上的文本输入框里输入“1”点击“submit”按钮,在浏览器的地址栏可以看到,地址变为“http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=S ubmit#”,把这个地址记录下来,作为sqlmap的一个参数。经测试直接用“sqlmap.py -u “http://localhost/dvwa/vulnerabilities/sqli/?i d=1&Submit=Submit#” --current-db”命令是不可能注入成功的,因为DVWA平台有访问权限控制,在没有登录平台的情况下,会跳转到平台登录页面。这里我们用Burpsuite软件截获正常登录时的cookie内容,把cookie的内容作为sqlmap的参数之一。最终输入的sqlmap命令如图4所示,“--current-db”表示获取攻击目标的数据库名称“--cookie”参数表示攻击时以后续字符串作为cookie向攻击目标提交攻击请求。

图4 sqlmap测试DVWA平台

这里,仅演示获得DVWA数据库名称的攻击,sqlmap攻击效率很高,大约30秒左右(时间长短跟计算机软硬件系统性能以及sqlmap优化参数的情况有关),爆出数据库名称为“dvwa”,攻击结果如图5所示。

图5 sqlmap攻击DVWA获得数据库

5 SQL注入漏洞的检测与防范

5.1 SQL注入攻击检测方法

SQL注入攻击检测分为入侵前的检测和入侵后的检测。入侵前的检测,可以通过人工方式,也可以使用SQL注入工具软件。人工检查Web漏洞耗时费力,却成效甚微,专用的Web漏洞扫描工具很少,大多需要配置数据库以存储已知的Web漏洞信息且局限性较大。

5.1.1 数据库检查

某些注入攻击软件工具例如HDSI、NBSI等进行SQL注入攻击后,会在数据库中生成一些临时表。通过查看数据库中最近新建的表的结构和内容,可以判断是否曾经发生过SQL注入攻击。

5.1.2 Web服务器日志检查

如果Web服务器启用了日志记录,则日志会记录访问者的I P地址,访问了哪些文件等信息,SQL注入攻击往往会大量访问某一个页面文件(即存在SQL注入点的动态网页)。

5.2 防范SQL注入攻击的方法

5.2.1 对提交参数的合法性进行检查

对提交参数进行检查,可以简单到将参数限制成某种类型,也可以复杂到使用正则表达式或业务逻辑来验证输入7。有两种不同类型的输入验证方法,即白名单验证和黑名单验证,很多程序语言都提供相关用于验证的函数,可以方便地给程序员编码时调用。例如对用户提交的参数进行关键字过滤,常见的关键字有“select”、“update”、“or”、“and”、“--”等。

5.2.2 使用参数化方法进行数据库查询

参数化查询(Parameterized Query 或 Parameterized Stateme nt)是访问数据库时,在需要填入数值或数据的地方,使用参数(Parameter)来给值。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才能套用参数运行,因此就算参数中含有指令,也不会被数据库运行。

例如,下面的.NET代码,使用SqlParameter()方法对用户输入的“userName”、“password”两项数据进行参数过滤。

5.2.3 屏蔽出错信息

Web应用程序在提供给用户使用的过程中,会有一些错误提示信息反馈给用户。程序员在代码编写时,需要不断地调试、测试,报错信息是帮助程序员修改完善程序必不可少的内容,如果这些调试信息在应用程序对外发布后仍然保留,攻击者就可以利用这些信息对Web应用程序进行猜解爆破。例如,用户登录功能,用户密码输入错误,应用程序应该反馈“用户名或密码错误”,而不应该反馈“密码错误”,否则,攻击者就知道该用户名存在,继而采用固定用户名,破解密码的办法来暴力破解网站。正确的做法是在调试Web应用程序时,把环境置为DEBUG状态,正式上线以后,把环境恢复为正常状态。

5.2.4 对重要敏感信息进行加密

尽管有各种防范SQL注入的技术手段,但随着网络攻击技术的发展,Web应用程序难免百密一疏。可以采取对数据库重要字段进行加密保护或加混淆的方式对重要敏感数据进行保护,常见的加密算法有DES、AES、MD5等。的例如对用户登录密码的md5加密,在编码时,还可以构造形如func(md5(pass)+3 21)的函数,确保密码的密文被攻击者获取后无法猜解出明文。

5.2.5 使用Web应用防火墙

目前国内知名的Web应用防火墙(WAF)厂商有绿盟科技、启明等公司。WAF是一种网络设备或者是一种将安全特性添加到Web应用的基于软件的解决方案。它能够对HTTP请求进行异常检测,拒绝不符合HTTP标准的请求,可以增强输入验证能力,有效防止网页篡改、信息泄露、木马植入等恶意网络入侵行为。

[1]陈小兵,张汉煜,骆力明,黄河.SQL注入攻击及其防范检测技术研究.计算机工程与应用,2007.

[2]National Vulnerability Database.National vulnerability d atabase(NVD)CVE statistics[EB/OL].(2009-12).http://web.nvd.n ist.gov/view/vuln/statistics-results?cid=4.

[3]OWASP.Top 10 2007[EB/OL].(2009-11).http://www. owasp.org/index.php/Top_10_2007.

[4]Clarke J.SQL injection attacks and defense[M].Access Online via Elsevier,2012.

[5]张鑫,张婷,段新东.Web应用SQL注入漏洞检测工具的设计与实现[J].信息安全与技术.Vol.57,8,2014.

[6]DVWA官方网站.www.randomstorm.com.

[7]百度百科SQL注入攻击词条.

[8]赵亭,陆余良.基于表单爬虫的Web漏洞探测[J].计算机工程,2008.

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

[10]隋亮,宋晖.基于渗透测试的SQL注入漏洞检测与防范[D].东华大学,2014.

猜你喜欢
应用程序漏洞网页
漏洞
基于HTML5与CSS3的网页设计技术研究
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
基于URL和网页类型的网页信息采集研究
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞