#!/usr/bin/env python2 # ./runshellcode.py '\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05' from ctypes import CDLL, c_char_p, c_void_p, memmove, cast, CFUNCTYPE from sys import argv libc = CDLL('libc.so.6') shellcode = argv[1].replace('\\x', '').decode('hex') sc = c_char_p(shellcode) size = len(shellcode) addr = c_void_p(libc.valloc(size)) memmove(addr, sc, size) libc.mprotect(addr, size, 0x7) run = cast(addr, CFUNCTYPE(c_void_p)) run()