Hacking ético con herramientas python
José Manuel Ortega | @jmortegac
[Link]
[Link]
[Link]
Agenda
Introducción al pentesting con python
Módulos(Sockets,Requests,Beautifulsoup,Shodan)
Análisis de metadatos
Análisis de puertos(nmap,pcapy,scapy)
Herramientas avanzadas
Demo pentesting-tool
Introducción al pentesting con python
• Multiplataforma
• Prototipos y pruebas de concepto
• Muchas herramientas y librerías
enfocadas a la seguridad
• Buena documentación
Introducción al pentesting con python
SQL Map
Sparta
• [Link]
• Pruebas de pentesting en las fases de
exploración y enumeración
The Harvester
[Link]
W3af
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
Introducción al pentesting con python
Security Tools builder
• [Link]
Paso de parámetros
import argparse
Ping Scan NetWork
Ping Scan NetWork
Ping Scan NetWork
from subprocess import Popen, PIPE
Sockets module
import socket
socket.
socket(socket.AF_INET,socket.SOCK_STREAM) #TCP
result = sock.connect_ex(('[Link]',80))
if result == 0:
print "Port is open"
else:
print "Port is not open"
Socket port scanner
from socket import AF_INET, SOCK_STREAM, setdefaulttimeout
Socket port scanner
Obtain banner server
Obtain banner server
Socket resolving IP/domain
Socket cliente /servidor
Requests module
Requests library
Requests library
Autenticación HTTP
Basic
Digest
MD5 /SHA
Requests Proxy
http_proxy = "[Link]
https_proxy = "[Link]
ftp_proxy = "[Link]
proxyDict = {
"http" : http_proxy,
"https" : https_proxy,
"ftp" : ftp_proxy
}
r = [Link](url, headers=headers, proxies=proxyDict)
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.
Beautiful Soup / extraer links
Beautiful Soup / extraer links
WebCrawler
Scraping images and pdfs
Scraping
Scraping
Shodan
• Rastrear servidores y dispositivos IP
• Obtención de banners
• Escaneo de puertos con el API de
python
Shodan
Shodan
• [Link]
Shodan
import shodan
SHODAN_API_KEY = "insert your API key here"
api = [Link](SHODAN_API_KEY)
Shodan API
Shodan Search
Shodan API
Shodan banners
Shodan host info
Shodan ftp anonymous access
DNSPython
• Permite resolver nombres de dominios
a direcciones IP y viceversa
• Existen registros para direcciones
ipv4,ipv6,servidores de correo
DNSPython
Python whois
Python whois
Builtwith
pip install builtwith
[Link](‘[Link]
Análisis de metadatos
• Metadatos en documentos PDF
• pyPDF2
• Metadatos en imágenes
• from [Link] import TAGS,
GPSTAGS
Análisis de metadatos
Análisis de metadatos
Análisis de metadatos
Análisis de puertos(nmap,scapy)
Python-nmap
Python-nmap
• Automatizar el escaneo de puertos
• Se puede tanto de forma síncrona
como asíncrona
import nmap
#síncrono
nm = [Link]()
# [Link](‘ip/rango’,’puertos’)
results = [Link]('[Link]', '22,25,80,443')
Python-nmap
import nmap
nm = [Link]()
results = [Link](arguments="-n -A -sT -p22,80,8080,5432,3306")
#obtenemos un diccionario con el resultado del scan
print([Link]())
NmapScanner
NmapScanner
for port in port_list:
NmapScanner().nmapScan(ip, port)
NmapScanner
{"[Link]": [
{"tcp": "21"}, {"tcp": "22"}, {"tcp": "23"}, {"tcp": "25"},
{"tcp": "80"}]
}
Python-nmap
#Asíncrono
nm_async = [Link]()
def callback_result(host, scan_result):
print '------------------'
print host, scan_result
nm_async.scan(hosts='[Link]/30', arguments='-sP',
callback=callback_result)
while nm_async .still_scanning():
print("Waiting >>>")
nm_async.wait(2)
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
[Link](arguments="-n -A -p3306 --
script=/usr/share/nmap/scripts/[Link]")
Nmap-scripts
[Link]
Nmap-scripts
scapy
• Equivalente al wireshark
• Capturar paquetes
• Filtrar por protocolos
• Leer y escribir pcap
• Analizar el tráfico que genera la red
Scapy commands
• ls(TCP)
Scapy commands
• Generar paquetes
• tcp=IP(dst='[Link]‘)/TCP(dport=80)
• Ver información de un paquete
• [Link]() / tcp.show2()
• Enviar un paquete
• send(tcp) /sendp(tcp)
Scapy commands
• Capturar n paquetes de red
• pkt = sniff(filter="tcp“,count=n)
• Leer pcap
• file=rdpcap('[Link]')
• [Link]()
• [Link]()
• [Link]()
Escáner de puertos con scapy
from [Link] import sr1, IP, TCP
Escáner de red con scapy
from [Link] import *
Scapy traceroute
Paramiko
• Conexiones ssh
import paramiko
ssh = [Link]()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy([Link]())
[Link](‘[Link]',
username=‘user', password=‘password')
[Link].log_to_file('[Link]')
Paramiko
• PyCrypto
• Criptography
• Soporta autenticación mediante una
SSH key en lugar de user y password
Paramiko / SSH Key
import paramiko
ssh = [Link]()
rsa_key =paramiko.
RSAKey.from_private_key_file('/home/user/.ssh/id_rsa',
password='password')
ssh.set_missing_host_key_policy([Link]())
[Link](‘[Link]', pkey=rsa_key,
username=‘user', password=‘password')
Paramiko / abrir una sesión
Check FTP Login Anonymous
import ftplib
Plugins
metasploit
• python-msfrpc
import msfrpc
Metasploit > msfconsole
Metasploit API
• Llamadas en formato msgpack
• [Link]
cmdMysqlLogin="""auxiliary/scanner/mysql/mysql_login
set RHOSTS """ + [Link]
cmdMysqlLogin = cmdMysqlLogin +"""\nrun
"""
print
[Link]('[Link]',[[Link]['id'],cmdMysqlLogin])
[Link]([Link]['id'])
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
Nexpose
[Link]
Pentesting tool
[Link]
Referencias
[Link]
[Link]
[Link]
[Link]
Books
Books
Books
Thank you!
José Manuel Ortega | @jmortegac