任意写入到代码执行
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/arbitrary-write-to-rce-lr-oms0。
技能介绍
要解决的工程问题
拿到 arbitrary write 后,漏洞利用并不一定结束。很多场景只能覆盖有限长度、位置或次数;直接写 shellcode 可能被 NX/CET 拦住,写函数指针又会被 glibc 版本演进坑到。本技能聚焦“最后一英里”:把已有任意写原语稳定转成 code execution,而不是从零找漏洞。
技能如何工作
- 先检查写原语约束:单字节还是整字?能否重复写同一地址?是否会破坏后续调用?
- 再确认目标运行环境:glibc 版本、
PIE/ASLR、RELRO、异常处理路径、静态链接或自定义 malloc。 - 选择兼容的覆写目标。技能按版本差异组织:
GOT/PLT、_IO_FILEvtable、__exit_funcs、TLS_dtor_list、_dl_fini、modprobe_path、.fini_array、C++ vtable、setcontextgadget;旧 hooks 只在适合版本下讨论。 - 对已移除目标做排除。例如
__malloc_hook、__free_hook在较新 glibc 已不可靠,技能会提醒不要默认写入。 - 考虑指针整理、重定位和部分覆写,避免只看函数名而忽略 mangling 或 PC-relative 地址。
适用边界
- 前置条件是已经获得可控任意写;本技能不负责初始漏洞挖掘,也不保证绕过所有缓解措施。
- 具体路径取决于二进制、libc、配置和运行时行为。目标清单是兼容性地图,不是万能 payload。
- 学习或研究时应在受控环境验证,避免把模板化步骤误用为真实攻击结论。
使用场景
- 分析 CTF 二进制时,需要把 heap overflow 得到的任意写转成 shellcode 执行
- 审计应用漏洞时,要在新版本 glibc 上挑选仍可用的 GOT 覆写目标
- 复现漏洞时,需要根据是否开启 RELRO 决定改用 GOT 还是 _IO_FILE vtable
- 研究利用链时,要整理 __exit_funcs 与 _dl_fini 等退出流程上的覆写点
适合人员
- 二进制安全研究员,需要快速判断任意写后有哪些代码执行目标可用
- CTF 逆向选手,在比赛中把格式串或堆漏洞的写入原语变成 RCE
- 系统库工程师,关注 glibc 版本演进对旧 exploit 目标的影响
- 漏洞开发工程师,要为特定二进制设计兼容当前防护配置的利用路径