WEB安全之SQL注入
Posted 绿盟科技金融事业部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB安全之SQL注入相关的知识,希望对你有一定的参考价值。
伴随着WEB2.0时代的到来,WEB领域发展了很多崭新的应用,人们可以通过Web平台在线享受到丰富的服务,基于WEB环境的互联网应用越来越广泛,WEB攻击的手段也越来越多样, 其中SQL注入是目前因特网上最通用的攻击方式。通过Google、百度等搜索引擎,我们可以发现大量的文章和信息。这类攻击的泛滥,一方面由于WEB应用的多元化及经济价值所在,当前攻击者的驱动力从单纯的爱好转为经济利益驱使;另一方面,攻击软件的泛滥降低了技术门槛。如SQL注入自动化攻击引擎实现了全过程自动化,尤其是自动完成这一关键步骤,极大便利攻击者、为其提升攻击成功率。另外,XSS,CSRF等攻击手段愈发强大,WEB攻击的思路也从服务端转向了客户端,转向了浏览器和用户。
01
SQL注入概述
SQL注入攻击是常用的应用层攻击手段,也是最危险的 WEB 攻击手段之一,同时也是对企业最具破坏性的攻击手段之一。很多WEB应用程序都使用数据库来存储信息。SQL 命令就是前端WEB和后端数据库之间的接口,使得数据可以传递至WEB应用程序。很多WEB站点都会利用用户输入的参数动态地生成SQL查询要求,攻击者通过在URL、表格域,或者其他的输入域中输入自己的SQL命令,以此改变查询属性,骗过应用程序,从而可以对数据进行不受限的访问。
SQL注入漏洞成因在于WEB应用程序对用户提交参数数据未做充分检查过滤。用户提交的数据可能会被用来构造访问后台数据库的SQL指令,如果这些数据过滤不严格就有可能被插入恶意的SQL代码,从而非授权操作后台的数据库,导致从敏感信息泄露、破坏数据库内容和结构、甚至利用数据库本身的扩展功能控制服务器操作系统。利用SQL注入漏洞可以构成对WEB服务器的直接攻击,还可能利用服务器攻击第三方的浏览网站的其他用户。例如:很多网站在编程时,没有对输入的合法性进行验证。输入的用户名为“tests”,密码设置“tests123”,对其数据库用户表进行查询的 SQL 语句就是“select * from 用户表 where 用户名 ='tests' and 密码 ='tests123'”。但是如果对语句进行修改,用户名变成“' or 1=1 --'”,密码输入为空,组合后 SQL 结果为“select * from 用户表 where 用户名 ='' or 1=1 --'' and 密码 =''”。“' or 1=1 --'”。这个判断导致 SQL 不对用户名和密码进行验证,这将导致攻击者可以查出表用户表的所有记录,成功登录系统。如果再加上“drop 用户表”等破环性语句,会对系统产生极大危害。
SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注:
可显注入:
攻击者可以直接在当前界面内容中获取想要获得的内容。
报错注入:
数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中,所以攻击者可以构造数据库报错语句,从报错信息中获取想要获得的内容。
盲注:
数据库查询结果无法从直观页面中获取,攻击者通过使用数据库逻辑或使数据库库执行延时等方法获取想要获得的内容。
02
SQL 注入攻击的主要危害
如果网站存在 SQL 注入漏洞,攻击者可以轻松获得管理员账号、密码,从而任意删改网站上发布的信息,甚至攻击者还可以将木马传到网站上,从而控制企业的整个服务器。如果攻击者攻破的系统中有企业存放的秘密商业信息,将导致信息泄露,将可能对公司造成重大经济损失。如果攻击者对系统数据进行修改,存放在数据库中的数据将被破坏,数据变得不准确,这将会对使用者造成误导,甚至可能导致整个系统瘫痪。
SQL注入攻击是通过正常的WEB端口进行访问,通常防火墙都不会对 SQL 注入发出警报,如果不借助相关的安全防护设备(如:WAF)或安全防护软件,很可能被入侵很长时间都不会被发觉。
SQL注入攻击技术出现已有数年,过去,SQL注入攻击针对特定的Web应用程序,攻击者事先已经了解到了底层数据库的架构以及应用程序注入点。新型攻击与以往有很大不同。它将可能攻击任何存在SQL注入漏洞的动态ASP页面。
具体攻击方式,是黑客首先使用搜索引擎定位网页中包含的动态ASP脚本,测试脚本是否存在SQL注入漏洞并确定注入点,最终试图遍历目标网站后台SQLServer数据库的所有文本字段,插入指向恶意内容的链接。攻击的整个过程完全自动化,一旦攻击得逞,这些自动插入的数据将严重破坏后台数据库所存储的数据,动态脚本在处理数据库中的数据时可能出错,各级页面不再具有正常的观感。被攻击站点也可能成为恶意软件的分发点,访问这些网站的网民可能遭受恶意代码的侵袭,用户的系统被植入木马程序从而完全为攻击者控制。
03
SQL 注入攻击特点
1
广泛性
SQL 注入利用的是 SQL 语法,它可跨越各种操作对网站进行攻击。只要 WEB 应用系统未对 SQL 的输入进行校验、处理,攻击者均可采取 SQL 注入攻破。
2
隐蔽性高
SQL 注入通过 WWW 端口访问系统,与正常的 WEB 页面访问方式没有区别,因此,一般防火墙软件难以识别。
3
攻击时间短
攻击者可以在几秒到几分钟的时间完成对数据库或 WEB 服务器的控制。
4
技术难度小
SQL 注入在网络上可找到多款工具,且基本为图形化工具,因此,学习起来非常简单。
5
危害大
SQL 注入攻击成功后,攻击者可轻易对网站信息进行修改,获取企业机密,给企业造成重大经济损失等。
04
SQL 注入攻击防范措施
校验输入的数据类型
根据前面的分析和测试可知,在开发阶段即要有意识的将数据与代码分离开。将一切的用户输入均视为不可信的输入,统一对用户输入的数据类型进行校验。严格限制数据类型,并始终对输入的数据进行检查,过滤掉危险字符。
使用预编译的SQL语句
在程序功能实现的过程中可以使用预编译的SQL语句,绑定变量,确保了语义的准确可信。攻击者无法改变SQL语句的结构和形态,从而有效对抗SQL注入。
使用较为安全的函数
在开发阶段就使用OWASP推荐的安全函数,参考OWASP ESAPI中的部分功能实现进行开发。与此同时,目前主流数据库厂商均提供了安全函数编码参考和一些具体的存储过程,使用这些安全的函数来代替存在风险的函数和传统的SQL语句拼接。
落实数据库权限最小化原则
在进行数据库权限规划和程序账号权限规划时,建议使用最小权限原则,删除冗余用户。避免WEB应用直接使用root、sa等高权限账户连接和操作数据库。同时WEB应用所使用的数据库账号不能拥有操作本地文件和创建自定义函数等高危权限。
尽可能使用存储过程
在WEB应用规划阶段应对数据进行详细分析,尽量采用存储过程来代替SQL语句的拼接。由于存储过程需要在数据库中对SQL语句进行预定义,因此需要尽量避免在存储过程中使用动态SQL语句的情况,但存储过程仍然存在被注入的风险。
屏蔽服务器的错误
屏蔽服务器的详细错误,防止将错误信息传到客户端。
查找SQL注入漏洞
使用专业的漏洞扫描工具,寻找可能被 SQL 注入攻击的点。凭借专业工具,发现 SQL 注入漏洞,并提醒管理员采取积极措施预防 SQL 注入攻击。
目前诸多信息安全厂商均已推出相关的SQL注入和WEB应用安全防护产品,如:基于安全规则WAF安全设备均可检测并且阻断SQL注入行为。
05
小结
本文针对SQL注入攻击的方法及其防范措施进行了阐述,力求从根本上使人们SQL 注入攻击有直观认识,防止因 SQL 注入攻击带来一系列问题。
参考文献
[1]王云,郭外萍,陈承欢 .WEB 项目中的 SQL 注入问题研究与防范方法 [J]. 计算机工程与设计 ,2010(5):976-978.
[2]Justin Clarke.SQL Injection Attacks and Defense[M]. 北京 : 清华大学出版社 .2010:6.
[3]360 互联网安全中心 .2015 年中国网站安全报告
[R].2016:2.
[4]张勇 , 李力 , 薛倩 .WEB 环境下 SQL 注入攻击的检测
与防御 [J]. 现代电子技术 ,2004(15):105-107.
[5]徐陋 , 姚国祥 .SQL 注入攻击全面预防办法及应用 [J].
计算机信息 ,2006(3):18-20.
[6]刘帅 .SQL 注入攻击及其防范检测技术的研究 [J]. 电脑知识与技术 ,2009(28).
[7]曾毅 .SQL Server 数据库技术大全 [M]. 北京 : 清华大学出版社 ,2009:5.
绿盟科技金融事业部微信公众号: nsfocusfbd
点击“阅读原文”阅读绿盟科技金融事业部安全月刊
以上是关于WEB安全之SQL注入的主要内容,如果未能解决你的问题,请参考以下文章