SuperAPI AI 工具集

format-string-exploitation

通用与其它

查看项目

更新于 10-15 21:53

技能介绍

用途:当 printf/fprintf/sprintf/snprintf 等函数把用户输入当作格式串时,本手册提供从识别到利用的完整流程,用于内存泄露与任意写,进而实现代码执行。

主要能力:识别漏洞模式(printf(user_input) 危险,printf("%s", user_input) 安全);用 %p、%N$p、%N$lx、%N$s 读取栈与任意地址,定位输入偏移、canary、保存的 RBP、返回地址、libc 与堆地址;用 %n/%hn/%hhn/%ln 实现任意写;GOT 覆写(printf→system、atoi→system、__stack_chk_fail 等);glibc<2.34 的 __malloc_hook/__free_hook 利用;栈指针链间接写;无二进制无源码的盲打流程;FORTIFY_SOURCE 绕过;64 位地址含空字节时把地址放在格式说明符之后并对齐;pwntools 的 fmtstr_payload() 与 FmtStr 类自动化。

使用方式:先发 AAAA%p%p... 确认漏洞并找偏移,再按需泄露 canary/PIE/libc/堆基址,最后用 fmtstr_payload(offset, {addr: value}, numbwritten=0, write_size='short') 或 FmtStr 写入目标。64 位布局为 [格式说明符][补齐到8字节][地址1][地址2]...。

适用场景:CTF 与真实二进制漏洞利用,常与栈溢出/ROP、保护绕过、任意写转 RCE、堆利用配合。

限制:FORTIFY_SOURCE 会以 __printf_chk 禁用位置参数写;Full RELRO 下 GOT 不可写,glibc≥2.34 需转向 _IO_FILE、exit_funcs、TLS_dtor_list;输入不在栈上时需借助指针链;具体偏移与地址需按目标实测,资料未提供通用固定值。