SQL Injection(Blind)——黑盒测试

Low级别:

1.来到盲注,直接输入1提交后发现,没有回显数据,而是提示数据存在
在这里插入图片描述
接着我们输入1'提交后发现,提示数据不存在
像这样页面不回显实际数据,只返回一种真和假的状态的就是基于布尔型的盲注
在这里插入图片描述
2.此时在使用基于单引号恒真的payload继续测试
1' and '1可以看到又提示数据存在了
此时SQL语句可能为select column from table where id='1' and '1'
在这里插入图片描述
接着在使用1' and '0测试,又提示数据不存在了
此时可以确定存在基于单引号的布尔盲注
在这里插入图片描述
3.盲注的手法和回显注入不太一样
我们只能构造语句,通过返回信息的正确与否,来判断当前语句返回的信息是否正确
所以我们可以先来判断一下数据库名的长度
Paylaod:1'and length(database())>4#
页面返回了错误说明当前数据库的库名不大于4
在这里插入图片描述
既然不大于4那我们看看是否等于4
Payload:1' and length(database())=4#
可以看到页面提示数据存在了,说明当前数据库的库名长度是4
在这里插入图片描述
4.在判断出数据库的库名长度后,我们又需要构造payload一步一步的判断出当前数据库的库名
这里我们使用left(a,b)函数,代表从左边第1位开始截取字符串a,截取b位
Payload:1' and left(database(),1) > 'a'#
判断当前数据库库名的第1个字符是否大于字符'a'
页面提示数据存在,说明库名的第一个字符确实大于’a’
在这里插入图片描述
接着在判断第一个字符是否大于'd'
Payload:1' and left(database(),1) > 'd'#
页面返回不存在,说明当前数据库的第一个字符不大于字符'd'
在这里插入图片描述
现在我们整理一下前两个条件,当前数据库名的第一个字符大于'a'不大于'd'
说明第一个字符可能是b、c、d当中的任意一个
我们继续尝试判断第一个字符是否等于d
Payload:1' and left(database(),1) = 'd'#
页面显示存在,此时可以确定数据库的第一个字符为d
在这里插入图片描述
5.接着既然是盲注,那我们就盲猜一回(主要是节省篇幅),既然玩的是dvwa靶场
数据库又是以d开头且是4位的,那有没有可能数据库的库名就是dvwa,
Payload:1' and left(database(),4) = 'dvwa'#
可以看到页面返回存在,此时就可以确定数据库的库名为dvwa了,玄学黑客从此冲出软硬两界
下面的步骤就是根据库名结合left函数和Mysql内置库构造出payload,接着猜表名、字段,数据等,我就不再赘述


Medium级别:

1.看见无框,开Bp
在这里插入图片描述
提交,抓包,丢Repeater模块里
在这里插入图片描述
2.重来关闭代理关闭Bp,本着工欲善其事必先利其器的原则,我们换一个工具
这次我们使用Firefox的浏览器插件Hackbar来完成测试,从抓的包中我们可以看出
该请求是POST请求,请求参数为id=1Submit=Submit
打开Hackbar,先点击LoadURL加载当前网页的URL,接着点击Post data填入对应的post请求参数
然后点击Execute提交数据,可以看到页面提示数据存在
在这里插入图片描述
3.接着我们在id参数值后面加上一个单引号测试,可以看到页面提示数据不存在
但是我们还无法判断其注入类型
在这里插入图片描述
继续使用基于单引号恒真payload测试
2' and '1可以看到虽然单引号引发了报错,但实际上并没有影响到原有的语句
在这里插入图片描述
尝试数字型,构造payload为2 and 1可以看到页面返回ID存在了
在这里插入图片描述
我们继续测试恒假的情况,payload为2 and 0可以看到页面提示了数据不存在
至此我们可以看出数字型的注入会影响到页面返回的真假情况,所以可以确定是一个基于数字型的布尔盲注
在这里插入图片描述
4.确定了注入类型,我们就可以使用and length(database())>4#来判断当前数据库的库名长度是否大于4
可以看到报错了说明当前数据库的库名不大于4
在这里插入图片描述
我们继续判断是否等于4构造payload为 and length(database())=4可以看到页面回显了正确
说明当前数据库的库名长度等于4
在这里插入图片描述
5.在确定了数据库的长度我们就需要,测试库名了
使用mid(s,n,len)函数,代表截取字符串s,从n开始,截取len位
构造payload为and mid(database(),1,1) < 'z' #
代表利用mid函数截取当前数据库库名的一个字符并判断其是否大于字符z
因为该payload比较的方式是比较两个字符的ASCII码,正常情况下所有结果都应该小于或等于’z’并返回一个正确
这里却返回了一个错误,说明此条语句可能没有生效,我们猜测它可能对字母进行了过滤
在这里插入图片描述
6.接着我们将字符'z'改为它的ASCII码122来进行比较查看,并且将字符串截取的字符也转成ASCII码payload为
id=1 and ord(mid(database(),1,1)) <= 122#ord函数可以将字符转为ASCII码,而mid函数可以截取到字符
可以看到此时就返回了正确的提示信息,说明代码成功执行了
在这里插入图片描述
接着我们在判断其是否大于字符d,构造payload为
and ord(mid(database(),1,1)) > 100可以看到返回了错误提示,说明不大于字符d
在这里插入图片描述
接着我们看看是否等于d,payload为
and ord(mid(database(),1,1)) = 100可以看到页面返回正确此时就可以确定数据库的第一个字符为d
接下来我们更换mid参数截取第二个字符,进行判断即可,这里我就不再赘述
在这里插入图片描述


High级别:

1.看到无框,开启Bp,开启浏览器代理,输入1提交数据
可以看到数据是通过Cookie进行传参的,此时我们右键数据包将其发送到Repeater模块
在这里插入图片描述
2.此时我们在参数后面加上单引号然后发送,可以看到响应页面返回ID不存在,说明我们输入的单引号可能影响到了系统原有的SQL语句,我们在进一步测试
在这里插入图片描述
构造恒真payload为1' and '1 看到页面返回ID存在
在这里插入图片描述
构造恒假payload为1' and '0可以看到页面返回ID不存在
此时可以确定,存在一个基于单引号的布尔盲注
在这里插入图片描述
2.接着我们使用length()函数判断数据库的库名长度,构造payload为1' and length(database())>4#
可以看到页面提示不存在,说明不大于4
在这里插入图片描述
接着我们在查看是否等于4,paylod为1' and length(database()) =4#页面返回存在,说明当前数据库库名长度为4字节
在这里插入图片描述
3.接着我们使用substr(s,n,len)函数进行测试,字符串s从n的位置开始截取len的长度,构造测试payload为
1' and substr(database(),1,1) <='z'#页面返回存在,说明注入点没有对字符进行过滤
在这里插入图片描述
4.接下来就可以一个字符一个字符的截取,判断了
这里为了节省篇幅,我们盲猜数据库名是dvwa,构造payload为
1‘ and substr(database(),1,4) = 'dvwa '#页面返回正确说明数据库的库名为dvwa,从此盲猜黑客一战成名
接下来我们就可以根据库名+内置库+截取字符串函数的方法继续判断表名,字段名,数据了
在这里插入图片描述

  • 17
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newC0mer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值