当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

SQL注入攻击及其防备检测技术研究[MSSQL防范]

赞助商链接



  本文“SQL注入攻击及其防备检测技术研究[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  本文扼要介绍了SQL注入攻击的原理,SQL注入攻击实现历程,并在此底子上给出了一种SQL注入攻击的自动防备模子.

  1 SQL注入攻击概述

  1.1 SQL注入技术定义

  SQL注入(SQL Injection)技术在国外最早呈目前1999年,我国在2002年后开始大量呈现,目前没有对SQL注入技术的尺度定义,微软中国技术中央从2个方面举行了描写:

  (1)脚本注入式的攻击

  (2)恶意用户输入用来影响被履行的SQL脚本

  Chris Anley将SQL注入定义为,攻击者通过在查询操作中插入一系列的SQL语句到利用程序中来操作数据.Stephen Kost[3]给出了SQL注入的一个特点,“从一个数据库得到未经受权的拜候和直接检索”.操纵SQL注入技术来实施网络攻击常称为SQL注入攻击,其本质是操纵Web利用程序中所输入的SQL语句的语法处理,针对的是Web利用程序开辟者编程历程中未对SQL语句传入的参数做出严峻的查抄和处理所造成的.习惯上将存在SQL注入点的程序大概网站称为SQL注入漏洞.实际上,SQL注入是存在于有数据库衔接的利用程序中的一种漏洞,攻击者通过在利用程序中预先定义好的查询语句末尾加上额外的SQL语句元素,拐骗数据库服务器履行非受权的查询.这类利用程序普通是基于Web的利用程序,它答应用户输入查询条件,并将查询条件嵌入SQL恳求语句中,发送到与该利用程序相关联的数据库服务器中去履行.通过构造一些畸形的输入,攻击者可以操作这种恳求语句去获得预先未知的后果.

  1.2 SQL注入攻击特点

  SQL注入攻击是目前网络攻击的主要手段之一,在一定程度上其安全风险高于缓冲区溢出漏洞,目前防火墙不能对SQL注入漏洞举行有效地防备.防火墙为了使合理用户运行网络利用程序拜候服务器端数据,必须答应从Internet到Web服务器的正向衔接,因此一旦网络利用程序有注入漏洞,攻击者便可以直接拜候数据库进而乃至可以得到数据库所在的服务器的拜候权,因此在某些情形下,SQL注入攻击的风险要高于全部其他漏洞.SQL注入攻击具有以下特点:

  (1)遍及性.SQL注入攻击操纵的是SQL语法,因此只如果操纵SQL语法的Web利用程序假如未对输入的SQL语句做严峻的处理城市存在SQL注入漏洞,目前以Active/Java Server Pages、 Cold Fusion Management、 PHP、Perl等技术与sql server、Oracle、DB2、Sybase等数据库相结合的Web利用程序均发现存在SQL注入漏洞.

  (2)技术难度不高.SQL注入技术公布后,网络上先后呈现了多款SQL注入工具,比方教主的HDSI、NBSI、明小子的Domain等,操纵这些工具软件可以简单地对存在SQL注入的网站大概Web利用程序实施攻击,并终究获得其计算器的掌握权.

  (3)危害性大,SQL注入攻击成功后,轻者只是更改网站首页等数据,重者通过网络浸透等攻击技术,可以获得公司大概企业奥秘数据信息,产生庞大经济丧失.

  2 SQL注入攻击的实现原理

  2.1 SQL注入攻击实现原理

  构造化查询语言(SQL)是一种用来和数据库交互的文本语言,SQL Injection就是操纵某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而到达入侵数据库乃至操作系统的目的.它的产生主如果由于程序对用户输入的数据没有举行具体的过滤,招致不法数据的导入查询.

  SQL注入攻击主如果通过构建特别的输入,这些输入常常是SQL语法中的一些组合,这些输入将作为参数传入Web利用程序,通过履行SQL语句而履行入侵者的想要的操作,下面以登录考证中的模块为例,阐明SQL注入攻击的实现办法.

  在Web利用程序的登录考证程序中,普通有效户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来履行受权操作.其原理是通过查找user表中的用户名(username)和密码(password)的后果来举行受权拜候,典型的SQL查询语句为:

  Select * from users where username='admin' and password='smith’

  假如辨别给username和password赋值“admin' or 1=1--”和“aaa”. 那么,SQL脚本注释器中的上述语句就会变成:

  select * from users where username=’admin’ or 1=1-- and password=’aaa’

  该语句中举行了两个判断,只要一个条件成立,则就会履行成功,而1=1在逻辑判断上是恒成立的,背面的“--”表示注释,即背面全部的语句为注释语句.同理通过在输入参数中构建SQL语法还可以删除数据库中的表,查询、插入和更新数据库中的数据等危险操作:

  (1)jo'; drop table authors—假如存在authors表则删除.

  (2)' union select sum(username) from users—从users表中查询出username的个数

  (3)'; insert into users values( 666, 'attacker', 'foobar', 0xffff )—在user表中插入值

  (4)' union select @@version,1,1,1--查询数据库的版本

  (5)'exec master..xp_cmdshell 'dir' 通过xp_cmdshell来履行dir号令

  2.2. SQL注入攻击实现历程

  SQL注入攻击可以手工举行,也可以通过SQL注入攻击帮助软件如HDSI、Domain、NBSI等,其实现历程可以归纳为以下几个阶段:

  (1)探求SQL注入点;探求SQL注入点的经典查找办法是在有参数传入的地方增添诸如“and 1=1”、“and 1=2”以及“’”等一些特别字符,通过浏览器所返回的错误信息来判断能否存在SQL注入,假如返回错误,则表明程序未对输入的数据举行处理,绝大部份情形下都能举行注入.

  (2)获得和考证SQL注入点;找到SQL注入点今后,需求举行SQL注入点的判断,常常采取2.1中的语句来举行考证.

  (3)获得信息;获得信息是SQL注入中一个关键的部份,SQL注入中首先需求判断存在注入点的数据库能否支持多句查询、子查询、数据库用户账号、数据库用户权限.假如用户权限为sa,且数据库中存在xp_cmdshell存储历程,则可以直接转(4).

  (4)实施直接掌握;以SQL Server 2000为例,假照实施注入攻击的数据库是SQL Server 2000,且数据库用户为sa,则可以直接增添管理员账号、开放3389远程终端服务、生成文件等号令.

  (5)间接举行掌握.间接掌握主如果指通过SQL注入点不能履行Dos等号令,只能举行数据字段内容的猜想.在Web利用程序中,为了便操纵户的保护,普通都供应了后台管理功效,后来台管理考证用户和口令城市保存在数据库中,通过猜想可以获得这些内容,假如获得的是明文的口令,则可以通过后台中的上传等功效上传网页木马实施掌握,假如口令是明文的,则可以通过暴力破解其密码.

  3 SQL注入攻击检测办法与防备

  3.1 SQL注入攻击检测办法

  SQL注入攻击检测分为入侵前的检测和入侵后的检测,入侵前的检测,可以通过手工方法,也可以利用SQL注入工具软件.检测的目的是为预防SQL注入攻击,而关于SQL注入攻击后的检测,主如果针对日记的检测,SQL注入攻击成功后,会在IIS日记和数据库中留下“痕迹”.

  (1)数据库查抄

  利用HDSI、NBSI和Domain等SQL注入攻击软件工具举行SQL注入攻击后,城市在数据库中生成一些暂时表.通过查看数据库中近来新建的表的构造和内容,可以判断能否曾经发生过SQL注入攻击.

  (2)IIS日记查抄

  在Web服务器中假如启用了日记记录,则IIS日记会记录拜候者的IP地址,拜候文件等信息,SQL注入攻击常常会大量拜候某一个页面文件(存在SQL注入点的动态网页),日记文件会急剧增添,通过查看日记文件的大小以及日记文件中的内容,也可以判断能否发生过SQL注入攻击.

  (3)别的相关信息判断

  SQL注入攻击成功后,入侵者常常会增添用户、开放3389远程终端服务以及安装木马后门等,可以通过查看系统管理员账号、远程终端服务器开启情形、系统近来日期产生的一些文件等信息来判断能否发生过入侵.

  3.2 普通的SQL注入攻击防备办法

  SQL注入攻击防备办法目前已经有很多,总结起来有下面一些:

  (1) 在服务法则式处理之前对提交数据的合理性举行查抄;

  (2) 封装客户端提交信息;

  (3) 替换或删除敏感字符/字符串;

  (4) 屏蔽出错信息.

  (5)不要用字串通接成立SQL查询,而利用SQL变量,因为变量不是可以履行的脚本;

  (6)目录最小化权限设置,给静态网页目录和动态网页目录辨别设置差别权限,尽大概不给写目录权限;

  (7)改正大概去掉Web服务器上默许的一些危险号令,比方ftp、cmd、wscript等,需求时再复制到呼应目录;

  (8)数据敏感信息非通例加密,通过在程序中对口令等敏感信息加密都是采取md5函数举行加密,即密文=md5(明文),本文举荐在本来的加密的底子上增添一些非通例的方法,即在md5加密的底子上附带一些值,如密文=md5(md5(明文)+123456);

  4 SQL注入攻击防备模子

  4.1SQL注入攻击防备模子

  在前人提出的SQL 注入攻击的检测/防备/备案模子底子上[8][9], 我们举行了检测历程的优化,提出了一种SQL自动防备模子如图1所示,本模子中全部检测都在服务器端举行,首先对IP地址举行检测,假如该IP地址在SQL注入攻击库中,则禁止该用户的拜候,并再次将相关信息增添到SQL注入攻击库中;假如用户是初次拜候,则对提交字符举行检测,假如是不法字符,则检测能否到达规定的拜候值,假如到达则禁止用户拜候,同时发送邮件给系统管理员.本模子可以避免攻击者穷举攻击并可安闲设置攻击次数的上限,一旦到达上限,系统将自动发送邮件给管理员,管理员收到邮件后可以举行呼应的处理,假如条件答应,还可以增添短信发送,加强了SQL注入攻击的自动防备本领.

  本模子的最大特点是自动将攻击信息及时的传送给管理员,便利管理员及时做出呼应.

SQL注入攻击及其防备检测技术研究
图1 SQL注入攻击自动防备模子

  核心代码以下:

  sub stopit()response.write "存在禁止拜候ip地址:"&rs("ip")response.endresponse.redirect "noright.ASP"end subdim attack_browser,attack_ip,attack_hostattack_browser=Request.ServerVariables("Http_User_Agent")attack_ip=Request.ServerVariables("ReMote_Addr")attack_host=Request.ServerVariables("Remote_Host")set rs1=server.createobject("adodb.recordset")'从拜候禁止ip中查询能否存在拜候者的IP地址,假如存在则禁止其拜候sql1="select ip from prohibit_ip where ip='"&attack_ip&"'"rs1.open sql1,conn,1,3if not rs1.eof thencall stopit()end ifrs1.closeset rs1=nothing'从系统防备设置中查出email地址和运行的拜候次数set rs2=server.createobject("adodb.recordset")sql2="select * from D_setup"rs2.open sql2,conn,1,3if not rs2.eof thensession("email")=rs2("email")session("ok_count")=rs2("ok_count")end ifrs2.closeset rs2=nothingurl=Request.ServerVariables("Query_String")call chk(url)'从Attack_count表中获得A_count的次数,假如A_count次数不小于默许的拜候次数则禁止if chk(url) thenset rs3=server.createobject("adodb.recordset")sql3="select A_count from attack_count "rs3.open sql3,conn,1,3if not rs3.eof thenif rs3("A_count")>=session("ok_count") then '插入攻击记录信息到attack_record表中 t1_sql1="insert into Attack_record(ip,Attacktime,Host,Browser) value('"&attack_ip&"',now

  (),'"&attack_host&"','"&attack_browser&"')"set rsdel=conn.execute(t1_sql1)call stopit()ok=Jmail(session("email"),"SQL注入攻击告警!","攻击者IP地址:"& attack_ip )elsetemp_a_count=rs3("a_count")+1'插入攻击Ip和a_count信息到Attack_count表中t1_sql2="insert into Attack_count(ip,A_count) value('"&attack_ip&"','"&temp_a_count&"')"set rsdel=conn.execute(t1_sql2)end ifend if

  4.2利用办法

  全部代码均存入一个文件sqlinject.asp,只需求将该文件包含在需求防备的页面中便可;此中需求包含email.asp和conn.asp二个文件,前者主要通过Jmail组件来发送email邮件,后者是调用数据库衔接,本模子的所采取的数据库是SQL Server 2000.

  4.3实际利用效果解析

  通过实际测试,当入侵者在网页提交一些不法字符到达指定次数后,系统会自动屏蔽掉该IP地址对网站的拜候并将攻击IP地址、攻击时间、攻击者浏览器版本等信息写入到数据库中.当本模子存在一个缺陷:当攻击者在一个局域网时,一旦系统自动记录该地址后,别的利用该IP地址的非入侵用户也无法拜候网站.本文彩纳的折衷办法是,在禁止的网页时留有email地址,假如发现是因为SQL入侵招致某个局域网(企业)不能拜候网站,则可以通过删除数据库中禁止拜候的IP地址,便可恢复正常拜候.

  5 .完毕语

  本文对SQL注入攻击的办法、原理以及攻击实施历程举行了阐述和总结,并给出了常见的一些SQL注入攻击防备办法.最后给出了一种SQL注入攻击自动防备模子,通过在实际项目中的利用,可以很好的举行主动防备,具有较高的实用代价.   以上是“SQL注入攻击及其防备检测技术研究[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 防备SQL注入式攻击
  • SQL注入漏洞全接触--高级篇(二)
  • SQL注入漏洞全接触--高级篇(一)
  • <b>SQL注入漏洞全接触--进阶篇(二)</b>
  • SQL注入漏洞全接触--进阶篇(一)
  • SQL注入漏洞全接触--入门篇(二)
  • SQL注入漏洞全接触--入门篇(一)
  • SQL Server利用程序中的高级SQL注入
  • SQL注入攻击及其防备检测技术研究
  • 闻名的SQL流量注入(SQL注入)攻击法
  • SQL注入奇招致胜 UNION查询轻松免费看片子
  • 安全入门:SQL注入漏洞全接触
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .