SQL注入攻击漏洞研究与防范措施论文_第1页
SQL注入攻击漏洞研究与防范措施论文_第2页
SQL注入攻击漏洞研究与防范措施论文_第3页
SQL注入攻击漏洞研究与防范措施论文_第4页
SQL注入攻击漏洞研究与防范措施论文_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1期题目PAGE28第5期辽宁省电子信息产品监督检验院年度论文2009年1月-PAGE4-SQL注入攻击漏洞研究与防范措施StructuredQueryLanguageInjectionLeakStudyAndDefenseMeasure姜志坤摘要:在当今的数字世界中,人们发现在维持公开的Internet连接的同时,保护网络和计算机系统的安全变得越来越困难。病毒、木马、后门、蠕虫等攻击层出不穷,虚假网站的钓鱼行为也让警惕性不高的公众深受其害。为了减轻信息泄露及系统被攻击带来的风险,企业和机构开始对自己的系统进行渗透测试,找出其中存在的漏洞和薄弱环节。本文通过对目前最流行的SQL注入攻击漏洞的攻击方法做了逐一的分析,并提出了检测和防范的措施。关键字:SQL注入攻击脚本攻击网络安全攻击防范模型有害代码SQL注入(SQLInjection)攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入式攻击呢?它是指黑客利用一些Web应用程序(论坛、留言本、文章发布系统)中某些疏于防范的用户可以提交或修改的数据的页面,精心构造SQL语句,把特殊的SQL指令语句插入到系统实际SQL语句中并执行它,以获得用户名、密码等敏感信息,从而达到获取主机控制权限的攻击方法。1.SQL注入攻击原理1.1SQL注入攻击实现原理结构化查询语言(SQL)是一种用来和数据库交互的文本语言,SQLInjection就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。SQL注入攻击主要是通过构建特殊的输入,这些输入往往是SQL语法中的一些组合,这些输入将作为参数传入Web应用程序,通过执行SQL语句而执行入侵者想要的操作,下面以登录验证中的模块为例,说明SQL注入攻击的实现方法。在Web应用程序的登录验证程序中,一般有用户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。其原理是通过查找user表中的用户名(username)和密码(password)的结果来进行授权访问,典型的SQL查询语句为:Select*fromuserswhereusername=′admin′andpassword=′smith′如果分别给username和password赋值“admin'or1=1--”和“aaa”。那么,SQL脚本解释器中的上述语句就会变为:select*fromuserswhereusername=′admin′or1=1--andpassword=′aaa′该语句中进行了两个判断,只要一个条件成立,则就会执行成功,而1=1在逻辑判断上是恒成立的,后面的“--”表示注释,即后面所有的语句为注释语句。同理通过在输入参数中构建SQL语法还可以删除数据库中的表,查询、插入和更新数据库中的数据等危险操作:(1)droptableauthors—如果存在authors表则删除。(2)unionselectsum(username)fromusers—从users表中查询出username的个数。(3)insertintousersvalues(666,′attacker′,′foobar′,0xffff)—在user表中插入值。(4)unionselect@@version,1,1,1--查询数据库的版本。(5)execmaster.xp_cmdshell′dir′通过xp_cmdshell来执行dir命令。1.2SQL注入攻击分析SQL注入可以说是一种漏洞,也可以说是一种攻击。当程序中的变量处理不当,对用户提交的数据过滤不足,都可能产生这个漏洞。它的攻击原理就是利用用户提交或可修改的数据,把想要的SQL语句插入到系统实际SQL语句中,轻则获得敏感的信息,重则控制服务器。例如Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,要求用户输入一个名称和密码。攻击者在用户名字和密码输入框中输入1'or'1'='1之类的内容。该内容提交给服务器之后,服务器运行上面的代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”。2.SQL注入攻击的检测方式及方法2.1检测方式SQL注入攻击检测分为入侵前的检测和入侵后的检测。入侵前的检测,可以通过手工方式,也可以使用SQL注入工具软件。检测的目的是为预防SQL注入攻击,而对于SQL注入攻击后的检测,主要是针对日志的检测,SQL注入攻击成功后,会在IIS日志和数据库中留下“痕迹”。2.2检测方法(1)输入验证检查动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注入成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入作为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于存储过程中利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,数据库仍然有受SQL注入攻击的危险。如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。(2)数据检查使用HDSI、NBSI和Domain等SQL注入攻击软件工具进行SQL注入攻击后,都会在数据库中生成一些临时表。通过查看数据库中最近新建的表的结构和内容,可以判断是否曾经发生过SQL注入攻击。(3)日志检查在Web服务器中如果启用了日志记录,则IIS日志会记录访问者的IP地址,访问文件等信息,SQL注入攻击往往会大量访问某一个页面文件(存在SQL注入点的动态网页),日志文件会急剧增加,通过查看日志文件的大小以及日志文件中的内容,也可以判断是否发生过SQL注入攻击。(4)其他SQL注入攻击成功后,入侵者往往会添加用户、开放3389远程终端服务以及安装木马后门等,可以通过查看系统管理员账号、远程终端服务器开启情况、系统最近日期产生的一些文件等信息来判断是否发生过入侵。3.SQL注入攻击防范模型及措施3.1防范模型在前人提出的SQL注入攻击的检测/防御/备案模型基础上,本人进行了检测过程的优化,提出了一种SQL自动防范模型如图1所示,本模型中所有检测都在服务器端进行。首先对IP地址进行检测,如果该IP地址在SQL注入攻击库中,则禁止该用户的访问,并再次将相关信息添加到SQL注入攻击库中;如果用户是首次访问,则对提交字符进行检测,如果是非法字符,则检测是否达到规定的访问值,如果达到则禁止用户访问,同时发送邮件给系统管理员。本模型可以防止攻击者穷举攻击并可自由设置攻击次数的上限,一旦到达上限,系统将自动发送邮件给管理员,管理员收到邮件后可以进行相应的处理,如果条件允许,还可以增加短信发送,增强SQL注入攻击的自动防范能力。客户端提交信息客户端提交信息服务器检测Sql注入库中检测IP地址是否存在服务器端字符串检测检测字符串是否合法正确访问地址禁止访问服务器进行备案是否超过指定访问值发送Email是是是否否否图1本模型的最大特点是自动将攻击信息及时地传递给管理员,方便管理员及时做出响应。核心代码如下:substopit()response.write"存在禁止访问ip地址:"&rs("ip")response.endresponse.redirect"noright.asp"endsubdimattack_browser,attack_ip,attack_hostattack_browser=Request.ServerVariables("Http_User_Agent")attack_ip=Request.ServerVariables("ReMote_Addr")attack_host=Request.ServerVariables("Remote_Host")setrs1=server.createobject("adodb.recordset")'从访问禁止ip中查询是否存在访问者的IP地址,如果存在则禁止其访问SQL1="selectipfromprohibit_ipwhereip=′"&attack_ip&"′"rs1.openSQL1,conn,1,3ifnotrs1.eofthencallstopit()endifrs1.closesetrs1=nothing'从系统防范设置中查出email地址和运行的访问次数setrs2=server.createobject("adodb.recordset")SQL2="select*fromD_setup"rs2.openSQL2,conn,1,3ifnotrs2.eofthensession("email")=rs2("email")session("ok_count")=rs2("ok_count")endifrs2.closesetrs2=nothingurl=Request.ServerVariables("Query_String")callchk(url)'从Attack_count表中获取A_count的次数,如果A_count次数不小于默认的访问次数则禁止ifchk(url)thensetrs3=server.createobject("adodb.recordset")SQL3="selectA_countfromattack_count"rs3.openSQL3,conn,1,3ifnotrs3.eofthenifrs3("A_count")>=session("ok_count")then'插入攻击记录信息到attack_record表中t1_SQL1="insertintoAttack_record(ip,Attacktime,Host,Browser)value(′"&attack_ip&"′,now(),′"&attack_host&"′,′"&attack_browser&"′)"setrsdel=conn.execute(t1_SQL1)callstopit()ok=Jmail(session("email"),"SQL注入攻击告警!","攻击者IP地址:"&attack_ip)elsetemp_a_count=rs3("a_count")+1'插入攻击ip和a_count信息到Attack_count表中t1_SQL2="insertintoAttack_count(ip,A_count)value(′"&attack_ip&"′,′"&temp_a_count&"′)"setrsdel=conn.execute(t1_SQL2)endifendif3.2防范措施SQL注入攻击防范方法目前已经有很多,总结起来有以下方法:(1)在服务端正式处理之前对提交数据的合法性进行检查。如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单或查询字符串输入的长度也是一个好方法。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。(2)封装客户端提交信息;(3)替换或删除敏感字符/字符串。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注射攻击,单引号常常结束掉SQL语句,可能给予输入者不必要的权力。用双引号替换掉单引号可以使许多SQL注入攻击失败。如:“select*fromuserswhereusername=or1=1andpassword=or1=1”显然会得到与“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”不同的结果。(4)屏蔽出错信息。攻击者有时从客户端提交特殊的代码,根据IIS给出的出错提示信息来收集程序及服务器的信息,从而获取想得到的资料。如果把IIS设置成不管出什么样的ASP错误,只给出一种错误提示信息,那么攻击者就没办法入侵了。(5)不要用字串连接建立SQL查询,而使用SQL变量,因为变量不是可以执行的脚本。动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注入成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入作为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于存储过程中利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,数据库仍然有受SQL注入攻击的危险。(6)目录最小化权限设置,给静态网页目录和动态网页目录分别设置不同权限,尽量不给写目录权限;(7)修改或者去掉Web服务器上默认的一些危险命令,例如ftp、cmd、wscript等,需要时再复制到相应目录;(8)将用户登录名称、密码等数据加密保存,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论