earph0n3's doc Help

sql布尔盲注

使用的工具:

sql注入中的布尔盲注主要通过对数据库字段中的每一个字符的ascii值进行匹配, 直到结果为真时结束匹配, 最后达到爆破字段内容的目的

这里以长城杯2024的sxmisc为例:

流量附件

wireshark打开, 导出http对象:

1

发现很长的url, 语法明显是sql语句, 再看末尾:

1

末尾以tQlu这种无意义四个字母结束, 一般为sql布尔盲注特征, 以每个四个字母结尾的为一组注入流量

分析时需要将每一组的所有流量提取出来解析

提取url

先过滤所有的访问url并排除所有的返回包:

http.request.uri and not http.response

导出分组解析结果时勾选只保留概要行:

1

得到所有的访问url(导出的文件建议用 emeditor 打开):

1

将整个文件进行url解码得到可读性更高的内容:

1

同样以 tQlu 分组为例, 可以看出当前组正在从 accounts 表中爆破 priv_key 字段

红框标注出的变化的内容为当前爆破的字段的第 n 个字符, 蓝框标注出的内容为尝试爆破的字符的ascii值

一般情况下爆破每个字符的最后一次尝试为正确的内容(前提是这次操作是成功的)

提取成功操作的url

在操作过程中有些注入是不成功的, 一般通过返回内容的长度来判断是否成功, 查看返回包长度, 这里有两个, 245和198:

1
1

成功操作一般就是其中一个, 这里是198, 因为这里245返回的都是同一个内容, 而198操作中没有回显(这个判断一般根据具体情况), 不好判断可以两个都试一下

直接过滤这一组的所有content_type为198的的包:

http.request.uri contains "tQlu" and http.content_length == 198

将分组解析结果作为json导出得到内容:

1

找到其中的请求url部分, 使用正则表达式对其进行提取:

1

选中 "http.request.full_uri" (提前勾选正则表达式选项), 按下 ctrl + F 在自动生成的表达式后加上 .*, 全部选择, 选择后可以右键对所有的匹配项进行复制并粘贴到新文件中 下面是粘贴后并进行url解码的内容:

1

同样可以使用正则或替换功能将无关信息删除, 处理为下面的格式:

n, char

n 代表上一节中红框标出的内容, char 代表上一节中蓝框标出的内容:

1

python处理

编写一个简单的脚本对最后的数据进行解析, 目的是找到每个n的最后一行(仅作示范)

# 定义一个初始的n值 num1 = 1 # 打开并读取文件 with open("1.txt", 'r') as f: # 对于每一行 for line in f.readlines(): # num2为读取到文件中的n值 num2 = line.split(",")[0] # 判断初始n是否与读取到的n相同 # 如果上一行的n和这一行的n相同就跳过并保留下一行 if num1 == int(num2): # line_up用于标记上一行的内容 line_up = line continue # 如果num1和现在读到的num2不同, 比方说num1是1现在读到了2 # 那么就把上一行(也就是1的最后一一行)的char打印出来 else: try: print(chr(int(line_up.split(",")[1])), end='') num1 += 1 except Exception: pass

最后就可以得到这一组爆破的字段内容:

1

具体的flag需要结合题目具体分析

总结

整个流程大致就是上面的内容, 由于注入的url等信息会根据使用的工具和不同数据库改变, 也为了方便理解每一个步骤, 这里并没有直接贴出通杀脚本, 更方便的脚本可以根据自己的理解去编写

17 十二月 2024