
_drinkme_는 셸코드 테스트 하네스입니다. 표준 입력에서 셸코드를 읽어 실행합니다. 이를 통해 침투 테스터는 배포 전에 페이로드를 신속하게 테스트할 수 있습니다.
_drinkme_는 다음 형식의 셸코드를 처리할 수 있습니다:
예를 들어, NOP는 "0x90", "\x90", "x90" 또는 "90" 중 하나로 표현될 수 있습니다.
입력을 처리할 때 _drinkme_는 다음을 무시합니다:
write(STDOUT_FILENO, "Hello world!\n", strlen("Hello world!\n"))
empty@monkey:~$ cat hello_world.x86_64
\xeb\x1d\x5e\x48\x31\xc0\xb0\x01\x48\x31\xff\x40\xb7\x01\x48\x31\xd2\xb2\x0d\x0f\x05\x48\x31\xc0\xb0\x3c\x48\x31\xff\x0f\x05\xe8\xde\xff\xff\xff\x48\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x21\x0a
empty@monkey:~$ cat hello_world.x86_64 | drinkme
Hello world!
execve("/bin/sh")
empty@monkey:~$ cat execve_bin_sh.x86_64
"\x48\x31\xd2" // xor %rdx, %rdx
"\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68" // mov $0x68732f6e69622f2f, %rbx
"\x48\xc1\xeb\x08" // shr $0x8, %rbx
"\x53" // push %rbx
"\x48\x89\xe7" // mov %rsp, %rdi
"\x50" // push %rax
"\x57" // push %rdi
"\x48\x89\xe6" // mov %rsp, %rsi
"\xb0\x3b" // mov $0x3b, %al
"\x0f\x05"; // syscall
empty@monkey:~$ echo $$
3880
empty@monkey:~$ cat execve_bin_sh.x86_64 | drinkme
$ echo $$
18613
msfvenom으로 /usr/bin/id 실행
root@kali-amd64:~# msfvenom --arch x86_64 --platform linux -f hex -p linux/x64/exec CMD=/usr/bin/id
No encoder or badchars specified, outputting raw payload
Payload size: 51 bytes
Final size of hex file: 102 bytes
6a3b589948bb2f62696e2f736800534889e7682d6300004889e652e80c0000002f7573722f62696e2f69640056574889e60f05
root@kali-amd64:~# msfvenom --arch x86_64 --platform linux -f hex -p linux/x64/exec CMD=/usr/bin/id | drinkme
No encoder or badchars specified, outputting raw payload
Payload size: 51 bytes
Final size of hex file: 102 bytes
uid=0(root) gid=0(root) groups=0(root)
usage: drinkme [-p] [-h]
-p Print the formatted shellcode. Don't execute it.
-h Print this help message.
Example: cat hello_world.x86_64 | drinkme