SQL注入漏洞原理及分析
sql注入的原理

sql注入的原理SQL注入是一种常见的网络安全漏洞,它利用了应用程序对用户输入数据的处理不当,通过在用户输入的数据中注入恶意的SQL代码,从而实现对数据库的非法访问和操作。
SQL注入攻击是目前最常见的攻击手段之一,对于网站和应用程序的安全构成了严重威胁。
SQL注入的原理主要是利用了应用程序对用户输入数据的不正确处理。
在应用程序中,如果没有对用户输入的数据进行充分的验证和过滤,那么攻击者就可以通过在输入框中输入恶意的SQL代码来实现对数据库的攻击。
一旦应用程序在接收用户输入数据时没有进行严格的过滤和验证,那么攻击者就可以通过构造恶意的输入数据,来执行未经授权的数据库操作。
SQL注入攻击的原理可以简单地理解为,攻击者通过在输入框中输入恶意的SQL代码,来篡改原有的SQL查询语句,从而实现对数据库的非法访问和操作。
攻击者可以通过SQL注入来实现对数据库的数据泄露、数据篡改甚至数据库服务器的攻击。
因此,SQL注入攻击对于数据库的安全构成了严重威胁。
为了防范SQL注入攻击,开发人员需要在应用程序中对用户输入的数据进行严格的验证和过滤。
在接收用户输入数据时,应用程序需要对输入数据进行检查,过滤掉其中的特殊字符和SQL关键字,从而防止恶意的SQL代码被注入到数据库查询语句中。
此外,开发人员还可以通过参数化查询等方式来防范SQL注入攻击,从而确保应用程序对用户输入数据的安全处理。
除了开发人员的防范措施外,数据库管理员也需要采取相应的安全措施来防范SQL注入攻击。
数据库管理员可以通过限制数据库用户的权限,禁止数据库用户执行一些危险的操作,从而减少数据库受到SQL注入攻击的风险。
此外,数据库管理员还可以对数据库进行定期的安全审计,及时发现并修复潜在的安全问题,从而确保数据库的安全性。
总之,SQL注入是一种常见的网络安全漏洞,它利用了应用程序对用户输入数据的处理不当,通过在用户输入的数据中注入恶意的SQL代码,实现对数据库的非法访问和操作。
S Q L 注入原理了解

0
防御和检查SQL注入的手段
· 没有正确过滤转义字符 如 and “t ”=“t ”; 1"or" 1"=" 1
· 使用参数化的过滤性语句 要防御SQL注入 , 用户的输入就绝对不能直接
被嵌入到SQL语句中 。恰恰相反,用户的输入必须 进行过滤 ,或者使用参数化的语句 。参数化的语句 使用参数而不是将用户输入嵌入到语句中 。在多数 情况中,SQL语句就得以修正 。然后,用户输入就 被限于一个参数 。使用参数化的语句意味着嵌入用 户输入的SQL语句在运行时将被拒绝
S Q L 注入原理
SQL注入攻击是黑客对数据库进行攻击的常用手段之一 。这是 由于相当大一部分程序员在编写代码的时候 , 没有对用户输入数据 的合法性进行判断 , 使应用程序存在安全隐患 。 用户可以提交一 段数据库查询代码 , 根据程序返回的结果 , 获得某些他想得知的数 据 ,这就是所谓的SQL Injection , 即SQL注入 。
2
名])>0 · 猜字段 and (select Count(字段名) from 数据库
名)>0.
在猜不到字段名时 ,不妨看看网站上的登录 表单 ,一般为了方便起见 ,字段名都与表单的输入 框取相同的名字。
· 猜解表里面的字段名称了 and (select count(*) from admin
where len (*)>0)
1
· 使用专业的漏洞扫描工具
如Acunetix的Web漏洞扫描程序等 。一个完 善的漏洞扫描程序不同于网络扫描程序 ,它专门查 找网站上的SQL注入式漏洞 。最新的漏洞扫描程序 可以查找最新发现的漏洞。
SQL注入的原理及防范

SQL注入的原理及防范SQL注入(SQL Injection)是一种常见的安全漏洞,攻击者通过在输入框或URL参数中输入恶意SQL语句来执行未经授权的数据库操作。
SQL注入的原理是攻击者通过构造恶意的SQL语句,将其插入到应用程序的输入参数中,利用应用程序对用户输入数据的信任来获取或修改数据库中的信息。
要防范SQL注入攻击,开发人员和系统管理员需要遵循以下几个原则:1.使用参数化查询:参数化查询是防范SQL注入攻击最有效的方式之一、通过使用参数化查询,可以将用户输入的数据作为参数传递给SQL查询,而不是直接将用户输入的数据拼接到SQL语句中。
这样可以避免攻击者利用恶意SQL语句来执行未经授权的数据库操作。
2.输入验证和过滤:对用户输入数据进行验证和过滤是防范SQL注入攻击的另一个重要措施。
在接收用户输入数据之前,应该对数据进行验证,确保数据格式符合预期,并在需要时进行过滤,去除不安全的字符。
例如,可以使用正则表达式来验证输入数据是否符合特定的格式,或使用内置的函数来过滤危险字符。
3.最小化权限:在数据库的设计中,应该尽量采用最小权限原则,即只给予应用程序访问数据库所需的最小权限。
这样即使攻击者成功注入恶意SQL语句,也只能执行受限的操作,减少损失。
4.错误消息处理:在应用程序中,应该避免直接将数据库错误信息暴露给用户。
攻击者可以通过数据库错误信息来获取有关数据库结构和操作的信息,从而更有针对性地进行攻击。
应该对错误信息进行适当处理,显示友好的提示信息而不是详细的错误信息。
5.定期更新和维护:对应用程序和数据库进行定期的更新和维护也是防范SQL注入攻击的有效措施。
及时修补系统漏洞和更新软件版本可以减少攻击者利用已知漏洞进行注入攻击的机会。
总的来说,防范SQL注入攻击需要开发人员和系统管理员共同努力,采取多种手段综合防范。
只有在建立完善的安全机制和规范的开发流程的基础上,才能有效地防止SQL注入这种常见的安全威胁,保护应用程序和数据库的安全。
SQL注入式攻击及其防范措施研究

SQL注入式攻击及其防范措施研究SQL注入式攻击是一种常见的Web应用程序攻击技术,通过恶意注入SQL语句,攻击者可以绕过应用程序的身份验证和授权机制,获取或修改数据库中的敏感数据。
本文将详细介绍SQL注入式攻击的原理和常见的攻击手段,并提出有效的防范措施。
一、SQL注入原理及其危害1.SQL注入原理SQL注入攻击利用了应用程序未对用户输入的数据进行完全验证和过滤的漏洞。
当用户输入的数据直接拼接到SQL查询语句中时,攻击者可以通过在输入中插入恶意代码,改变SQL查询的逻辑,从而获取或修改数据库中的数据。
2.SQL注入的危害(1)数据泄露:攻击者可以通过恶意注入的SQL语句获取数据库中的敏感数据,如用户的账号、密码、信用卡信息等。
(2)数据修改:攻击者可以修改数据库中的数据,包括删除、修改、添加数据,从而破坏应用程序的功能或篡改系统配置。
(3)绕过身份验证:通过注入的SQL语句,攻击者可以绕过应用程序的身份验证和授权机制,以管理员或其他特权用户的身份执行恶意操作。
(4)拒绝服务:攻击者可以利用SQL注入攻击导致数据库崩溃或系统资源耗尽,从而拒绝正常用户的服务。
二、SQL注入攻击的常见手段1.基于报错的注入攻击攻击者通过输入恶意代码,触发应用程序产生报错信息,从而获取数据库中的信息,如表名、列名等。
常见的攻击代码包括单引号、注释符、SQL语句的拼接等。
2.盲注攻击盲注攻击是一种注入攻击的变种,攻击者无法直接获取数据库的信息,但可以通过不断尝试恶意代码并观察应用程序的响应来判断数据库是否存在漏洞。
常见的盲注攻击包括利用布尔盲注和时间盲注。
3.堆叠查询攻击攻击者利用应用程序允许同时执行多条SQL查询的漏洞,将多条恶意SQL语句堆叠在一起执行,从而获取或修改数据库中的数据。
三、防范SQL注入式攻击的措施1.输入验证与过滤应用程序应对用户的输入进行完全验证和过滤,将用户输入的字符、特殊字符和SQL敏感字符进行转义或替换。
sql注入漏洞

sql注⼊漏洞数据定义语⾔DDL⽤于定义数据库结构,数据操作语⾔DML⽤于对数据库进⾏查询或更新。
⼀、注⼊原理产⽣SQL注⼊漏洞的根本原因在于代码中没有对⽤户输⼊项进⾏验证和处理便直接拼接到查询语句中。
利⽤SQL注⼊漏洞,攻击者可以在应⽤的查询语句中插⼊⾃⼰的SQL代码并传递给后台SQL服务器时加以解析并执⾏。
⼆、寻找注⼊点如果对⼀个⽹站进⾏SQL注⼊攻击,⾸先需要找到存在SQL注⼊漏洞的地⽅,也就是注⼊点。
可能的SQL注⼊点⼀般存在于登陆页⾯、查找页⾯、或添加页⾯等⽤户可以查找或修改数据的地⽅。
寻找注⼊点的思想,就是在参数后插⼊可能使查询结果发⽣改变的SQL代码。
如果插⼊的代码没有被数据库执⾏,⽽是当作普通的字符串处理,那么应⽤可能是安全的,如果插⼊的代码被数据库执⾏了,通常说明该应⽤存在SQL注⼊漏洞。
GET型的请求最容易被注⼊。
通常关注ASP、JSP、CGI或PHP的⽹页,尤其是URL中携带参数的。
1. 单引号法在url参数后添加⼀个单引号,若存在⼀个注⼊点则通常会返回⼀个错误。
2. 永真永假法与上⼀个永真式,逻辑不受影响,页⾯应当与原页⾯相同;与上⼀个永假式,会影响原逻辑,页⾯可能出错或跳转。
三、SQL注⼊1. LOW发现报错,接下来进⾏⾃动化注⼊。
使⽤sqlmap-u url进⾏测试的时候,意味着要访问sqli页⾯,需要通过login.php优先登录,登录后才可以访问。
因此,需要获取登陆权限才可以访问。
在利⽤sqlmap之前,需要打开本地代理服务器,kali⾥,内置了SQLmap、Paros Proxy、Burp Suite等软件),选⽤Pars。
分析源码,可以看到没有对参数做任何的过滤,直接带⼊数据库进⾏查询,分析sql查询语句,可能存在字符型sql注⼊。
判断sql是否存在存⼊,以及注⼊的类型:1' and '1'='1猜解SQL查询语句中的字段数1' order by 2#1' order by 3#从上⾯两个图可以说明,SQL语句查询的表的字段数是2查询当前的数据库,以及版本:1' union select version(),database()#获取数据库中的表:1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#获取表中的字段名:1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#获得字段中的数据:1' union select user,password from users#四、SQL注⼊实践 通过Sqlmapmap进⾏⾃动化注⼊。
SQL注入漏洞的检测方法与修复实例

SQL注入漏洞的检测方法与修复实例随着互联网的发展,数据库安全问题变得越来越重要。
SQL注入是常见的数据库安全漏洞之一,它可以导致数据泄露、篡改或破坏,对个人隐私和商业机密造成严重威胁。
本文将介绍SQL注入的检测方法和修复实例,帮助读者更好地保护数据库安全。
一、SQL注入的概念与原理SQL注入是通过在Web应用程序中注入恶意的SQL代码,从而影响数据库的执行。
攻击者通过构造特定的输入,绕过应用程序的输入验证,将恶意代码作为有效的SQL语句执行。
这样就可以访问、修改或删除数据库中的数据,甚至获取敏感信息。
二、SQL注入的常见类型1. 基于布尔的盲注注入:攻击者通过不断猜测数据库的真假条件语句,逐渐获取数据库的信息。
2. 基于时间延迟的盲注注入:攻击者通过构造特定的SQL语句,使数据库在执行时延迟,从而间接获取信息。
3. 堆叠注入:攻击者在SQL语句中嵌入多个查询,以实现多次执行的效果,进而获取或篡改数据。
4. UNION注入:攻击者利用UNION操作符将恶意代码与正常查询结果进行合并,从而获取额外的信息。
三、SQL注入的检测方法1. 输入验证与过滤:对用户输入进行验证与过滤,确保输入的数据符合预期的格式和内容。
这包括正确使用正则表达式验证、转义特殊字符等。
2. 参数化查询:使用参数化查询方式,在SQL语句执行之前,将输入参数与查询命令分离,确保输入不被当作代码执行。
这样可以有效防止SQL注入攻击。
3. 最小化权限原则:将应用程序连接数据库的账号权限设置为最低权限,确保攻击者无法执行危险的操作。
4. 安全审计日志:记录应用程序的运行日志,包括请求参数、SQL 语句等信息,以便及时检测和追踪SQL注入攻击。
5. 使用WAF(Web应用程序防火墙):配置和使用WAF,可以对HTTP请求进行监控和过滤,防止SQL注入等攻击。
四、SQL注入的修复实例以下是一个常见的SQL注入漏洞修复实例:假设有一个用户登录功能,用户输入用户名和密码进行登录,后台的SQL查询语句如下:```sqlSELECT * FROM users WHERE username='$_POST['username']' AND password='$_POST['password']';```这个查询语句存在严重的SQL注入漏洞,攻击者可以通过构造恶意的输入,绕过登录验证。
sql注入的原理

sql注入的原理SQL注入(Structured Query Language injection)是一种常见的网络攻击手段,它是从Web应用程序中植入恶意SQL代码,利用漏洞在数据库中执行任意查询,从而达到盗取数据或篡改数据的目的。
SQL注入的原理是,当服务器端程序把用户输入的信息作为SQL查询条件,没有对特殊字符进行转义处理时,就会引发SQL注入攻击。
因为攻击者可以向查询中插入任意SQL代码,这样就可以运行非法查询,提取数据库中的数据,造成系统的损坏和数据的泄露。
SQL注入的原理主要分为三个步骤:1. 利用漏洞,插入恶意SQL语句:攻击者可以利用Web应用程序的漏洞,植入恶意SQL语句到Web表单输入域中,2. 破解Web应用程序:攻击者可以破解Web应用程序,从而使得恶意SQL语句能够被执行,3. 横向移动:攻击者可以利用恶意SQL语句来控制数据库,从而横向移动,访问其他数据库中的内容,从而达到盗取数据或篡改数据的目的。
SQL注入攻击的原理是,攻击者通过植入恶意SQL语句,利用Web应用程序的漏洞,破解Web应用程序,从而使得恶意SQL语句能够被执行,从而横向移动,获取数据库中的信息,从而达到盗取数据或篡改数据的目的。
SQL注入攻击是一种及其危险的攻击方式,它不但可以盗取数据库中的数据,还可以篡改数据库中的内容,甚至可以删除数据库中的信息,从而造成严重的安全威胁。
因此,Web开发人员必须采取有效的预防措施,防止SQL注入攻击。
首先,Web开发人员应该对用户输入的数据进行严格的检查和过滤,以确保只有合法的数据被接收,并对特殊字符进行转义处理。
其次,Web开发人员应该使用安全的查询语句,避免使用动态SQL语句,并且充分利用数据库的安全功能,如访问控制、存储过程、触发器等,以防止SQL注入攻击。
最后,Web开发人员应该定期对Web应用程序进行安全测试,以发现潜在的漏洞,并及时修复这些漏洞,以保证Web应用程序的安全性。
SQL注入漏洞原理分析

现在我要告诉大家,我们一直说SQL。到底什么是SQL呢?SQL就是数据库查询语言。他是一种语言,他的作用就是用来查询数据库,简单的有select,update等等
3.SQL注入的危害性
根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQl占了20%,其他的不足10%。
3. 该SQL语句所查询的表中有一名为ID的字段。
从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
第二节、判断能否进行SQL注入
看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?
这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。
数据库查询是select * from 表名 where 字段=49 and [查询语句]
4.sql注入的一般步骤
如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL注入漏洞原理及分析Structured Query Language Injection Principle And Analysis ofVulnerability摘要:注入式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。
这使得攻击者有机会将程序命令当作用户输入的数据提交给We程序,以发号施令,为所欲为。
而且表面看起来注入攻击与一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警告,如果管理员没查看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 查询语句为:如果分别给username和password赋值“admin' or 1=1--”和“aaa”。
那么,SQL脚本解释器中的上述语句就会变为:该语句中进行了两个判断,只要一个条件成立,则就会执行成功,而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 到另一个页面, 进行身份认证, 此时进行身份认证的代码如下:从上面的代码中可以看出, 程序在得到用户的数据之后,没有进行任何的过滤和处理, 直接用来构成SQL 语句, 其危险性是最高的, 攻击者只要根据SQL 语句的编写规则就可以跳过身份认证, 方法如下:攻击者只需在用户名和密码的输入框中都输入" ’o r ’1’=’1"的内容, 那么攻击者就可以不经过不任何认证而直接进入next. asp 页面, 并拥有和正常登陆用户一样的全部特权。
原因是什么呢? 我们比较一下正常用户登陆和攻击者登陆时的两句SQL 语句:a.正常用户(用户名为xxxx, 密码为yyyy)sql= " select from admin where username = ’xxxx’and password= ’yyyy’b.攻击者(用户名和密码都为" ’ o r ’1’= ’1" )sql= " select from admin where username= ’’o r ’1’=’1’and password= ’’ o r ’1’= ’1’可以看到由and 连接的两个条件都被一个永远成立的’1’= ’1’所代替, 执行的结果为真, 因此服务器也会认为条件成立, 于是把login 标志设为true, 让攻击者以合法身份登陆进入index.asp 页面。
根据上述攻击原理,构造不同语句提交实现相同效果的绕过登录认证处理方法,用户名输入'or'='or'字符,密码输入任意字符,实际测试效果图如下:图6-1 登录页面源代码图6-2 登录页面图6-3 绕过身份认证登录管理界面2)加固方法及措施其实解决的办法很简单, 有两种解决的办法:a.通用的办法是对用户提交的数据先进行过滤, 把单引号和双引号全部过滤掉, 再进行SQL 语句的构造, 这样就大大降低了攻击者成功的概率, 具体代码如下:b.第二种办法是把一句SQL 查询分为两句写, 先通过用户名判断数据库中是否存在该用户, 如果不存在, 直接退回登陆界面, 如果存在, 再进行密码的校验工作, 具体代码如下:7.结束语SQL注入漏洞攻击在网上非常普遍,许多ASP、PHP论坛和文章管理系统、下载系统以及新闻系统都存在这个漏洞。
造成SQL注入漏洞攻击的主要原因是开发人员在系统开发的过程中编程不规范,没有形成良好的编程习惯,问题的解决只有依赖于规范编程。
此外,也可以使用现有的SQL注入漏洞扫描器对整个网站中的关键代码进行扫描,查找网站页面中存在的SQL注入点。
对于有问题的页面,可以及时删除或更新。
本文对SQL注入攻击的方法、原理以及攻击实施过程进行了阐述和总结,并给出了常见的一些SQL注入攻击防范方法。
最后总结了一些常用且通用的SQL注入攻击防范方法。
参考文献:[1] 萨师煊、王珊数据库系统概论高等教育出版社(第三版) 2003.3[2] 钟增胜注入漏洞的分析及防范重庆工商大学学报自然科学版2007.12[3] 陈小兵等 SQL注入攻击及其防范检测技术研究论文 2007.2[4] Mike Andrews等 Web入侵安全测试与对策清华大学出版社 2006.10[5] 温鹏滕大鹏仲治国七剑黑客入门工具实例演练100 山东电子音像出版社 2005.10[6] SQL注入攻击及其防范检测技术研究/2008-11/122550263887859_6.html。