基于网站系统的SQL注入解析

2019-12-23 15:57赵少飞田国敏
网络安全技术与应用 2019年11期
关键词:字段后台语句

◆赵少飞 杨 帆 田国敏

(陕西省网络与信息安全测评中心 陕西 710065)

伴随信息时代科技水平的不断发展,云计算、大数据等技术应运而生,B/S模式的应用系统在不同领域得到广泛应用,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。越来越多的恶意攻击者利用应用程序存在的隐患肆意攻击应用程序,使应用系统的安全受到了严重的威胁。其中,最致命的攻击之一就是SQL注入。

1 何为SQL注入

SQL注入(SQL Injection)是Web应用程序面临的一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加、修改和删除数据库中的记录。

2 SQL注入分类

由于SQL注入一般发生在B/S结构的应用程序上,而这些应用程序大部分属于互联网上的web站点,因此依据SQL注入形成的原因,将SQL注入进行以下分类。

2.1 按照注入点类型来分类

(1)数字型注入点

当输入参数为数字类型时,例如页码、ID等,存在注入时则为数字类型的注入。这类注入方式常见于PHP和ASP等弱类型语言中,弱类型语言会自动推导数据类型,例如输入的ID的值为1时,会自动推导出ID的数据类型为int型,当输入的ID的值为1 and 1=2时,会自动推导出ID的数据类型为string型,但JAVA或者C#这类强类型语言并没有这样的特性,int型强制转换成string型时,会抛出异常,注入失败,所以这类注入方式常见于弱类型语言中。

(2)字符型注入点

当输入参数为字符类型时,则为字符类型的注入,其与数字类型的注入的区别在于:注入时需要使用单引号来闭合。这一类的SQL语句原型大概为select*from表名where name='admin',注入时需要单引号闭合,注入的数据应为admin’and 1=1--,合并为sql则为select*from user where name=‘admin’and 1=1–‘。

(3)搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有"keyword=关键字",有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的SQL语句,其原形大致为:select*from 表名where字段 like'%关键字%',若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select*from 表名 where字段like'%测试%'and'%1%'='%1%'。

2.2 按照数据提交的方式来分类

(1)GET注入

提交数据的方式是GET,注入点的位置在GET参数部分。

(2)POST注入

使用POST方式提交数据,注入点位置在POST数据部分,常发生在表单中。

(3)Cookie注入

HTTP请求的时候会带上客户端的Cookie,注入点存在Cookie当中的某个字段中。

(4)HTTP头部注入

注入点在HTTP请求头部的某个字段中。例如存在User-Agent字段中。

2.3 按照执行效果来分类

(1)基于布尔的盲注

即可以根据返回页面判断条件真假的注入。

(2)基于时间的盲注

即不能根据页面返回内容判断任何信息,而是用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

(3)基于报错注入

即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

3 SQL注入的过程

SQL注入利用的是正常HTTP服务端口,表面上看和正常的HTTP访问没有任何区别,隐蔽性强。

第一步:判断web站点是否可以进行SQL注入,如果web站点的URL只对网页进行访问,是不存在SQL注入的可能,只有对数据库进行动态查询的URL才会存在SQL注入的可能,例如http://www.xxx.com/test.php?id=1,其中id=1表示会对数据库进行动态查询,存在SQL注入可能性。

第二步:寻找注入点,构造SQL注入语句。判断出web站点可以进行SQL注入后,就需要寻找站点可利用的注入漏洞,通过输入一些特殊字符,查看浏览器返回的数据,判断数据库类型,进一步构造数据库查询语句找到注入点。

第三步:猜测数据库表名、用户名和密码。数据库中的表名、字段名都有一定的规律,通过构造特殊的数据查询语句,利用SQL注入工具依次查找数据库名、表名、字段名、用户名和密码长度。一般查询的密码都进行MD5加密,需要借助解密工具对MD5密码进行解密,就可以得到用户名和密码。

第四步:寻找web站点的管理后台。利用站点目录扫描工具或后台扫描工具对web站点进行扫描,查找出web后台的登录路径,并依次进行尝试,找到web站点的后台入口地址。

第五步:入侵和破坏。成功登录后台管理后,可以进行篡改网页、上传木马、修改用户信息等操作,也可以进一步入侵数据库服务器。

4 SQL注入如何防范

SQL注入的基本原理就是在网站页面提交欺骗性的数据,用于欺骗网站后台构造的非法SQL语句并执行。明晰SQL注入的原理,针对SQL注入提出一些措施进行防范。

4.1 对用户输入网页的数据通过正则表达式进行校验

对用户输入网页的数据进行正则表达式校验,包括对单引号和双"-"进行转换,进而校验输入数据中是否包含SQL语句的保留字,如:where,when,drop等。对用户输入数据进行严格限制,可以有效防范SQL注入攻击。

4.2 对用户输入数据进行参数化存储

SQL注入之所以能成功的原因是从数据库中取出的数据以及用户输入的数据均是字符型数据,这些字符型数据与SQL语句混合在一起且没有明确的界限,从而使DBMS在执行相应SQL语句时误将数据中的部分字符作为SQL关键字执行,改变了预期SQL语句的执行逻辑。如果将存入数据库中的数据统一采用参数化进行存储,当用户试图在URL中嵌入恶意的SQL语句时,参数化存储过程已经帮用户校验出传递给数据库的变量不是整型,而且使用存储过程的好处是我们还可以很方便地控制用户权限,我们可以给用户分配只读或可读写权限。

4.3 采用云检测技术对网站输入的SQL攻击进行检测

鉴于如今许多网站进行集约化平台部署,针对网站的SQL注入攻击行为,可以采用云检测技术,对用户输入网站的数据进行静态和动态检测,并通过智能化匹配漏洞库信息,定期检查并发现应用程序中的SQL注入漏洞,并加以拦截阻断。

5 结束语

本文阐述了SQL注入的概念,分别按注入点类型、数据提交方式、执行效果等三方面对SQL注入进行分类说明,通过对SQL注入的过程进行描述,提出SQL注入防御的具体措施。在云计算、大数据技术不断深入发展的今天,SQL注入作为web应用的一种典型攻击方式,也伴随着新技术、新应用有着新的变化,如何应对SQL注入不断变化的攻击方式,需要我们深入了解其原理,以不变应万变。

猜你喜欢
字段后台语句
带钩或不带钩选择方框批量自动换
浅谈台湾原版中文图书的编目经验
Wu Fenghua:Yueju Opera Artist
后台暗恋
互联网思维下的汽车服务连锁后台支撑系统
无正题名文献著录方法评述
无正题名文献著录方法评述
我喜欢
后台的风景
冠词缺失与中介语句法损伤研究