Linux反汇编定位漏洞的实用流程
一 准备与信息收集
二 静态反汇编分析
三 动态调试与系统调用追踪
四 常见漏洞模式与识别要点
| 漏洞类型 | 汇编/调用特征 | 快速验证思路 |
|---|---|---|
| 栈溢出 | 大量字节拷入栈上缓冲(如 rep movsb/cmpsb、带立即数的 mov/lea + add rsp, imm;函数尾声 leave; ret) | 在复制/处理输入后下断点,检查RSP附近数据是否被覆盖;用gdb构造长输入观察是否改写返回地址 |
| 格式化字符串 | 调用 printf(fmt, …) 且 fmt 来自用户输入 | 在 printf 前打印 fmt 内容;尝试 %x/%p/%s 泄露栈;观察是否可写任意地址 |
| 整数溢出/环绕 | add/sub/mul 后未检查,随后用于分配/拷贝长度 | 在算术指令后查看标志与结果;尝试极大/极小数值触发分配异常或截断 |
| 命令注入/不安全调用 | 调用 system/execve 且参数拼接自用户输入 | 在调用前打印参数;尝试注入 ; id、&& cat /etc/passwd 等验证执行 |
| 堆溢出/Use-After-Free | 大量 malloc/calloc/realloc/free 与指针运算,或 free 后继续使用 | 在 free/use 点下断点,检查指针是否仍被解引用或进入可疑重用路径 |
| 以上模式在反汇编中常以“危险函数名 + 长度/格式/指针参数来自外部输入”的组合出现,结合CFG/污点与动态断点可快速确认。 |
五 报告与修复建议