Sí, es posible
lee sobre buffer overflows y todo su entorno

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
int reg_esp ;
__asm__ __volatile__ ("mov %%esp, %0" : "=g"(reg_esp));
printf("ESP value before function: %p\n", (void *) reg_esp);
premio();
__asm__ __volatile__ ("mov %%esp, %0" : "=g"(reg_esp));
printf("ESP value after function: %p\n", (void *) reg_esp);
Cita de: Lodos76 en 5 Marzo 2014, 02:26 AM
¿No se supone que se busca un JMP ESP en una DLL? Las DLLs no cambian su código :S...
Cita de: Lodos76 en 5 Marzo 2014, 02:26 AM
Imagina que hago un findjmp.exe kernel32.dll esp
Y me da una dirección, y con esa dirección hago un exploit y EIP tendría que apuntar a esa dirección, pero EIP resulta que apunta a otra.
Cita de: Lodos76 en 5 Marzo 2014, 02:26 AM
Pero pueden tener programas antiexploits y tú no tienes forma de saber cuáles son, o un firewall, y hay muchos firewalls. Yo mismo tengo más de 1 firewall activo.
Cita de: Lodos76 en 5 Marzo 2014, 02:26 AM
¿Qué me dices de la imagen?
Cita de: Lodos76 en 5 Marzo 2014, 02:26 AM
¿Se puede evitar que pete un programa por haber ejecutado un exploit?
Básicamente... Lo que haces con los JMP registro es saltar al stack (la RAM) y ejecutar ese código, ¿no?
Cita de: Lodos76 en 5 Marzo 2014, 02:26 AM
El código ensamblador está en el disco duro y el .data en la RAM, ¿no?
Cita de: Lodos76 en 4 Marzo 2014, 23:22 PM
Acabo de terminar el paper de Rojodos, y me sale todo bien, pero el offset de jmp esp en kernel32.dll cambia nada más ejecuto algo, y así es imposible ejecutar system(), porque cuando ejecuto el exploit cambia el offset(en msvcrt.dll no tengo ningún jmp, y antes de suspender el portátil tenía calls, y ahora tengo push esp ret, eso es posible, ¿no? xD).
Cita de: Lodos76 en 4 Marzo 2014, 23:22 PM
Otra cosa, en el paper de Rojodos, cuando introduzco AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUU => EIP=TTTT, ESP=dirección que contiene UUUU, pero ESP != UUUU
En cambio, con el código de Rojodos a EBP sí puedo ponerle que apunte a 414141 por ejemplo.
Pero ESP no apunta (sólo contiene) y si uso JMP ESP, salta a la shellcode. Me ha parecido extraño. ¿Y eso?
Cita de: Lodos76 en 4 Marzo 2014, 23:22 PM
Por cierto, se dice que no hay que sustituir el EIP por una dirección de memoria, ya que cambia muy a menudo la pila.
Vale, eso lo entendería, pero si los Arguments que pongo antes del EIP son carácteres y siempre van a ser los que ponga en la pila... ¿por qué la dirección que ponga como EIP, que al fin y al cabo introduzco 4 bytes igualmente, cambia a la que yo puse?
Cita de: Lodos76 en 4 Marzo 2014, 23:22 PM
Me da la sensación que según qué compilador, qué protección de software, la ruta que habrá usado un servidor, cambia el exploit, y aunque esté claro el PoC, hacer un exploit funcional en un sistema remoto puede no funcionar aunque sepas mucho...
Cita de: Lodos76 en 4 Marzo 2014, 23:22 PM
Y qué decir... ¡Muchísimas gracias! Voy a seguir investigando en estos temas que son muy interesantes.
Cita de: Lodos76 en 3 Marzo 2014, 23:57 PM
1. ¿Por qué si MyVar necesita 128 bytes, Dev-C++ reserva 98? (sub esp,98) [Página 14]
Cita de: Lodos76 en 3 Marzo 2014, 23:57 PM
2. En teoría, si ejecuto el exploit, éste se mete en la pila hacia abajo, pero en la imagen tengo que se mete hacia arriba de la pila (los 41 deberían estar donde están los 43 y viceversa):
Cita de: Lodos76 en 3 Marzo 2014, 23:57 PM
Además, si strcpy termina en '\0', entonces 26074 As / 4 Bytes = 6518.5, y debería dar 6518.75, así está claro que el último byte es el carácter nulo, pero ese 0.25 que nos falta lo ocupa una 'A'
¿Qué ocurre?
Cita de: Lodos76 en 2 Marzo 2014, 21:18 PM
Dudas referentes al exploit:
Se sustrae a ESP 64 bytes
se pushea el ret address porque hemos llamado a strcpy
; push ebp ; Esto no interviene
; mov ebp,esp ; Esto no interviene
Se van metiendo en la pila las 76 As. Si lo compilo con MCV++ se meten hacia abajo, ¿no?
Cita de: Lodos76 en 2 Marzo 2014, 21:18 PM
Me refiero a que con gcc deberían meterse hacia arriba hasta un punto en que arriba se sustituye el ret address por lo que pongamos nosotros (que será un jmp esp)
Cita de: Lodos76 en 2 Marzo 2014, 21:18 PM
Pero si "metemos", y no "pusheamos" los datos, por qué ESP apuntará a nuestra shellcode? Porque se terminará alguna parte o algo, pero no termino de verlo.