Hacking ético con herramientas python
José Manuel Ortega | @jmortegac
http://jmortega.github.io
http://jmortega.github.io
https://speakerdeck.com/jmortega
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)
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
• http://sparta.secforce.com • Pruebas de pentesting en las fases de
exploración y enumeración
The Harvester
https://github.com/laramies/theHarvester
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
• https://github.com/abirtone/STB
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(('127.0.0.1',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 = "http://10.10.10.10:3000"
https_proxy = "https://10.10.10.10:3000"
ftp_proxy = "ftp://10.10.10.10:3000"
proxyDict = {
"http" : http_proxy,
"https" : https_proxy,
"ftp" : ftp_proxy
}
r = requests.get(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
import shodan
SHODAN_API_KEY = "insert your API key here"
api = shodan.Shodan(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
builtwith.parse(‘http://www.sh3llcon.es’)
Análisis de metadatos
• Metadatos en documentos PDF
• pyPDF2
• Metadatos en imágenes
• from PIL.ExifTags 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 = nmap.PortScanner()
# nm.scan(‘ip/rango’,’puertos’)
results = nm.scan('127.0.0.1', '22,25,80,443')
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")
NmapScanner
NmapScanner
for port in port_list:
NmapScanner().nmapScan(ip, port)
NmapScanner
{"192.168.56.101": [
{"tcp": "21"}, {"tcp": "22"}, {"tcp": "23"}, {"tcp": "25"},
{"tcp": "80"}]
}
Python-nmap
#Asíncrono
nm_async = nmap.PortScannerAsync()
def callback_result(host, scan_result):
print '------------------'
print host, scan_result
nm_async.scan(hosts='192.168.1.0/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
nm.scan(arguments="-n -A -p3306 --
script=/usr/share/nmap/scripts/mysql-info.nse")
Nmap-scripts
https://nmap.org/nsedoc/scripts
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='google.com‘)/TCP(dport=80)
• Ver información de un paquete
• tcp.show() / 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('demo.pcap')
• file.summary()
• file.sessions()
• file.show()
Escáner de puertos con scapy
from scapy.all import sr1, IP, TCP
Escáner de red con scapy
from scapy.all import *
Scapy traceroute
Paramiko
• Conexiones ssh
import paramiko
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(‘127.0.0.1',
username=‘user', password=‘password')
paramiko.util.log_to_file('paramiko.log')
Paramiko
• PyCrypto
• Criptography
• Soporta autenticación mediante una
SSH key en lugar de user y password
Paramiko / SSH Key
import paramiko
ssh = paramiko.SSHClient()
rsa_key =paramiko. RSAKey.from_private_key_file('/home/user/.ssh/id_rsa',
password='password')
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(‘127.0.0.1', 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 • https://community.rapid7.com/docs/DOC-1516
cmdMysqlLogin="""auxiliary/scanner/mysql/mysql_login
set RHOSTS """ + self.ip
cmdMysqlLogin = cmdMysqlLogin +"""\nrun
"""
self.client.call('console.write',[self.console['id'],cmdMysqlLogin])
self.processData(self.console['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
https://github.com/jmortega/python-pentesting
Pentesting tool
https://github.com/jmortega/sh3llcon_python
Referencias
http://docs.shodanhq.com
http://www.secdev.org/projects/scapy
http://www.pythonsecurity.org
http://thehackerway.com
Books
Books
Books
Thank you!
José Manuel Ortega | @jmortegac
Top Related