分类学习有利于条理化知识,大致的SQL注入分为三种:
1.BealeanBase
2.TimeBase
3.ErrorBase

1.从最简单的说起,基于布尔类型是最常见的SQL注入方式

select username, password from tb_admin where username= User and password = Pass;
这句话如果被运用的提取验证数据中,就会有布尔注入的漏洞具体如下
'select username, password from tb_admin where username='+ User +'and password =' + Pass;
看似上面出入的规范的用户名和密码都会有正确查询发生,并且都都是准确反映数据库的数据值的查询,但是如果我传入的参数如下

用户名输入:1' or '1'='1
密码: 1' or '1'='1

这样嵌入到原来的语句中就是'select username, password from tb_admin where username='1' or '1'='1' and password ='1' or '1'='1';

这样select 中就 or 了一个 永真式,这样select 返回的结果就是永真,进一步通过验证,然而事实上这种基于布尔的SQL注入越来越少了,因为
只有初学者才会这样做,但是这个原理还是要知道的。

注入原因:用户输入参数未经过验证,直接拼接入SQL查询,造成用户精心提交的数据被当作代码执行,进一步达到绕过验证的目的
解决办法:不要相信用户的任何输入,所有用户输入都要经过转义再使用

2.基于时间的注入:
这种办法就有点猥琐了,根据题目就知道这是要依据返回时间来判断执行结果的,但是如果网络状况不好那就不好判断了
就mysql 而言,涉及到的两个函数是sleep() 和 benchmark(), 但是后者占用CUP较高,所以不建议使用

Syntax:
SLEEP(duration)

Sleeps (pauses) for the number of seconds given by the duration
argument, then returns 0. If SLEEP() is interrupted, it returns 1. The
duration may have a fractional part given in microseconds.

看了sleep() 的语法就知道了,就是一个延时执行的效果

FIND_IN_SET(str,strlist)

Returns a value in the range of 1 to N if the string str is in the
string list strlist consisting of N substrings. A string list is a
string composed of substrings separated by "," characters. If the first
argument is a constant string and the second is a column of type SET,
the FIND_IN_SET() function is optimized to use bit arithmetic. Returns
0 if str is not in strlist or if strlist is the empty string. Returns
NULL if either argument is NULL. This function does not work properly
if the first argument contains a comma (",") character.

这个函数是在strlist中找str的过程,返回找到的个数

3.基于报错的盲注
就是通过网站显示的数据库等错误信息来进行逐步深入,当用二分查找得出一个32位哈希值的时候需要16×32=512次(十六进制的哈希字符,一共有16种可能),但是也有些
可以减少查询次数的方法,已知英语中字母出现次数的概率是:e,t,a,o,i,n,s,h,r,d,l,c,u,m,w,f,g,y,p,b,v,k,j,x,q,z
根据前后的顺序尝试然后再进行二分查找,这样的效率就高很多了

这个是基于复制入口点的报错
select 1,2 union select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x;
/* SQL错误(1062):Duplicate entry '5.5.171' for key 'group_key' */

如果关键表被禁用了,还有这样的错误可以触发:
select count(*) from (select 1 union select null union select !1) group by concat(version(),floor(rand(0)*2))
/* SQL错误(1248):Every derived table must have its own alias */

如果是rand()等一些关键函数被禁用了,还可以这样:
select min(@a:=1) from information_schema.tables group by concat(password,@a:=(@a+1)%2)
/* SQL错误(1054):Unknown column 'password' in 'group statement' */

上面这些都是Mysql的数据库设计的问题,所以上面的语句不适用其他数据库。

在Mysql 5.1以及后面的版本都是新加了两个xml函数,可以拿来报错:
extractvalue(),updatexml()

而在其他数据库中也可以使用不同的方法构成报错
PostgreSQL: /?param=1 and(1)=cast(version() as numeric)--
MSSQL: /?param=1 and(1)=convert(int,@@version)--
Sybase: /?param=1 and(1)=convert(int,@@version)--
Oracle >=9.0: /?param=1 and(1)=(select upper(XMLType(chr(60)||chr(58)||chr(58)||(select
replace(banner,chr(32),chr(58)) from sys.v_$version where rownum=1)||chr(62))) from dual)--

SQL注入小结的更多相关文章

  1. 防止SQL注入攻击的一些方法小结

    SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...

  2. SQL注入原理小结

    今天,一基友问我一个问题说:为什么SQL注入要加单引号,这个当时我一时也回答不上,怪就怪自己理论太菜,不过回去仔细思考了一下,觉得这个问题也是蛮简单的. 首先大家应该明白的一点就是SQL注入的目的:加 ...

  3. DVWA之SQL注入考点小结

    SQL Injection SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的.SQL注入漏洞的危害是巨大的,常常 ...

  4. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  5. 嗅探、中间人sql注入、反编译--例说桌面软件安全性问题

    嗅探.中间人sql注入.反编译--例说桌面软件安全性问题 今天这篇文章不准备讲太多理论,讲我最近遇到的一个案例.从技术上讲,这个例子没什么高深的,还有一点狗屎运的成分,但是它又足够典型,典型到我可以讲 ...

  6. 深入了解SQL注入绕过waf和过滤机制

    知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...

  7. JAVA jdbc(数据库连接池)学习笔记(二) SQL注入

    PS:今天偶然间发现了SQL的注入...所以就简单的脑补了一下,都是一些简单的例子...这篇写的不怎么样...由于自己没有进行很深的研究... 学习内容: 1.SQL注入的概念...   所谓SQL注 ...

  8. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. Web安全 之 SQL注入

    随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...

随机推荐

  1. Integrating JAD decompiler into JDeveloper(转)

    原文地址:Integrating JAD decompiler into JDeveloper In JDeveloper, when debugging or otherwise navigatin ...

  2. XML CDATA的作用

    操作XML文件时,如果允许用户输入内容,例如∶"< ".">"."/".""等,当生成XML时,会破坏了XM ...

  3. [Android] 【视频】黑马安卓62、66期等教程+源码

     下载地址:http://fu83.cn/thread-58-1-1.html

  4. matlab绘制二维图形

    常用的二维图形命令: plot:绘制二维图形 loglog:用全对数坐标绘图 semilogx:用半对数坐标(X)绘图 semilogy:用半对数坐标(Y)绘图 fill:绘制二维多边填充图形 pol ...

  5. js字符串截取函数slice()、substring()、substr()

    摘要 在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与 ...

  6. wifi使用的一些误区

    下面是使用过程中的一些常用的误区: 家里买了三个路由器,信道都设置成同一个,这样会比较好. 买多个路由器的时候,一个人用的时候还好,多个人用的时候就会出问题. 多个设备在同样信道的时候会产生干扰.建议 ...

  7. Spring Cache和MyBatis的使用

    1.http://www.importnew.com/22757.html    spring chache缓存的使用. 2.http://www.importnew.com/22783.html   ...

  8. 解决方法:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    win7或win8 64位调试程序,出现这样的错误提示:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序 解决方法如下: 方法一:“设置应用程序池默认属性”/“常规”/” ...

  9. ionic 设置logo 与 设置 启动页

    1.在项目的根目录下创建resources文件夹. 2.在文件夹中都放入icon.png(应用图标,最小192x192px,不带圆角),splash.png(启动屏幕,最小2208x2208px,中间 ...

  10. android之文件存储和读取

    一.权限问题 手机中存储空间分为ROM和SDcard,ROM中放着操作系统以及我们安装的APP,而sdcard中一般放置着我们APP产生的数据.当然,Android也为每个APP在ROM中创建一个数据 ...