one_gadget RCE
one_gadget RCE 是什么?
one_gadget RCECTF 与真实利用中常用的捷径,只要满足寄存器与栈条件,就能用一个 libc 地址直接得到 shell。
one_gadget 是 glibc 中的一段指令序列,在特定的寄存器与栈前置条件下会最终调用 execve("/bin/sh", NULL, NULL)。david942j 编写的 one_gadget 工具会扫描 libc 并列举这些地址及其约束,例如要求 rax == 0 或 rsp+0x40 == NULL。当攻击者拥有一次函数指针或返回地址的劫持机会(GOT 覆盖、FILE 流攻击、unsorted bin 等)时,即可直接获得 shell,而无须构造完整 ROP 链。条件需仔细满足,常用辅助 gadget 或 stack pivot 协助。缓解措施包括常量混淆、CFI、seccomp 沙箱,以及对 libc 做剥离或修改以移除常见 gadget。
● 示例
- 01
在 libc-2.31 二进制上仅通过一次 GOT 覆盖即可借助 one_gadget 启动 /bin/sh。
- 02
FILE 流利用通过破坏 _IO_2_1_stdout_ 的 vtable,跳转到条件满足的 one_gadget。
● 常见问题
one_gadget RCE 是什么?
CTF 与真实利用中常用的捷径,只要满足寄存器与栈条件,就能用一个 libc 地址直接得到 shell。 它属于网络安全的 攻击与威胁 分类。
one_gadget RCE 是什么意思?
CTF 与真实利用中常用的捷径,只要满足寄存器与栈条件,就能用一个 libc 地址直接得到 shell。
one_gadget RCE 是如何工作的?
one_gadget 是 glibc 中的一段指令序列,在特定的寄存器与栈前置条件下会最终调用 execve("/bin/sh", NULL, NULL)。david942j 编写的 one_gadget 工具会扫描 libc 并列举这些地址及其约束,例如要求 rax == 0 或 rsp+0x40 == NULL。当攻击者拥有一次函数指针或返回地址的劫持机会(GOT 覆盖、FILE 流攻击、unsorted bin 等)时,即可直接获得 shell,而无须构造完整 ROP 链。条件需仔细满足,常用辅助 gadget 或 stack pivot 协助。缓解措施包括常量混淆、CFI、seccomp 沙箱,以及对 libc 做剥离或修改以移除常见 gadget。
如何防御 one_gadget RCE?
针对 one_gadget RCE 的防御通常结合技术控制与运营实践,详见上方完整定义。
one_gadget RCE 还有哪些其他名称?
常见的别称包括: one_gadget。