Hacking ético con herramientas python
José Manuel Ortega | @jmortegac
Slide 2
Slide 2 text
http://jmortega.github.io
Slide 3
Slide 3 text
http://jmortega.github.io
Slide 4
Slide 4 text
https://speakerdeck.com/jmortega
Slide 5
Slide 5 text
Agenda
Introducción al pentesting con python
Herramientas avanzadas
Módulos(Sockets,Requests,Beautifulsoup,Shodan)
Análisis de metadatos
Demo pentesting-tool
Análisis de puertos(nmap,pcapy,scapy)
Slide 6
Slide 6 text
Introducción al pentesting con python
• Multiplataforma
• Prototipos y pruebas de concepto
• Muchas herramientas y librerías
enfocadas a la seguridad
• Buena documentación
Slide 7
Slide 7 text
Introducción al pentesting con python
Slide 8
Slide 8 text
SQL Map
Slide 9
Slide 9 text
Sparta
• http://sparta.secforce.com
• Pruebas de pentesting en las fases de
exploración y enumeración
Slide 10
Slide 10 text
The Harvester
https://github.com/laramies/theHarvester
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
W3af
Slide 13
Slide 13 text
W3af
• Web application attack and audit
framework
• Framework de test de intrusión web
• Escáner de vulnerabilidades
• Permite automatizar las tareas
repetitivas de pentesting
Ping Scan NetWork
from subprocess import Popen, PIPE
Slide 20
Slide 20 text
Sockets module
import socket
socket.
socket(socket.AF_INET,socket.SOCK_STREAM) #TCP
result = sock.connect_ex(('127.0.0.1',80))
if result == 0:
print "Port is open"
else:
print "Port is not open"
Slide 21
Slide 21 text
Socket port scanner
from socket import AF_INET, SOCK_STREAM, setdefaulttimeout
Beautiful Soup
• Parsea y permite extraer información de
documentos HTML.
• Soporta múltiples parsers para tratar
documentos XML,HTML(lxml,html5lib).
• Permite buscar elementos HTML,tales como
enlaces, formularios o cualquier etiqueta
HTML.
Slide 33
Slide 33 text
Beautiful Soup / extraer links
Slide 34
Slide 34 text
Beautiful Soup / extraer links
Slide 35
Slide 35 text
WebCrawler
Slide 36
Slide 36 text
Scraping images and pdfs
Slide 37
Slide 37 text
Scraping
Slide 38
Slide 38 text
Scraping
Slide 39
Slide 39 text
Shodan
• Rastrear servidores y dispositivos IP
• Obtención de banners
• Escaneo de puertos con el API de
python
Slide 40
Slide 40 text
Shodan
Slide 41
Slide 41 text
Shodan
• https://developer.shodan.io
Slide 42
Slide 42 text
Shodan
import shodan
SHODAN_API_KEY = "insert your API key here"
api = shodan.Shodan(SHODAN_API_KEY)
Slide 43
Slide 43 text
Shodan API
Slide 44
Slide 44 text
Shodan Search
Slide 45
Slide 45 text
Shodan API
Slide 46
Slide 46 text
Shodan banners
Slide 47
Slide 47 text
Shodan host info
Slide 48
Slide 48 text
Shodan ftp anonymous access
Slide 49
Slide 49 text
DNSPython
• Permite resolver nombres de dominios
a direcciones IP y viceversa
• Existen registros para direcciones
ipv4,ipv6,servidores de correo
Análisis de metadatos
• Metadatos en documentos PDF
• pyPDF2
• Metadatos en imágenes
• from PIL.ExifTags import TAGS,
GPSTAGS
Slide 55
Slide 55 text
Análisis de metadatos
Slide 56
Slide 56 text
Análisis de metadatos
Slide 57
Slide 57 text
Análisis de metadatos
Slide 58
Slide 58 text
Análisis de puertos(nmap,scapy)
Slide 59
Slide 59 text
Python-nmap
Slide 60
Slide 60 text
Python-nmap
• Automatizar el escaneo de puertos
• Se puede tanto de forma síncrona
como asíncrona
import nmap
#síncrono
nm = nmap.PortScanner()
# nm.scan(‘ip/rango’,’puertos’)
results = nm.scan('127.0.0.1', '22,25,80,443')
Slide 61
Slide 61 text
Python-nmap
#obtenemos un diccionario con el resultado del scan
print(nm.csv())
import nmap
nm = nmap.PortScanner()
results = nm.scan(arguments="-n -A -sT -p22,80,8080,5432,3306")
Slide 62
Slide 62 text
NmapScanner
Slide 63
Slide 63 text
NmapScanner
for port in port_list:
NmapScanner().nmapScan(ip, port)
Nmap-scripts
• Permiten la programación de rutinas para
encontrar posibles vulnerabilidades en un
objetivo determinado
• Primero determinar si el puerto se encuentra abierto para
posteriormente detectar vulnerabilidades en el servicio
abierto por dicho puerto
nm.scan(arguments="-n -A -p3306 --
script=/usr/share/nmap/scripts/mysql-info.nse")
Slide 67
Slide 67 text
Nmap-scripts
https://nmap.org/nsedoc/scripts
Slide 68
Slide 68 text
Nmap-scripts
Slide 69
Slide 69 text
scapy
• Equivalente al wireshark
• Capturar paquetes
• Filtrar por protocolos
• Leer y escribir pcap
• Analizar el tráfico que genera la red
Slide 70
Slide 70 text
Scapy commands
• ls(TCP)
Slide 71
Slide 71 text
Scapy commands
• Generar paquetes
• tcp=IP(dst='google.com‘)/TCP(dport=80)
• Ver información de un paquete
• tcp.show() / tcp.show2()
• Enviar un paquete
• send(tcp) /sendp(tcp)
Slide 72
Slide 72 text
Scapy commands
• Capturar n paquetes de red
• pkt = sniff(filter="tcp“,count=n)
• Leer pcap
• file=rdpcap('demo.pcap')
• file.summary()
• file.sessions()
• file.show()
Slide 73
Slide 73 text
Escáner de puertos con scapy
from scapy.all import sr1, IP, TCP
Metasploit API
• Llamadas en formato msgpack
• https://community.rapid7.com/docs/DOC-1516
cmdMysqlLogin="""auxiliary/scanner/mysql/mysql_login
set RHOSTS """ + self.ip
cmdMysqlLogin = cmdMysqlLogin +"""\nrun
"""
print
self.client.call('console.write',[self.console['id'],cmdMysqlLogin])
self.processData(self.console['id'])
Slide 85
Slide 85 text
Nexpose
• Herramienta desarrollada por Rapid7 para el
escaneo y descubrimiento de
vulnerabilidades.
• Permite el acceso programático a otros
programas por medio de peticiones HTTP/s
• Las respuestas se devuelven en formato
XML
• BeautifulSoup para obtener los datos del
servidor de vulnerabilidades