如何在x86-64汇编中使用execve

问题描述 投票:0回答:1

我正在 Hack The Box Academy 上的“汇编语言简介”模块,目前在“Shellcoding 工具”部分遇到问题。提示是:“上述服务器模拟了一个可利用的服务器,您可以在其上执行 shellcode。使用其中一种工具生成打印“/flag.txt”内容的 shellcode,然后使用“nc SERVER_IP PORT”连接到服务器以发送 shellcode。我正在尝试创建程序集 shellcode 以通过 execve 使用 /bin/cat 来执行此操作。我正在使用 Linux,这是我的代码:

global _start

section .text
_start:
        ; execve("/usr/bin/cat", ["/usr/bin/cat", "/flag.txt"], NULL)

        xor rax, rax
        push rax
        mov rbx, "t"; t
        push rbx
        mov rbx, "/flag.tx"; /flag.tx
        push rbx
        mov rbx, rsp
        push rax
        xor rbx, rbx
        mov rbx, "/cat"; /cat
        push rbx
        mov rbx, "/usr/bin"; /usr/bin
        push rbx
        mov rsi, rsp
        xor rbx, rbx
        mov rbx, "/cat"; /cat
        push rbx
        mov rbx, "/usr/bin"; /usr/bin
        push rbx
        mov rsi, rsp

        mov rax, 59
        mov rdx, 0
        syscall

我显然是装配新手,因此我正在学习 HTB 课程,所以我知道我在这里缺少一些概念。任何帮助表示赞赏。

编辑

我稍微修改了我的代码。仍然不起作用,但我认为这是进步?

_start:
        xor rax, rax
        push rax

        mov rsi, "flag.txt"
        push rsi
        mov rsi, rsp

        push rax

        mov rdi, "/bin/cat"
        push rdi
        mov rdi, rsp

        mov rdx, rax

        mov rax, 59
        syscall

当我使用 strace 时,我得到

execve("/bin/cat", [0x7478742e67616c66], NULL) = -1 EFAULT (Bad address)

所以我认为 flag.txt 字符串似乎没有被传递?我认为这可能是因为我可能不是空终止,但我不确定。

assembly x86-64
1个回答
0
投票

感谢 HTB Discord,他们非常乐于助人。我犯了 NULL 终止错误,并且没有在内存中正确创建 argv 数组。这可能可以优化和清理,但这是另一天的任务。

_start:
        xor rax, rax
        push rax

        mov rsi, "flag.txt"
        push rsi
        mov rsi, rsp

        push rax

        mov rbx, "/bin/cat"
        push rbx
        mov rbx, rsp

        push rax
        push rsi
        push rbx
        mov rsi, rsp

        push rax

        mov rdi, "/bin/cat"
        push rdi
        mov rdi, rsp

        mov rdx, rax

        mov rax, 59
        syscall
© www.soinside.com 2019 - 2024. All rights reserved.