基于Web应用的SQL注入攻击和防御技术研究

2020-12-16 04:15韩继英山西职业技术学院山西太原030006
建材技术与应用 2020年6期
关键词:语句黑客漏洞

□□ 韩继英 (山西职业技术学院,山西 太原 030006)

引言

近年来,随着网络信息技术的迅速发展,网络应用程序的风险越来越大。在OWASP项目中,SQL注入攻击在十大网络应用程序中位于风险榜榜首,成为网络安全领域的重点工作之一。2014年美国海军的一个Web应用程序“Smart Web Move”遭到了黑客组织“TeamDigi7al”的攻击,造成22万名美国海军服役人员的信息泄露。之后,美军花费了50多万美元来处理此次数据泄露事件。同年,在日本NTT集团全球威胁情报报告中指出,企业在处理小规模SQL注入攻击事故时,平均每次善后的花费为19.6万余美元。由此可见,SQL注入是不容忽视的。

目前,Web的应用越来越多,而大部分Web应用程序会收集大量的用户信息,也就成为了黑客攻击的对象。而SQL注入是一种简单而又高效的攻击手段,是攻击者的不二选择。因此,SQL注入攻击的防御与研究是非常有必要的。

1 SQL注入攻击

1.1 SQL注入的定义

所谓SQL注入是在用户输入数据时,Web应用程序对其合法性未进行判断或是过滤不够严格,黑客可在事先定义好的Web应用程序查询语句末尾添上具有攻击意图的SQL语句,从而对数据库服务器进行未授权的任意非法查询,从而得到想要的数据信息。

1.2 SQL注入的操作过程

SQL注入的操作过程如图1所示。

图1 SQL注入的操作过程

SQL注入操作过程中,首先是进行注入点探测,通过一些应用程序进行恰当地分析,判断是否存在注入点或者注入点存在的具体位置,由于在不同的数据库中,SQL注入的方法和函数都不一样,所以需要采用不同的判断方法来确定数据库的类型,从而确定注入的方式。每一个数据库中的表名和字段名具有一定规律,可以通过特殊SQL查询语句破译数据库中的账户和密码,接下来通过AWVS或者WWWSCAN等Web目录扫描工具进行快速搜索,查找Web后台管理的登录入口。最后,利用已经破译的账户和密码登录Web后台管理平台,入侵服务器,进行肆意破坏或信息提取。

1.3 SQL注入的常用攻击方法

1.3.1 基于布尔、时间或条件的盲注式攻击

在开发人员将返回的一些错误信息全部过滤的前提下,黑客可以构造一些不同的参数,依据Web页面返回布尔值(False或True),即页面是否能够正常显示,来获取数据库信息,判断是否存在注入点。

基于布尔型的盲注若无结果的情况下,可依据页面的响应时间间隔来分析其SQL注入点的存在性,进而确定是否可以注入攻击。

另外,可以通过构造相互对立的条件语句来查看和比较系统在对立条件下的反应,从而获取系统的的信息。

如语句1:SELECT money FROM Finanial WHERE department=‘B’ and 1=0—‘,

语句2:SELECT money FROM Finanial WHERE department=‘B’ and 1=1—‘,

当提交语句1时,Web应用程序会报错,但不能确定是由于应用程序在验证输入后阻止了此次攻击,还是由于1=0这个条件导致的错误。提交语句2后,因为这个条件1=1是永远为真的,若没有出现错误信息,说明应用程序没有阻止攻击,是存在注入的。

1.3.2 插入注释符的注入攻击

在用户输入插入注释符后,一些必要的查询条件就会被过滤,使数据引擎不能执行,从而使查询语句在没有该部分查询条件的情况下,能够返回正常的值。

1.3.3 逻辑错误查询式注入攻击

黑客可以向系统提交不正确的SQL语句,虽然该语句不会被执行,但数据库的相关信息,比如类型、版本及参数等基本信息就会出现在返回的提示信息中,从而得到系统的内部信息。

1.3.4 基于联合查询的注入攻击

在某些数据库中,攻击者能够在原语句后面加上新的目标语句,以便对数据进行查询、更改等操作。在确定要注入页面有显示位的前提下,使用union将多个select查询语句的结果集进行合并,从而得到更多的额外信息。

1.3.5 基于存储过程的注入攻击

倘若数据库的默认存储过程被开启了,由于存储过程中包含参数,黑客就能够利用存储过程实现注入攻击。

2 SQL注入攻击的防御

2.1 过滤并验证用户输入

用户输入在SQL注入攻击中起着关键作用。要防御SQL注入攻击,必须对用户的输入进行过滤,不允许将用户输入信息嵌入到SQL语句中,可以通过参数化语句来使用参数,从而修正SQL语句。在系统安全模块的设计中,可采用一些手段来验证用户输入,如黑/白名单机制。通过黑名单可以拒绝接受用户输入某些危险字符,而白名单则可以接受某些特定类型的用户输入。通过对用户输入的合法性进行检查,可以确保用户输入的内容中只有合法数据。但数据检查必须在客户端和服务器端都要执行,否则,若黑客在客户端获取了网页的源代码,就可以对验证脚本进行修改或删除,然后再通过更改后的表单,将非法输入内容提交到服务器,所以在服务器端也必须进行验证。

2.2 利用存储过程执行所有查询

利用参数传递方式可以有效预防黑客利用连字符或单引号进行SQL注入攻击。另外,可以确保只有特定的存储过程能够拥有执行数据库的权限。每个用户输入都必须遵照被调用存储过程的上下文,这样存储过程可以有效防御SQL的注入攻击。

2.3 安全配置数据库服务器

首先,对数据库的登录账户和密码进行设置,以防恶意用户进行非法远程登录。另外,应为不同的用户分配不同的权限,在正常情况下,用户只能在自己权限范围内对数据进行操作;当遇到特殊情况需要越级操作时,可设置触发器,进行及时反馈,检测是否存在注入攻击。

其次,数据库的连接方式需要慎重考虑的。如数据库是用网络来连接的,就更方便黑客入侵。所以,必须在服务器端对数据库只允许本地连接,但还要实现网络连接功能。解决该问题需要增加数据访问层。把数据访问层作为数据库与应用程序服务器的桥梁进行数据传输。在数据传输过程中,网络用户使用的数据先传输到数据访问层,访问层处理后再转到数据库,进行数据库操作,并将操作结果传到数据访问层,访问层最终将数据再传到服务器。采用这种方式,可实现对数据库的有效保护。

再次,加强数据库的日志管理,提高日志记录的级别,采用独立的物理磁盘来保存日志记录,并定期检查,时刻关注Web应用程序的运行状况,若发现短时间内页面被密集访问,数据库中数据信息遭篡改或有可疑的临时存储文件时,说明Web应用程序可能受到了SQL注入攻击,应及时处理。

另外,通过对数据进行加密存储或加载Web防火墙来加强安全管理、防御注入攻击。

2.4 利用专业漏洞扫描工具

目前,黑客能够利用某些专业软件对攻击目标进行自动搜索,并将搜索结果轻松应用到其他Web架构中,随时发现系统中的漏洞,然后进行注入攻击。因此,为了确保Web应用程序安全运行,企业应配置部分专业漏洞扫描工具,如目前流行的Acunetix的Web网络漏洞扫描工具,可以通过网络爬虫来测试网站安全,查找安全漏洞,完善相应的Web应用程序。一个完善的、可靠的漏洞扫描程序会专门检测网站上SQL注入漏洞。漏洞扫描程序需要不断更新,新的漏洞需要新的扫描程序去查找。这样在系统正式使用之前就可以查找到系统漏洞,然后进行修复和完善,从而有效地防御注入攻击,提高系统的安全性。

3 结语

随着当前Web应用的快速发展,数据库的安全性越来越重要。SQL注入攻击有很多应用工具,操作过程简单方便,不需要掌握太多的专业知识。注入语句通常都会嵌入到HTTP请求中,而且变种很多,隐蔽性极高。在注入后,可以获取到数据库的名称、数据表名以及字段名,甚至整个服务器的所有数据,对用户的信息安全存在极大威胁。所以,SQL注入是目前应用系统所面临的首要安全威胁。SQL注入能够躲过杀毒软件查杀,若不进行防御,SQL注入会窃取或篡改相关数据,因而必须进行有效防御,系统的安全性也必须增强。

猜你喜欢
语句黑客漏洞
漏洞
欢乐英雄
多少个屁能把布克崩起来?
重点:语句衔接
网络黑客比核武器更可怕
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
我喜欢
作文语句实录