分类学习有利于条理化知识,大致的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. Caffe学习系列(4):激活层(Activiation Layers)及参数

    在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...

  2. [MetaHook] Load DTX texture to OpenGL

    This function load a LithTech *.dtx texture file and convert to OpenGL pixel format, compressed supp ...

  3. 疯狂位图之——位图生成12GB无重复随机乱序大整数集

    上一篇讲述了用位图实现无重复数据的排序,排序算法一下就写好了,想弄个大点数据测试一下,因为小数据在内存中快排已经很快. 一.生成的数据集要求 1.数据为0--2147483647(2^31-1)范围内 ...

  4. java中的静态代码块、构造代码块、构造方法

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  5. SQL Serve允许远程连接的解决方法

    (一)用户需要做的第一件事是检查SQL数据库服务器中是否允许远程链接.在SQL 2008服务器中可以通过打开SQL Server 2008管理项目(SQL Server 2008 Management ...

  6. IT男的”幸福”生活"续1

    IT男的”幸福”生活"续1 我和LL开始下步追妹计划...... 知彼知已,方能把握机会.没想到孙子兵法太给力了,据LL了解,MM(她)是湖北人,找对象一般不会考虑外省的.高度165左右,相 ...

  7. 微信小程序开发公测,小程序账号申请办法攻略

    11月3号晚上 10 点,微信公众平台发布公告,宣布微信小程序正式开放公测.此次小程序公测允许开发者将产品提交至微信公众平台审核,但是暂时不支持发布,也就是说普通消费者若想体验小程序,还需要等待一段时 ...

  8. tsql的奇特语法

    也许是离开t-sql太久了,突然发现很多t-sql的奇特语法 用一句sql解决多种排序: ; SELECT C1, C2 FROM T ORDER BY THEN C1 END ASC, THEN C ...

  9. css清楚浮动的几种常用方法

    请先看博客:http://www.jb51.net/css/173023.html

  10. Linq之IQueryable接口与IEnumberable区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IEnumerable 包含 ...