【问题标题】:nasm assembly sys_execve /bin/shnasm 程序集 sys_execve /bin/sh
【发布时间】:2017-03-11 22:12:31
【问题描述】:

我正在尝试触发 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;
}

这也给了我一个分段错误...

【问题讨论】:

标签: linux assembly nasm x86-64 shellcode


【解决方案1】:

您正在导致内核通过将字符串的地址加载到rsi 中来取消引用字符串/bin/sh 作为指针。

只需将 dxsi 设置为 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

【讨论】:

  • 嘿谢谢回答。不,它不工作。如果我执行它并说 echo $0 它说“bash”。
【解决方案2】:

我想通了:

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

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多