使用 gnu asm 在 x64 中执行参数
Execve with argument in x64 with gnu asm
我正尝试在 GNU asm 中为 linux 编写 shellcode,但我无法使用参数调用 execve。
我正在尝试做什么:
execve("/bin/ls", ["/bin/ls", "-la", NULL], NULL);
这是我的代码:
.section .text
.globl _start
_start:
push [=11=]x3b
pop %rax
xorq %rdx,%rdx
push %rdx
movabs [=11=]x61616161616c2d2d,%r8
shr [=11=]x8, %r8
push %r8
movabs [=11=]x736c2f6e69622f2f,%r8
shr [=11=]x8, %r8
push %r8
mov %rsp, %rdi
push %rdx
push %rdi
mov %rsp, %rsi
syscall
push [=11=]x3c
pop %rax
xorq %rdi, %rdi
syscall
在对 execv 的系统调用之前,这是我的 reg/stack:
gdb
我想:
RDI 必须包含“/bin/ls”地址
RSI 必须包含“/bin/ls”地址的地址
RDX = NULL
shellcode 正在执行 /bin/ls 但没有使用 -la args。
怎么了?
感谢
您从未将指针推送到第二个 argv 字符串。 push %rdx; push %rdi
压入 NULL,然后压入指向 "/bin/ls"
的指针,但没有指向您的 "-laaaaa"
的指针。你还需要一个介于两者之间的 push
。例如:
push %rdx // NULL
lea 8(%rdi), %rcx // pointer to "-laaaaa"
push %rcx
push %rdi // pointer to "/bin/ls"
mov %rsp, %rsi // pointer to the argument vector
我正尝试在 GNU asm 中为 linux 编写 shellcode,但我无法使用参数调用 execve。
我正在尝试做什么:
execve("/bin/ls", ["/bin/ls", "-la", NULL], NULL);
这是我的代码:
.section .text
.globl _start
_start:
push [=11=]x3b
pop %rax
xorq %rdx,%rdx
push %rdx
movabs [=11=]x61616161616c2d2d,%r8
shr [=11=]x8, %r8
push %r8
movabs [=11=]x736c2f6e69622f2f,%r8
shr [=11=]x8, %r8
push %r8
mov %rsp, %rdi
push %rdx
push %rdi
mov %rsp, %rsi
syscall
push [=11=]x3c
pop %rax
xorq %rdi, %rdi
syscall
在对 execv 的系统调用之前,这是我的 reg/stack: gdb
我想: RDI 必须包含“/bin/ls”地址 RSI 必须包含“/bin/ls”地址的地址 RDX = NULL
shellcode 正在执行 /bin/ls 但没有使用 -la args。
怎么了?
感谢
您从未将指针推送到第二个 argv 字符串。 push %rdx; push %rdi
压入 NULL,然后压入指向 "/bin/ls"
的指针,但没有指向您的 "-laaaaa"
的指针。你还需要一个介于两者之间的 push
。例如:
push %rdx // NULL
lea 8(%rdi), %rcx // pointer to "-laaaaa"
push %rcx
push %rdi // pointer to "/bin/ls"
mov %rsp, %rsi // pointer to the argument vector