You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位具备任意写权限的程序如何绕过seccomp strict模式?

64位程序seccomp strict模式绕过方案

前置规则说明

seccomp strict模式默认仅放开4类系统调用的执行权限:read、write、_exit、rt_sigreturn,直接调用其他系统调用会直接被内核终止进程。结合你给出的环境条件,可按以下路径完成绕过:

具体利用步骤

  • 第一步:准备兼容模式execve shellcode
    64位进程默认运行在长模式下,绝大多数场景下seccomp strict默认只会检查64位系统调用,不会拦截32位兼容模式的系统调用。你可以把「切换到32位兼容模式+执行execve」的shellcode写入给定的rwxp缓冲区,1024字节的空间完全足够放下这段代码。
  • 第二步:用rt_sigreturn构造执行上下文
    rt_sigreturn属于strict模式允许的系统调用,你可以在rwxp缓冲区的代码里伪造完整的ucontext信号上下文结构体,把上下文中的cs段寄存器值改成32位用户态代码段选择子(固定为0x23),rip指向提前写好的32位execve shellcode入口,主动触发rt_sigreturn后内核会按照伪造的上下文恢复寄存器,自动完成模式切换,直接执行execve拿到shell。
  • 第三步:写入/bin/sh字符串
    用提供的任意地址写能力,把/bin/sh\x00字符串写到任意用户态可写区域(比如rwxp缓冲区的空白位置、或者libc的可写段都可以),作为execve的入参使用。
  • 第四步:绕过canary检测(按需使用)
    程序开启了canary保护,如果你的利用逻辑需要修改栈上数据,可以直接用任意地址写能力先读出栈上存储的canary值,修改完栈数据后把原canary回填即可,不需要额外做信息泄露。

备用方案(兼容严格拦截32位调用的场景)

如果目标内核特意配置了拦截32位兼容模式的系统调用,可以直接用允许的read/write系统调用完成读旗操作,不需要getshell:

  • 利用partial RELRO的可写GOT特性,把程序中已有的open函数GOT表项修改为read的PLT地址,先读入flag文件路径,再调用修改后的open(实际执行read逻辑)读入flag内容,最后调用write把内容输出到标准输出即可。

内容的提问来源于stack exchange,提问作者Dotch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:00:05