购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.8 SQL注入风险(P)

数据作为企业的重要资产保存在数据库中,SQL注入可能使攻击者获得直接操纵数据库的权限,带来数据被盗取、篡改、删除的风险,给企业造成巨大损失。

SQL注入可能从互联网兴起之时就已诞生,早期关于SQL注入的热点事件可以追溯到1998年。时至今日,SQL注入在当前的网络环境中仍然不容忽视。

SQL注入产生的主要原因是,应用程序通过拼接用户输入来动态生成SQL语句,并且数据库管理对用户输入的合法性检验存在漏洞。攻击者通过巧妙地构造输入参数,注入的指令参数就会被数据库服务器误认为是正常的SQL指令而运行,导致应用程序和数据库的交互行为偏离原本的业务逻辑,从而导致系统遭到入侵或破坏。

所有能够和数据库进行交互的用户输入参数都有可能触发SQL注入,如GET参数、POST参数、Cookie参数和其他HTTP请求头字段等。

攻击者通过SQL注入可以实现多种恶意行为,如:绕过登录和密码认证,恶意升级用户权限,然后收集系统信息,越权获取、篡改、删除数据;或在服务器植入后门,破坏数据库或服务器等。

SQL注入的主要流程如图5-5所示,具体如下。

图5-5 SQL注入的主要流程

(1)Web服务器将表格发送给用户。

(2)攻击者将带有SQL注入的参数发送给Web服务器。

(3)Web服务器利用用户输入的数据构造SQL串。

(4)Web服务器将SQL发给DB服务器。

(5)DB服务器执行被注入的SQL,将结果返回Web服务器。

(6)Web服务器将结果返回给用户。

攻击者常用的SQL注入,主要有以下类型。

(1)Boolean-based blind SQL injection(布尔型注入)。在构造一条布尔语句时通过AND与原本的请求链接进行拼接。当这条布尔语句为真时,页面应该显示正常;当这条语句为假时,页面显示不正常或是少显示了一些内容。以MySQL为例,比如,攻击者使用在网页链接中输入https://test.com/view?id=X and substring(version(),1,1)=Y(X和Y分别为某特定值),如果MySQL的版本是6.X的话,那么页面返回的请求就和原本的一模一样,攻击者可以通过这种方式获取MySQL的各类信息。

(2)Error-based SQL injection(报错型注入)。攻击者不能直接从页面得到查询语句的执行结果,但通过一些特殊的方法却可以回显出来。攻击者一般通过特殊的数据库函数引发错误信息,而错误的回显信息又把这些查询信息给泄露出来了,因此攻击者就可以从这些泄露的信息中搜集各类信息。

(3)Time-based blind SQL injection(基于时间延迟注入)。不论输入何种请求链接,界面的返回始终为True,即返回的都是正常的页面情况,则攻击者就可以构造一个请求链接。当一个请求链接的查询结果为True时,通过加入特定的函数如sleep,让数据库等待一段时间后返回,否则立即返回。这样,攻击者就可以通过浏览器的刷新情况来判断输入的信息是否正确,从而获取各类信息。

(4)UNION query SQL injection(可联合查询注入)。联合查询是可合并多个相似的选择查询的结果集,它等同于将一个表追加到另一个表,从而将两个表的查询组合在一起,通过联合查询获取所有想要的数据。联合注入的前提是,页面要有回显位,即查询的结果在页面上要有位置可以展示出来。

(5)Stacked queries SQL injection(可多语句查询注入)。这种注入危害很大,它能够执行多条查询语句。攻击者可以在请求的链接中执行SQL指令,将整个数据库表删除,或者更新、修改数据。如输入:https://test.com/view?id=X;update userInfo set score='Y'where 1=1;(X和Y分别为某特定值),等到下次查询时,则会发现score全部都变成了Y。 /pHBlWiaT3D7TYAvvruiEHLb9WS3NioWi3SHSg7C1wgKm2wbkZ6KRrjT1eX5jMuJ

点击中间区域
呼出菜单
上一章
目录
下一章
×