已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL注入漏洞原理及分析Structured Query Language Injection Principle And Analysis of Vulnerability摘 要:注入式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给We程序,以发号施令,为所欲为。而且表面看起来注入攻击与一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对注入发出警告,如果管理员没查看IIS日志的习惯,很可能被渗透很长时间都不会发觉。本文通过对SQL注入式攻击的常用攻击方法做了逐一的分析, 并针对每种攻击方法提出了检测和防范的措施。文章还会对一些网站源代码进行分析,并介绍一些检测工具。关 键 词:SQL注入攻击;防御方法;脚本攻击;网站安全;数据库安全。随着数据库技术及B/S模式应用技术的发展,SQL注入攻击也成了黑客对数据库进行攻击的常用手段之一。但是由于使用这种模式编写代码的程序员水平有限,相当大一部分程序员在编程的时候,没有考虑用户输入数据的合法性问题,使得应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。1.SQL注入攻击的背景在信息技术高速发展的今天,各种各样复杂的威胁网站技术也同时快速的“发展”,让人们防不胜防。攻击者利用网络的安全漏洞进行各种恶意活动,如账号盗用、私密信息截获、带宽资源占用等。严重破坏了网络的正常健康运行,危害十分严重。网站威胁的目标定位有多个维度,可以是个人、公司、某种行业,甚至国家、地区、性别、种族、宗教等。通常情况下攻击会采用多种形态,如病毒、蠕虫、特洛伊、间谍软件等或是他们的复合形态。可以分为内部攻击和外部攻击两类:1)内部攻击主要来自信任网络,可能是用户执行了未授权访问或是无意中定制了恶意攻击;2)外部攻击主要是由于网络漏洞被利用或者用户受到恶意程序制定者的专一攻击。2.SQL注入攻击的概念SQL注入攻击源于英文“SQL Injection Attack”。目前还没有看到一种标准的定义,常见的是对这种攻击形式、特点的描述。微软技术中心从两个方面进行了描述:1)脚本注入式的攻击;2)恶意用户输入用来影响被执行的SQL脚本。Stephen Kost给出了这种攻击形式的另一个特征,“从一个数据库获得未经 授权的访问和直接检索”。SQL注入攻击就其本质而言,他利用的工具是SQL的语法,针对的是应用程序开发者编程过程中的漏洞。“当攻击者能够操作数据,往应用程序中插入一些SQL语句时,SQL注入攻击就发生了”。 SQL注入攻击是指黑客利用一些Web 应用程序(论坛, 留言本, 文章发布系统)中某些疏于防范的用户可以提交或修改的数据的页面, 精心构造Sql 语句, 把特殊的SQL 指令语句插入到系统实际SQL语句中并执行它, 以获取用户密码等敏感信息, 以及获取主机控制权限的攻击方法。3.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注入攻击成功后,轻者只是更改网站首页等数据,重者通过网络渗透等攻击技术,可以获取公司或者企业机密数据信息,产生重大经济损失。4.SQL注入攻击的实现原理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)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命令。5.SQL注入攻击实现过程SQL注入攻击可以手工进行,也可以通过SQL注入攻击辅助软件如HDSI、Domain、NBSI等,其实现过程可以归纳为以下几个阶段:1)寻找SQL注入点寻找SQL注入点的经典查找方法是在有参数传入的地方添加一些特殊字符,通过浏览器所返回的错误信息来判断是否存在SQL注入,如果返回错误,则表明程序未对输入的数据进行处理,绝大部分情况下都能进行注入。2)获取和验证SQL注入点找到SQL注入点以后,需要进行SQL注入点的判断。3)获取信息获取信息是SQL注入中一个关键的部分,SQL注入中首先需要判断存在注入点的数据库是否支持多句查询、子查询、数据库用户账号、数据库用户权限。4)实施直接控制以SQL Server 2000为例,如果实施注入攻击的数据库是SQL Server 2000,且数据库用户为sa,则可以直接添加管理员账号、开放3389远程终端服务、生成文件等命令。5)间接进行控制间接控制主要是指通过SQL注入点不能执行DOS等命令,只能进行数据字段内容的猜测。在Web应用程序中,为了方便用户的维护,一般都提供了后台管理功能,其后台管理验证用户和口令都会保存在数据库中,通过猜测可以获取这些内容,如果获取的是明文的口令,则可以通过后台中的上传等功能上传网页木马实施控制,如果口令是明文的,则可以通过暴力破解其密码。6.SQL注入攻击及防御方法具体实现1)绕过身份认证一个登陆界面, 需要输入用户名和密码, 然后Post 到另一个页面, 进行身份认证, 此时进行身份认证的代码如下:username= Request. form (username )password= Request. form (password )sql= select from admin where username= & usename & and password= & password & rs. open sql, conn, 0, 3if no t rs. eof thensession ( login ) = trueResponse. redirect (admin. asp )end if从上面的代码中可以看出, 程序在得到用户的数据之后,没有进行任何的过滤和处理, 直接用来构成SQL 语句, 其危险性是最高的, 攻击者只要根据SQL 语句的编写规则就可以跳过身份认证, 方法如下:攻击者只需在用户名和密码的输入框中都输入 o r 1=1的内容, 那么攻击者就可以不经过不任何认证而直接进入next. asp 页面, 并拥有和正常登陆用户一样的全部特权。原因是什么呢? 我们比较一下正常用户登陆和攻击者登陆时的两句SQL 语句:a.正常用户(用户名为xxxx, 密码为yyyy)sql= select from admin where username = xxxxand password= yyyyb.攻击者(用户名和密码都为 o r 1= 1 ) sql= select from admin where username= o r 1=1and password= o r 1= 1可以看到由and 连接的两个条件都被一个永远成立的1= 1 所代替, 执行的结果为真, 因此服务器也会认为条件成立, 于是把login 标志设为true, 让攻击者以合法身份登陆进入index.asp 页面。根据上述攻击原理,构造不同语句提交实现相同效果的绕过登录认证处理方法,用户名输入or=or字符,密码输入任意字符,实际测试效果图如下:图6-1 登录页面源代码图6-2 登录页面图6-3 绕过身份认证登录管理界面2)加固方法及措施其实解决的办法很简单, 有两种解决的办法:a.通用的办法是对用户提交的数据先进行过滤, 把单引号和双引号全部过滤掉, 再进行SQL 语句的构造, 这样就大大降低了攻击者成功的概率, 具体代码如下:username = Replace (Request. form ( username ) , , )password = Replace (Request. form ( password ) , , )sql= select from adm in w here username= & username & and password= & password & rs. open sql, conn, 0, 3if no t rs. eof thensession ( login ) = trueResponse. redirect (admin. asp )end ifb.第二种办法是把一句SQL 查询分为两句写, 先通过用户名判断数据库中是否存在该用户, 如果不存在, 直接退回登陆界面, 如果存在, 再进行密码的校验工作, 具体代码如下:username= Request. form (username )passwo rd= Request. form (password )sql= select from admin where username= & usename & rs. open sql, conn, 0, 3if rs. eof thenResponse.redirect ( login. asp )Else if Rs (password ) = password thenResponse.redirect (admin. asp )end ifend if7.结束语SQL注入漏洞攻击在网上非常普遍,许多ASP、PHP论坛和文章管理系统、下载系统以及新闻系统都存在这个漏洞。造成SQL注入漏洞攻击的主要原因是开发人员在系统开发的过程中编程不规范,没有形成良好的编程习惯,问题的解决只有依赖于规范编程。此外,也可以使用现有的SQL注入漏洞扫描器对整个网站中的关键代码进行扫描,查找网站页面中存在的SQL注入点。对于有问题的页面,可以及时删除或更新。本文对SQL注入攻击的方法、原理以及攻击实施过程进行了阐述和总结,并给出了常见的一些SQL注入攻击防范方法。最后总结了一些常用且通用的SQL注入攻击防范方法。- 8 -参考文献:1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术护理工作指南
- 托辅老师年终总结
- 职业院校实习学生管理方案
- 餐厅员工排班表自动生成模板
- 幼儿水粉绘画材料介绍
- 工矿产品购销合同范本简单试卷教案
- 教师招聘考试综合能力模拟练习题
- 城市绿化工程维护手册
- 商务谈判技巧培训实战案例
- 建筑项目职业病危害风险评估导则
- 2025年洛阳市城乡一体化示范区招聘城市管理辅助人员130名笔试考试参考试题及答案解析
- 经皮冠状动脉介入治疗术后口服抗栓策略优化专家共识2026
- 2025年垫江县辅警协警招聘考试真题及参考答案详解1套
- 掘进队长考试题库及答案
- (2025)全国小学生“学宪法、讲宪法”活动知识竞赛题库及答案
- 培训机构学管师培训
- 功能性训练培训
- 2024年宜昌市西陵区人民医院医疗卫生专业技术人员招聘考试真题
- 买卖当归合同协议书
- 产品研发协议书范本
- 2025年中国铁路青藏集团有限公司招聘全日制普通高校大专(高职)毕业生笔试题库(二)附答案解析
评论
0/150
提交评论