nasm 程序集 sys_execve /bin/sh
nasm assembly sys_execve /bin/sh
我正在尝试触发 sys_execve (X86_64)。
section .data
file db "/bin/sh",0
section .text
global _start
_start:
mov rax, 59
mov rdi, file
lea rsi, [file]
mov rdx, 0
syscall
它给出分段错误
我做错了什么?
我什至尝试将其放入 C 源代码中:
int main(void)
{
char shellcode[] =
"\xb8\x3b\x00\x00\x00"
"\x48\xbf\xd0\x00\x60\x00\x00"
"\x00\x00\x00"
"\x48\x8d\x34\x25\xd0\x00\x60"
"\x00"
"\xba\x00\x00\x00\x00"
"\x0f\x05";
(*(void (*)()) shellcode)();
return 0;
}
这也给我一个分段错误...
您通过将字符串 /bin/sh
的地址加载到 rsi
.
来导致内核取消引用字符串 /bin/sh
作为指针
只需将 dx
和 si
设置为 0 即可传递空环境和参数。
section .text
global _start
_start:
mov rax, 59
mov rdi, file // *filename
mov rsi, 0 // *argv
mov rdx, 0 // *envp
syscall
section .data
file db "/bin/sh",0
我想通了:
section .data
file db '/bin/sh',0
file_arg db 'sh',0
argv dq file_arg, 0
section .text
global _start
_start:
mov rax, 59
mov rdi, file
mov rsi, argv
mov rdx, 0
syscall
我正在尝试触发 sys_execve (X86_64)。
section .data
file db "/bin/sh",0
section .text
global _start
_start:
mov rax, 59
mov rdi, file
lea rsi, [file]
mov rdx, 0
syscall
它给出分段错误
我做错了什么?
我什至尝试将其放入 C 源代码中:
int main(void)
{
char shellcode[] =
"\xb8\x3b\x00\x00\x00"
"\x48\xbf\xd0\x00\x60\x00\x00"
"\x00\x00\x00"
"\x48\x8d\x34\x25\xd0\x00\x60"
"\x00"
"\xba\x00\x00\x00\x00"
"\x0f\x05";
(*(void (*)()) shellcode)();
return 0;
}
这也给我一个分段错误...
您通过将字符串 /bin/sh
的地址加载到 rsi
.
/bin/sh
作为指针
只需将 dx
和 si
设置为 0 即可传递空环境和参数。
section .text
global _start
_start:
mov rax, 59
mov rdi, file // *filename
mov rsi, 0 // *argv
mov rdx, 0 // *envp
syscall
section .data
file db "/bin/sh",0
我想通了:
section .data
file db '/bin/sh',0
file_arg db 'sh',0
argv dq file_arg, 0
section .text
global _start
_start:
mov rax, 59
mov rdi, file
mov rsi, argv
mov rdx, 0
syscall