$30 off During Our Annual Pro Sale. View Details »

Hacking ético con herramientas python

jmortegac
January 23, 2016

Hacking ético con herramientas python

Hacking ético con herramientas python

jmortegac

January 23, 2016
Tweet

More Decks by jmortegac

Other Decks in Programming

Transcript

  1. Hacking ético con herramientas python José Manuel Ortega | @jmortegac

  2. http://jmortega.github.io

  3. http://jmortega.github.io

  4. https://speakerdeck.com/jmortega

  5. 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)
  6. Introducción al pentesting con python • Multiplataforma • Prototipos y

    pruebas de concepto • Muchas herramientas y librerías enfocadas a la seguridad • Buena documentación
  7. Introducción al pentesting con python

  8. SQL Map

  9. Sparta • http://sparta.secforce.com • Pruebas de pentesting en las fases

    de exploración y enumeración
  10. The Harvester https://github.com/laramies/theHarvester

  11. None
  12. W3af

  13. 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
  14. Introducción al pentesting con python

  15. Security Tools builder • https://github.com/abirtone/STB

  16. Paso de parámetros import argparse

  17. Ping Scan NetWork

  18. Ping Scan NetWork

  19. Ping Scan NetWork from subprocess import Popen, PIPE

  20. 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"
  21. Socket port scanner from socket import AF_INET, SOCK_STREAM, setdefaulttimeout

  22. Socket port scanner

  23. Obtain banner server

  24. Obtain banner server

  25. Socket resolving IP/domain

  26. Socket cliente /servidor

  27. Requests module

  28. Requests library

  29. Requests library

  30. Autenticación HTTP Basic Digest MD5 /SHA

  31. 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)
  32. 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.
  33. Beautiful Soup / extraer links

  34. Beautiful Soup / extraer links

  35. WebCrawler

  36. Scraping images and pdfs

  37. Scraping

  38. Scraping

  39. Shodan • Rastrear servidores y dispositivos IP • Obtención de

    banners • Escaneo de puertos con el API de python
  40. Shodan

  41. Shodan • https://developer.shodan.io

  42. Shodan import shodan SHODAN_API_KEY = "insert your API key here"

    api = shodan.Shodan(SHODAN_API_KEY)
  43. Shodan API

  44. Shodan Search

  45. Shodan API

  46. Shodan banners

  47. Shodan host info

  48. Shodan ftp anonymous access

  49. DNSPython • Permite resolver nombres de dominios a direcciones IP

    y viceversa • Existen registros para direcciones ipv4,ipv6,servidores de correo
  50. DNSPython

  51. Python whois

  52. Python whois

  53. Builtwith pip install builtwith builtwith.parse(‘http://www.sh3llcon.es’)

  54. Análisis de metadatos • Metadatos en documentos PDF • pyPDF2

    • Metadatos en imágenes • from PIL.ExifTags import TAGS, GPSTAGS
  55. Análisis de metadatos

  56. Análisis de metadatos

  57. Análisis de metadatos

  58. Análisis de puertos(nmap,scapy)

  59. Python-nmap

  60. 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')
  61. 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")
  62. NmapScanner

  63. NmapScanner for port in port_list: NmapScanner().nmapScan(ip, port)

  64. NmapScanner {"192.168.56.101": [ {"tcp": "21"}, {"tcp": "22"}, {"tcp": "23"}, {"tcp":

    "25"}, {"tcp": "80"}] }
  65. 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)
  66. 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")
  67. Nmap-scripts https://nmap.org/nsedoc/scripts

  68. Nmap-scripts

  69. scapy • Equivalente al wireshark • Capturar paquetes • Filtrar

    por protocolos • Leer y escribir pcap • Analizar el tráfico que genera la red
  70. Scapy commands • ls(TCP)

  71. 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)
  72. 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()
  73. Escáner de puertos con scapy from scapy.all import sr1, IP,

    TCP
  74. Escáner de red con scapy from scapy.all import *

  75. Scapy traceroute

  76. 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')
  77. Paramiko • PyCrypto • Criptography • Soporta autenticación mediante una

    SSH key en lugar de user y password
  78. 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')
  79. Paramiko / abrir una sesión

  80. Check FTP Login Anonymous import ftplib

  81. Plugins

  82. metasploit • python-msfrpc import msfrpc

  83. Metasploit > msfconsole

  84. 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'])
  85. 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
  86. Nexpose

  87. https://github.com/jmortega/python-pentesting

  88. Pentesting tool

  89. https://github.com/jmortega/sh3llcon_python

  90. Referencias http://docs.shodanhq.com http://www.secdev.org/projects/scapy http://www.pythonsecurity.org http://thehackerway.com

  91. Books

  92. Books

  93. Books

  94. Thank you! José Manuel Ortega | @jmortegac