01SQL注入漏洞基础

合集下载

1.1SQL注入漏洞原理及测试方法

1.1SQL注入漏洞原理及测试方法
13
判断注入方式
内联式SQL注入 内联注入是指查询注入SQL代码后,原来的查询仍然 全部执行
Sqlstr = "select * from admin where username = '"+username+"' and password = '"+password+"'" username = "' or ''='" password = "' or ''='"
§ 万能列类型:
• 大部分数据库中NULL可兼容任何类型的数据,所有可使用NULL 匹配数据表的列类型
§ 确定列数量:
• 使用union select null,null,null,…,null from dual逐步增 加null数量,直到匹配原语句的列数量,成功匹配后返回正常 页面 • 使用order by 确原语句列数量, 可使用折半查找法提高猜测 效率
注入方法(union)
v 使用union获取数据规则
§ 两个查询返回的列数必须相同。 § 两个SELECT语句返回的数据库对应的列必须类型 相同或兼容 § 通常只有终止式注入时,可较快猜解并利用,否 则要知道原始的SQL语句才能比较方便的利用
注入方法(union)
v Union语句的构建
识别数据库类型
v 使用字符连接方式判断数据库类型
§ MSSQL数据库
http://host/test.php?id=100 and ‘1’+’1’=‘11’ § MySql数据库 http://host/test.php?id=100 and ‘1’+’1’=‘11’ http://host/test.php?id=100 and CONCAT(‘1’,’1’)=‘11’ § Oracle数据库 http://host/test.php?id=100 and ‘1’||’1’=‘11’ http://host/test.php?id=100 and CONCAT(‘1’,’1’)=‘11’

安全测评漏洞分析报告

安全测评漏洞分析报告

安全测评漏洞分析报告安全测评漏洞分析报告一、漏洞描述通过对目标系统进行安全测评,发现以下漏洞:1. SQL注入漏洞:存在SQL注入漏洞,攻击者可以通过构造恶意的SQL语句,绕过应用程序的验证机制,直接操作数据库,获取敏感信息或进行非法操作。

2. XSS跨站脚本攻击漏洞:存在未对用户输入进行过滤和转义处理的情况,攻击者可以通过在页面中注入恶意的脚本,窃取用户的敏感信息,或进行其他恶意操作。

3. 文件上传漏洞:存在未对上传文件进行有效的验证和限制的情况,攻击者可以上传恶意的文件,包括木马程序或向量图等,进行远程执行恶意代码或窃取敏感信息。

二、风险分析1. SQL注入漏洞带来的风险:攻击者通过利用SQL注入漏洞,可以绕过用户身份验证,获取数据库中的敏感信息,如用户密码、用户私密数据等。

攻击者还可以通过修改数据库的内容,执行恶意操作,如删除数据、篡改数据等。

2. XSS跨站脚本攻击漏洞带来的风险:攻击者通过注入恶意的脚本代码,可以窃取用户的敏感信息,如用户的登录凭证、用户的个人信息等。

攻击者还可以通过恶意脚本代码进行钓鱼操作,如欺骗用户输入敏感信息或下载恶意软件等。

3. 文件上传漏洞带来的风险:攻击者通过上传恶意文件,可以在目标服务器上执行任意的恶意代码。

攻击者可以窃取服务器上的敏感信息,如用户私密数据、数据库信息等。

攻击者还可以利用上传的恶意文件,在服务器上进行远程控制,进行其他恶意操作。

三、修复建议1. SQL注入漏洞修复建议:应使用参数化查询和输入过滤来防止SQL注入攻击。

对于用户输入的数据,应使用数据库提供的参数化查询功能,避免将用户输入直接拼接到SQL语句中。

同时,还应对用户输入进行严格的过滤和校验,确保输入的数据符合预期的格式和范围。

2. XSS跨站脚本攻击漏洞修复建议:应对用户输入进行有效的过滤和转义处理。

在展示用户输入的内容时,应将特殊字符进行转义,避免被当做脚本执行。

同时,还应限制用户输入的规范,在输入框中禁止输入HTML标记和JavaScript代码。

sql注入盲注的原理

sql注入盲注的原理

sql注入盲注的原理
SQL注入是一种攻击技术,利用应用程序对用户输入的数据未经充分过滤或验证就直接拼接到SQL查询语句中的漏洞,从而使攻击者能够执行恶意数据库操作。

盲注是SQL注入的一种特殊形式,它在注入过程中无法直接获取数据库返回的具体数据,而只能通过观察页面的响应时差或者不同的错误信息来判断注入是否成功。

以下是盲注攻击的原理:
收集信息:攻击者首先需要识别目标应用程序中可能存在SQL注入漏洞的参数,如URL参数、表单输入等。

探测注入方式:通过插入特定的SQL语句,如' OR 1=1--,或者' OR 'a'='a',来探测是否存在SQL注入漏洞。

如果应用程序返回了预期结果或者显示了异常错误信息,则可以认为存在注入漏洞。

盲注攻击:一旦确认注入漏洞存在,攻击者可以使用盲注技巧进行进一步攻击。

盲注通常涉及使用布尔逻辑和条件测试结构,来推断数据库中的信息。

攻击者通过构造不同的SQL语句,根据页面的响应时差或者错误信息的变化来判断特定条件是否成立。

数据库探测:攻击者可以使用盲注来探测数据库的结构,如表名、列名、数据库版本等。

通过不断提交特定的SQL语句并观察结果,可以逐步获取有关目标数据库的信息。

数据提取:利用盲注漏洞,攻击者也可以尝试从数据库中提取敏感数据,如用户名、密码等。

通过构造合适的SQL语句,攻击者可以获取目标数据并进行进一步的滥用。

为了防止SQL注入盲注攻击,开发人员需要采取安全编码实践,如使用参数化
查询、输入验证和过滤,以及最小权限原则等方法来保护应用程序免受此类攻击的影响。

SQL注入漏洞原理及分析

SQL注入漏洞原理及分析

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)外部攻击主要是由于网络漏洞被利用或者用户受到恶意程序制定者的专一攻击。

代码审计中的SQL注入

代码审计中的SQL注入

代码审计中的SQL注⼊0x00 背景SQL注⼊是⼀种常见Web漏洞,所谓SQL注⼊,就是通过把SQL命令插⼊到Web表单提交或输⼊域名或页⾯请求的查询字符串,最终达到欺骗服务器执⾏恶意的SQL命令。

本⽂以代码审计的形式研究SQL注⼊原理、挖掘形式、防御⽅案及缺陷。

0x01 SQL注⼊产⽣原理SQL注⼊与其他常见Web漏洞⼀样,均是由外部可控的参数引起的。

由于程序没有经过任何过滤就将外部可控的参数拼接进⼊SQL语句,直接放⼊数据库执⾏,达到了欺骗服务器执⾏⿊客恶意SQL命令的⽬的。

在这⾥我们采⽤DVWA中low级别的源码学习SQL注⼊的产⽣原理。

<?phpif( isset( $_REQUEST[ 'Submit' ] ) ) {// Get input$id = $_REQUEST[ 'id' ];// Check database$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false) // Get resultswhile( $row = mysqli_fetch_assoc( $result ) ) {// Get values$first = $row["first_name"];$last = $row["last_name"];// Feedback for end userecho "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}mysqli_close($GLOBALS["___mysqli_ston"]);}> 在这⾥我们注意到变量id是由⽤户进⾏掌控的变量,⽤户所输⼊的id值并没有进⾏任何的过滤,直接拼接到SQL语句中执⾏,我们重点关注这条SQL语句:$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; 此处,如果我们所输⼊的变量id为1' or 1=1 or '1,那么此条SQL语句就变为了:$query = "SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1 or '1';"; 这样,数据库就会根据上⾯这条语句执⾏操作,这就是SQL注⼊漏洞的产⽣原理。

SQL注入漏洞原理分析

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服务器错误,不能获得更多的提示信息。

常见sql注入的类型

常见sql注入的类型

常见sql注⼊的类型这⾥只讲解sql注⼊漏洞的基本类型,代码分析将放在另外⼀篇帖⼦讲解⽬录最基础的注⼊-union注⼊攻击Boolean注⼊攻击-布尔盲注报错注⼊攻击时间注⼊攻击-时间盲注堆叠查询注⼊攻击⼆次注⼊攻击宽字节注⼊攻击base64注⼊攻击cookie注⼊攻击-http请求头参数注⼊XFF注⼊攻击-http请求头参数注⼊知道绝对路径的注⼊0x01最基础的注⼊-union注⼊攻击1. 判断是get型还是post型注⼊;2. 找到正确的闭合规则;3. order by 查询字段数;4. union select 1,2.....查看显⽰位是第⼏位,没有的话就试试把id=1的显⽰位让出来,让其等于id=-1;5. 第⼆、三位显⽰出来了,那么即可在这两个位置写⼊sql语句;6. 查询当前数据库,当前mysql⽤户 union select 1,user(),database();7. 查询当前数据库⾥⾯的表 union select 1,2,group_concat(table_name) from information_schema.tables wheretable_schema="data_name";8. 查询到敏感表名user,继续查询表⾥⾯的字段 union select 1,2,group_concat(column_name) from information_schema.columnswhere table_name="user";9. 查询字段,例如“id”、"passwd"的内容 union select 1,id,passwd from user;10. 拿到⽤户、密码登⼊后台。

0x02 Boolean注⼊攻击-布尔盲注查看现象,能报错,但没有报错信息,正确查询也显⽰不了查询内容就属于布尔盲注,只存在两种状态,对或错;由页⾯的两种不同返回的状态来判定我们的闭合规则;为了⽅便,我们这⾥假设返回正确⽤“yes”,返回错误⽤“no”来表⽰这两种状态找到闭合规则后,我们在闭合规则⾥⾯ and 1=1 和 and 1=2 测试⼀下,看看最后返回是不是两种状态;布尔盲注要⽤到length()和substr()语句,⽤两种状态来猜解数据库、表名等的长度和正确字母;先⽤ and length(database())>2来猜数据库的长度,使⽤的是⼆分法;再⽤ and substr(database(),1,1)='t'来确定第⼀个字母,可⽤burp跑,26个字母,哪个字母返回yes则代表第⼀个字母就是它;and substr(database(),2,1)='t' 代表当前数据库的第⼆个字母;最后结合长度,成功的将数据库猜解出来;后⾯的操作跟union注⼊的步骤差不多了,只是sql语句写在上⽂的 database() 处。

SQL注入漏洞

SQL注入漏洞

SQL注⼊漏洞SQL注⼊:web程序对⽤户输⼊数据的合法性没有判断,前端传⼊后端的参数可控的,并且参数带⼊数据库查询,攻击者可通过构造SQL语句来实现对数据库的任意操作。

1.sql注⼊原理满⾜条件:参数⽤户可控:前端传⼊后端的内容⽤户可以控制参数带⼊数据库查询:传⼊的参数拼接到SQL语句,且带⼊数据库查询。

原因:⽤户输⼊的数据被SQL解释器执⾏2.注⼊漏洞分类1)数字型注⼊当输⼊的参数为整型时,如:ID、年龄、页码,若存在注⼊漏洞,则可认为是数字型测试:单引号 and语句(1 and 1=1 , 1 and 1=2),若以上三个步骤全部满⾜,则可能存在SQL注⼊漏洞数字型注⼊常出现在ASP、PHP等弱类型语⾔。

强类型语⾔,若试图把⼀个字符串转换为int类型,会抛出异常,⽆法继续执⾏。

2)字符型注⼊当输⼊参数为字符串时,称为字符型。

数字型与字符型注⼊最⼤的区别:数字型不需要单引号闭合,⽽字符型⼀般使⽤单引号来闭合。

字符型注⼊最关键的是如何闭合SQL语句以及注释多余的代码。

注:数据库不同,字符串连接符不同, SQL server的连接符为“+”,Oracle连接符为“||”,MySQL连接符为空格3)SQL注⼊分类SQL只分为两类数字型和字符型。

其余注⼊都是在其两⼤类的不同展⽰形式,或者不同的展现位置。

由于数据库进⾏数据查询时,输⼊数据⼀般有两种:⼀种数字型,⼀种字符串型. 严格来说:数字也算字符串post注⼊:注⼊字段在post数据中(post请求中username字段存在注⼊漏洞)get注⼊:注⼊字段在get数据中cookie注⼊:注⼊字段在cookie数据中延时注⼊:使⽤数据库延时特性注⼊(sleep函数)搜索注⼊:注⼊处为搜索的地点base64注⼊:注⼊字符串需要经过base64加密3.常见的数据库注⼊数据库注⼊的利⽤⽅式:查询数据、读写⽂件、执⾏⽂件mysqlmysql数据库 5.0之后,默认在数据库存放 information_schema 的数据库,在该库中存在三个表名schemata 表⽰存储⽤户创建的所有数据库的库名tables 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

询字符串参数、post表单数据、cookie数据,post表单数据往往还包
含一些隐藏字段。
SQL注入渗透测试框架
确定可测试点是否是可注入点 确定可测试点是否是可注入点,是SQL注入渗透测试最重要的一个环节
。确定的依据主要有两种,一种是依据用户输入数据是否会导致应用
程序出现SQL语法错误,另一种是依据用户输入数据执行的差异性。
说明:第一行代码获取HTTP请求的查询字符串数据(外部数据)id, 并把该id直接用于SQL语句拼串,这样对用户数据没有过滤,导致了 SQL注入漏洞。
SQL注入攻击分类
SQL注入攻击分类
区分数字和字符串 要想构造有效的SQL注入语句,需要对SQL语言有基本的了解。执行SQL
注入利用,首先要清楚数据库包含不同的数据类型,他们都具有不同
SQL注入渗透测试框架
执行系统命令 MSSQL的xp_cmdshell扩展
ORACLE的JAVA存储过程
SQL盲注入
SQL盲注入
一般推断技术:分两步,第一步推断某个要探测的数据的长度N;第 二步推断N个字节的值。第一步推断长度是非常重要的,如果没有推 断出长度,就无法确定第二步要推断多少个字节的值。以推断用户名 为例它的推断公式是:
是一个MSSQL基于错误的攻击探测方法:
- /sql.asp?id=12/is_srvrolemember(‘sysadmin’);
说明:is_srvrolemember是MSSQL用于探测当前数据库用户是否拥有固定 数据库角色,如上面请求,如果用户有sysadmin数据库角色,函数返回1 ,没有返回0。类似的函数还有is_member、has_dbaccess。基于错误的 方法还可以结合基于条件的攻击手法一起使用,如下请求: /sql.asp?id=12/(case when (system_user=’sa’) then 1 else 0 end);
end);
说明:与基于错误的唯一差别是用%2B替换了‚/‛字符。%2B是‚+‛的 URL编码。
SQL注入攻击分类
特定数据库的攻击 PL/SQL对于Oracle就像T-SQL对于MSSQL一样,它们都是对标准数据查
询语言(SQL)的扩展。PL/SQL不是一个独立的产品,它是一个整合到
Oracle服务器和Oracle工具中的技术,可以把PL/SQL看作Oracle服务 器内的一个引擎,SQL语句执行者处理单个的SQL语句,PL/SQL引擎处
SQL注入漏洞基础
王朋涛 深信服北京安全团队
培训提纲
1.SQL注入背景简介
2.SQL注入攻击原理
3.SQL注入分类
4.SQL注入渗透测试框架 5.SQL盲注入 6.SQL登录绕过攻击 7.总结
SQL注入背景介绍
SQL注入背景简介
什么是SQL? SQL=Structured Query Language 结构化查询语言
- and (select length(sys_context('userenv','current_user')) from dual)=d,d是整数 - and (select substr(sys_context('userenv','current_user'),i,1)
from dual)= 'w',i取0..N-1,w取A-Z,a-z,0-9,_
还还有一些基本
信息需要探测清楚,包括当前用户名、当前用户权限、当前数据库名 、当前数据库表信息、当前数据库列信息。
- 爆破(access)
- 全局变量@@version @@servername(MSSQL) - 特有函数db_name()(MSSQL) - 数据库系统元数据信息(mssql、mysql、oracle)
SQL语言提供了我们访问操作数据库的能力,分为:
- DML(Data Manipulation Language,数据操作语言) - DDL(Data Definition Language,数据定义语言) - DCL(Data Control Language,数据控制语言) - DQL(Data Query Language,数据查询语言)
- /sql.asp?id=1 union select #MYSQL
if(substring(user(),1,4)=’root’,sleep(5),1); - select utl_http.request(‘http://10.0.0.1’) from dual;
- select HTTPURITYPE(‘http://10.0.0.1’).getclob() from dual;
内联和终止 内联注入是指向查询注入一些SQL代码后,原来的查询仍然会全部执行

注入
原来的SQL语句
注入后的SQL语句
SQL注入攻击分类
内联和终止 终止式注入是指攻击者在注入SQL代码时,通过注释剩下的查询来成功
终止了SQL语句。除终止了该语句外,还需要注释剩下的查询以使其不
会被执行。
注入
原来的SQL语句
SQL注入攻击分类
按攻击方法划分 基于内容,基于错误的方法可能会触发许多不需要的错误,基于内容
的攻击手法是对基于错误的方法的改进,它避免了错误的产生,通过
不同的响应来判断信息位。
- /sql.asp?id=12%2B(case when (system_user=‘sa’) then 1 else 0
以通过为每个用户赋予指定的权限来管理并控制其对存储信息的访问
。如我们攻击的后台DBMS可能包含多个数据库,但执行查询的用户可 能只能访问其中的某一个,该数据库可能并未包含我们想要的信息。
还有可能用户只能读取数据,而我们测试的目的是检查是否能够以未
授权的方式修改数据。换言之:执行查询的用户只是一个普通的用户 ,其权限远低于DBA。这时就需要提权,不同数据库的提权方式也是不 同的,大体可分为一下类别:
SQL注入渗透测试框架
爆取数据库数据 利用SQL注入漏洞爆取数据库数据,是SQL注入攻击的最直接的价值体
现。有了基本信息探测阶段探测的数据库表信息与数据库列信息,爆
取数据库数据是水到渠成的事情。直接构造SQL语句‚select 列名 from 表名‛爆取数据。
SQL注入渗透测试框架
提权 所有现代DBMS均为其管理员提供了对用户可执行操作的细微控制,可
注入后的SQL语句
SQL注入攻击分类
常规注入和盲注入 常规注入是指攻击者通过构造一系列有目的、有规律的HTTP请求,从
返回的HTTP响应中直接提取数据库数据的攻击。常规注入之所以称为
常规是由于它的普遍性、适用性,它最主要的一个特点是请求返回的 响应可以‚直接‛获取想要的数据。
SQL注入攻击分类
黑客们发现通过SQL注入攻击,可以获取很多重要的、敏感的数据,甚 至能够获取系统访问权限,这种效果并不比直接攻击系统软件差,Web 攻击一下子就流行起来。
SQL注入攻击原理
SQL注入攻击原理
Web应用工作原理
SQL注入攻击原理
Web应用工作原理
SQL注入攻击原理
攻击原理 注入攻击的根源在于用户数据与程序代码没有分离,使得攻击者有机
- 单引号测试
- and 1=1与and 1=2测试
SQL注入渗透测试框架
数据库类型探测 发现了SQL注入漏洞相当于找到了切入点,对于攻击者没有任何意义,
对于渗透测试人员没有令人信服的凭证,所以万里长征要想取得成功
,我们还需一步步走。如果说发现SQL注入漏洞为我们指明了革命的方 向,那么探测清楚数据库类型就是革命的路线方针,它可以让我们在
SQL注入渗透测试框架
SQL注入渗透测试框架
SQL注入渗透测试框架
收集应用程序可测试点 应用程序可测试点指的是Web应用程序页面中用户可控数据的入口点。
用户通过入口点输入的数据,如果没有经过验证过滤而被用于操作数
据库,就有可能存在SQL注入漏洞。所以在收集可测试点的过程中,应 尽量确保覆盖范围,不遗漏每一个可测试点。常见的可测试点有url查
SQL能够:
- 执行对数据库的查询,DQL - 插入修改删除数据库数据,DML - 定义数据库实体对象结构,DDL - 设置或更改数据库用户角色权限信息等,DCL
SQL注入背景简介
产生背景 SQL注入的出现是Web安全史上的一个里程碑,它大概出现在1999年,
并很快就成为Web安全的头号大敌。
会将程序代码当作用户输入数据提交给Web应用程序执行。SQL注入作
为注入攻击的一种,Web应用程序动态生成SQL命令时没有对用户输入 的数据进行验证过滤,使得用户输入的SQL语句得以执行。
SQL注入攻击原理
示例代码
id =
request.QueryString(‚id‛);
set rs = server.createobject(‚adodb.recordset‛); sql = ‚select * from admin where id=‛&id;
常规注入和盲注入 与常规注入相比,盲注就是一种非常规注入,它不能从HTTP请求返回
的响应中直接提取想要的数据,但是可以利用多个请求响应的细微差
别间接推断出数据库数据。
SQL注入攻击分类
按攻击方法划分 基于时间,基于WEB应用响应时间上的差异来寻找利用SQL注入漏洞
- /sql.asp?id=1;if+(system_user=’sa’)+waitfor+delay+’0:0:5’-- /sql.asp?id=1 union select if(substring(user(),1,4)=’root’,benchmark(100000000,rand()),1);
相关文档
最新文档