方自远
【摘 要】本文对SQL注入攻击的原理和方法进行了介绍,对如何检测和防御SQL注入攻击进行了研究.网络系统安全问题是一个持续性问题,SQL注入攻击作为网络中最为常见的攻击手段.了解并掌握如何有效防御SQL注入攻击对提升Web网络系统的安全性有着重大的现实指导意义. 【期刊名称】《智能计算机与应用》 【年(卷),期】2016(006)006 【总页数】3页(P87-89)
【关键词】Web安全;SQL注入;漏洞检测;攻击防御 【作 者】方自远
【作者单位】河南农业职业学院信息工程学院,郑州451450 【正文语种】中 文 【中图分类】TP391
最近十年来,互联网产业和技术发展蓬勃迅速,社会的各个领域都已经与Web应用建立了密切联系。使用互联网已经成为现代生活方式的不二选择。在全世界,大致可知应有数以亿计的网络服务器都在提供互联网服务。但与此同时,这些网络服务器也无时无刻都会遭遇到各类恶意攻击。
数据库是Web应用系统的基础组成部分,存储着大量关键敏感信息,因此,侵入和攻击数据库,窃取数据信息是网络攻击的主要目的和实施手段。根据相关组织调
研数据显示,Web应用十大关键风险排名第一位就是注入攻击。在全世界发生的Web服务系统攻击实践中,大约有60%的行为均可标注为SQL注入攻击。因此,研究SQL注入攻击及检测防御技术对有效控制和降低网络攻击事件发生必将具有重大现实意义及作用。
SQL注入攻击(SQL injection)是利用Web 应用程序的设计漏洞来实现Web应用系统、尤其是数据库的入侵,从而最终达到获取或破坏数据的一种非法策略及手段。通过SQL注入可能会导致如下后果:入侵者恶意进占了数据库服务器、获取数据库高级操作权限、窃取数据库中存储的关键数据信息等。
SQL注入攻击的发起者多是利用Web页面中存在的漏洞,有针对性地构造SQL语句,并蓄意引导数据库服务器执行这些SQL语句,通过截取用户名和密码等重要信息,从而全面获取了数据库控制权限。 SQL注入攻击的可选研究方式主要有: 1)使用注释符和恒等式;
2)使用union语句进行联合查询;
3)使用insert或update语句对数据库数据表内数据进行增加或修改; 4)利用一些内置函数辅助进行攻击等。
在此,将结合前2种方法给出实现过程详述与阐析。
众所周知,如果要查询数据库的user表中所有条目,那么正确的查询语句为: SELECT * FROM user WHERE username = 'user' AND password = 'pawd' 利用ASP 实现时,需要连接字符串,而后再加上SQL 命令,最后执行查看返回的结果是否为空。那么SQL 语句嵌套在ASP 代码中的表现形式可描述如下: var sql = \"SELECT * FROM user WHERE username = '\" +loginname + \"' AND密码 = '\" +loginpwd + \"'\";(loginname字段与loginpwd字段分别存储了用户在网页上所填入的用户名和密码信息。)
但是当用户在Web页面文本框内输入的内容为:loginname=‘ or 1=1 -- ,而loginpwd 的内容任意输入时,此时在ASP 中的查询语句则演变成: SELECT * FROM user WHERE username=‘ ’or 1=1 --AND password = 'pawd '
显然,SQL语句中密码验证部分被“- -”注释符当成了注释语句,同时,由于“1=1”恒等式的存在导致用户名验证部分永远为真。用户名验证和密码验证均发生了失效,这样攻击者就可以登录进入Web应用系统了。
利用union关键字查询一些数据库用户信息、数据库版本等信息。还可以用union关键字来获取其他信息。通过页面错误信息提示得到当前数据库名称、用户名等关键信息。而且,还可通过多次的报错测试,逐步获得多种关键数据信息,从而掌握数据库内部结构、数据库用户名等信息,为侵入数据提供实现基础。 SQL注入攻击的基础流程可概述为:首先,检测Web登录页面中是否有SQL注入漏洞,从而构建SQL注入点;其次,利用已经构建的SQL注入点将本该基于页面获取的验证参数通过SQL语句的语法组合传递给数据库;然后,经过多次试探,陆续可得到数据库类型、数据库结构、数据表信息以及数据库账号等;最后,则根据已知信息构造并执行SQL语句,达到侵入数据库,获取数据或实施数据更改等目的。研究设计步骤可展示如下:
步骤1 判断SQL注入点。通常使用的SQL注入点判断方法可分述为如下2种: 1)把“’”添加到Web提交请求的尾部,再根据Web页面反馈的提示信息来判断该系统所使用的数据库类型是否存在SQL注入漏洞。
但是,程序设计者可以进一步通过加入判别规则而将单引号进行过滤,那么将使单引号测试最终失效,从而无法判断是否存在SQL注入点。
2)将“and 1=1”或“and 1=2”添加到提交请求的末尾,若添加“and 1=1”的提交请求可以正常返回显示信息、而添加“and 1=2”的提交请求却返回出错提
示,此时则说明该Web页面存在注入漏洞;如果上述2个判别式均可返回提示信息,如此该Web页面即是安全的,也就是不存在SQL注入漏洞。
步骤2 猜测表名和字段名。如果访问的Web页面存在注入漏洞,则可以在提交请求语句后加入“and exists (select count(*)from student”,如果页面执行正常,没有错误提示,则说明student表是存在的,否则student表不存在,可以更换名称继续测试,直到猜出表名为止。
如果将Count(*)替换为Count(字段名),则用同样的方法即可进行字段名的探测。 步骤3 进行注入攻击。当已经基本了解数据库的内部结构后,黑客即可侵入后台数据库了。那么,这些黑客所需要的并不是DBA(数据库管理员)账号,而是DBA权限。当掌控了DBA权限后,据此将可获得更高级别的权限,这样便可以在Web系统中留下后门、植入木马等。如果使用sa 连接数据库,则能够调用xp_cmdshell 等存储过程,此时就可以对应用系统、数据库乃至操作系统进行修改和控制了。
根据检测发生的时间和目的差异,SQL注入攻击检测可以分成为入侵前检测和入侵后检测。具体来说,利用漏洞扫描工具和构造SQL注入语句检测即是入侵前检测的主要手段,而入侵后检测的方法则是检查服务器日志文件。通常情况下,入侵者在发动SQL注入攻击后,Web服务器和数据库服务器的日志文件都会存有相应的登录和操作记录。基于此,研究探讨可知,通过使用如下方法即能改善与增进SQL注入漏洞检测,分析阐释如下。
1)利用漏洞扫描工具。常用的漏洞扫描工具有:HDSI、NBSI、Domain、Sqlmap、BSQL Hacker、The Mole、Pangolin(穿山甲)。需要指出的是,这些工具既是网站维护者可以善加利用的一些检测工具,同时却也是网络攻击者用来攻击Web服务器的首选工具。
2)通过SQL注入点,执行非法SQL语句。将SQL语句的永真式或永假式追加在
Web页面请求后,根据页面执行后得到反馈信息来判断是否存在SQL注入点。对已发现的SQL注入点,通过构造and exits(select……)语句进行数据库结构判断。 3)日志文件检查。一般情况下,Web应用系统遭到入侵后都会留下相关操作记录在日志文件中。通过读取并分析数据库和Web服务器的日志文件来判断系统是否发生了入侵则是一种行之有效的方法。只是,对于经验老到的黑客来说,在实施入侵后则会进行残留痕迹的清理。
4)对访问请求进行检测。正常的访问请求不应该包含SQL关键字。基于这一前提,如果在HTTP请求中含有SQL关键词、特殊字符或者SQL语义的句子,即可初步判定为一次攻击行为。
使用频度通常较高的SQL关键字有:select…from、 order by、union、drop table、exp、md5()、case when then、sleep、substring、user()、
password()、version()、 substr()、benchmark()、schema()、--等都可以裁断为SQL注入攻击行为。
要做到防御SQL注入攻击,必须从多个层面设计应对策略:第一,从数据库设计和数据库管理方面;第二,从Web系统开发设计方面;第三,从Web系统管理维护方面。现给出综合论述如下。
使用安全的数据库账号,严格管控数据库账号权限,谨慎分配sa权限,用于程序连接数据库的用户使用数据库用户角色组的成员,同时严禁使用服务器角色组成员。 在数据库服务器上删除多余的扩展存储过程,尤其是访问注册表的存储过程。 DBA要将数据库服务器上的示例脚本最大限度移除,有效减少冗余脚本数据量。 数据库应设置高强度密码,提升密码安全性。
探寻目前安全问题的现象机理可知,Web系统开发人员应建立全局性的安全意识,在设计过程中充分考虑可能出现的安全漏洞,编写安全代码,防患于未然。 在此基础上,Web程序设计者则应保证后台研发程序能够具备对用户提交的访问
请求参数、pose数据、查询关键字进行严格检测和限制的功能;异常错误界面可以跳转指定界面,在设计上保证不会将错误信息暴露给Web系统使用者;而当涉及到数据库访问时,应采用加密传输,保证绝不使用明文传递参数;另外,针对SQL注入攻击常用方式,应尝试设立SQL语句的关联构建规则。
系统管理员应及时更新可为Web系统运行提供基础支持的关键软件,确保攻击者无法通过操作系统漏洞进行入侵。此外,应关闭相关对外连接端口,如TCP 1433/UDP 1434。系统管理员还应定期检查系统中用户密码,提升密码强度,建立密码定期更换的长效机制。同时,Web系统管员也要定期对Web系统日志引入安全审核,检查是否存在异常访问记录,确保能够及时发现系统安全隐患。 作者在本文中介绍了SQL注入攻击的原理和方法、如何检测SQL注入漏洞、怎样防御SQL注入攻击方面的内容。通过本文,读者对SQL注入建立了一个全面清晰的认识,对如何检测和防御SQL注入攻击也获得了基本了解,并掌握了一定的基础方法及有效防范手段。
当前的时代是一个互联网时代。网络安全问题既是互联网安全问题,也是社会安全问题。作为网络中最为常见的攻击手段,SQL注入攻击给互联网造成了巨大的破坏,也带来了难以估量的经济损失。因而研究实现有效防御SQL注入攻击,对于提升Web网络系统的安全性无论从经济、社会、伦理方面都将具有重要意义。
因篇幅问题不能全部显示,请点此查看更多更全内容