Web应用SQL注入漏洞检测工具的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Web应用SQL注入漏洞检测工具的设计与实现
作者:张鑫张婷段新东林玉香
来源:《信息安全与技术》2014年第08期
【摘要】由于Web应用系统的开发周期较短,同时开发人员安全编程意识不足,Web 应用程序会存在漏洞。因此,检测Web应用系统的安全性是安全领域的亟待解决的问题。SQL注入漏洞检测工具模拟黑客攻击的方式,采用网络爬虫技术建立需检测的URL库,依据SQL注入模板精心构造URL,并从根据浏览器返回信息,判定是否存在SQL注入点。可以提前意识到Web应用存在的漏洞,并及时修补,降低系统受攻击的风险,是有效的Web安全防护手段。
【关键词】 SQL注入;漏洞检测;Web安全
【中图分类号】 TP311
1 引言
采用B/S架构,并通过HTTP或HTTPS协议提供访问的应用服务统称为Web应用。目前,几乎所有政府、通信、证券、银行以及电子商务都支持在线交易和查询服务,包括个人账户、用户信息、交易记录等在内的用户的敏感信息,都通过Web应用系统存储在数据库中,一旦数据被盗取或篡改,都会造成巨大损失。为降低系统受攻击的风险,可利用Web应用安全漏洞扫描技术,可以实现在线的Web应用健康检查,提醒网站管理员进行修补,是效果好的Web安全防护手段。
2 Web 应用中常见漏洞攻击
Web 应用大多涉及服务器端的动态处理,同时,开发人员可能在开发过程中疏忽参数的输入检查,因此会出现各种Web 应用安全问题,会产生相关漏洞,例如文件包含漏洞,目录遍历漏洞,信息泄露漏洞和SQL 注入漏洞给攻击者留下可乘之机。
由于SQL 注入漏洞利用Web应用开放的端口,通常防火墙等设备无法检测到,所以其隐蔽性高,如果攻击者不留下痕迹,或者管理员没有查看数据库日志的习惯,基本不会发现。
根据美国国家漏洞数据库(NVD)的统计,SQL注入在针对Web应用攻击手段中名列榜首,是互联网危害最大的安全漏洞。SQL注入攻击的几个过程。
(1)判断Web应用是否可以进行SQL注入。如果URL仅是对静态网页的访问,不存在SQL注入问题。只有存在数据库动态查询请求的URL,才可能存在SQL注入,如:http:
//www.***.cn/web.jsp?id=36,其中id=36表示数据库查询变量。
(2)寻找SQL注入点。完成带参URL的查找后,通过构造一些特殊SQL语句,替换原有的URL参数值,再根据浏览器返回信息,判断该URL是否为SQL注入点。
(3)猜解用户名和密码。软件开发人员设计的数据库表名、字段名通常是有规律可循的。通过构建SQL语句在数据库中查找表名、字段名、用户名和密码的长度等内容。
(4)寻找Web系统管理后台入口。通常Web系统后台管理的界面不向普通用户开放,要寻找到后台的登录路径,可以利用扫描工具,测试可能的后台入口地址进行。
(5)实施入侵和破坏。成功登录管理系统后,接下来就可以任意进行读写,篡改网页、木马上传、修改、泄漏用户信息等,并进一步入侵数据库服务器。
由于大多数Web应用检测软件成本较高,不适合中小型网站,所以需要一种简单方便的网站检测服务。该漏洞检测工具针对MySQL数据库服务器,对用户提交的URL进行安全检测,对漏洞划分不同的危险等级,发现问题后显示危险URL,不显示其他敏感信息。
3 SQL注入漏洞检测工具的设计
3.1 SQL注入漏洞检测方法
可以采用模仿黑客攻击的方法来检测是否存在SQL注入漏洞,与SQL注入攻击的步骤类似,如图1所示。
(1)在检测过程中,采用网络爬虫技术,先将整个网站的所有网页抓取完成。将重复的URL以及链接到被检测网站外的URL剔除后,存入网页URL数据库。
(2)访问网页URL的数据库,获得一条URL。
(3)对网页URL数据库中存储的URL进行检测,检测的步骤同攻击过程。为了提高检测的效率,采用模板参数填充的方法。可需要根据实际情况对表1所示的SQL 注入模板的参数进行填充,以构成可执行的SQL攻击语句。其中u表示URL;%s表示SQL语句的条件部分;~u表示将URL中SQL语句的条件取反。如果构建的SQL语句未通过URL检测,那么该URL不存在SQL注入漏洞,转步骤2。如果构建的SQL语句通过URL检测,那么存在SQL注入漏洞,转步骤4。
(4)以MySQL4及以上版本为例,列出检测信息。构建SQL语句,进一步获取基本信息,猜解数据和列名,并读取和写入文件。
(5)如果网页URL的数据库的每一条URL都检测过后,算法终止。
3.2 整体架构图
注入漏洞检测工具的基础构架如图2所示。分为三个功能模块:(1)网络爬虫:创建网页URL数据库;(2)SQL注入检测引擎:采用图2所示的流程进行SQL注入漏洞检测;(3)公共组件:支持前两个模块相应功能的实现。
4 SQL注入检测引擎的实现
4.1 SQL注入漏洞扫描
1)构造不同类型的payload:参照表2所示的SQL 注入模板的参数对URL进行填充。
2)根据http response来判断是否存在注入点:根据参数m_HttpUrl从指定的URL得到相应的返回内容;获取或设置用于向 Internet Http资源的请求进行身份验证的网络凭据,并使用正则表达式("
3)分析具体的注入类型:根据不同的注入类型构造不同的URL。
4.2 猜解数据与列名表名
1)获取数据库的基本信息
MySQL4及以上版本支持union查询,可以通过折半查找,逐步猜解信息。用到的内置函数如下:(1)VERSION():获得当前的数据库版本信息;(2)USER():获得当前的数据库用户名;(3)DATABASE():获得当前数据库名;(4)PASSWORD():获得相关用户的密码。获取数据库的基本信息如图4所示。
2)猜解表名
在MySQL4及以上版本中,可在注入点URL后添加如下代码:and(select count(*)from table_name)>0。如果返回正常,那么说明数据表的名字是存在的,否则不存在。
3)猜解列名