hacking ético con herramientas python

Post on 22-Jan-2018

1.192 Views

Category:

Software

94 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

• https://developer.shodan.io

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

"""

print

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

Pentesting tool

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