Enfoque

Objetivo
El objetivo del curso es capacitar a aquellos interesados en ampliar los conocimientos sobre python, librerías y módulos que disponemos para realizar tareas relacionadas con peticiones, obtención de información, conexión con servidores o testeo de la seguridad de un sitio web.
Aprenderemos a utilizar Python como lenguaje de programación no solo para poder construir programas sino también para automatizar y especificar muchas de las tareas que se realizan durante un proceso de pentesting.
Los objetivos generales del curso serían:
- Aprender a crear scripts en Python con el objetivo de automatizar tareas de pentesting.
- Aprender las principales librerías disponibles en Python a la hora de desarrollar herramientas enfocadas a la seguridad.
- Aprender una metodología que permita escribir código en Python para realizar un proceso de pentesting.
- Aprender a desarrollar mediante programación en Python sus propias herramientas que se utilizan en un proceso de Ethical Hacking.
- Aprender a automatizar tareas de análisis y extracción de información de servidores.
- Fomentar el interés por la investigación y la seguridad informática.
Dirigido a:
Desarrolladores con conocimientos básicos en Python.
Es recomendable que el alumno tenga unas bases del lenguaje y unos conocimientos básicos de programación orientada a objetos, estructuras de datos y manejo de ficheros.
Requisitos:
Es recomendable que el alumno tenga conocimientos sobre el lenguaje de programación Python y disponga del intérprete con la versión de Python 3.8 instalada en su sistema.
Temario del curso
1 - Trabajando con sockets en Python
Objetivo
Al finalizar esta unidad, el alumno conocerá el módulo sockets para realizar peticiones de red, resolver un dominio a partir de una dirección ip y viceversa, implementar un escáner de puertos y crear su propio servidor http para atender peticiones.
Contenido
Trabajando con sockets en Python
Introducción a python para proyectos de seguridad
Introducción a los sockets
Sockets de red en Python
Módulo socket en python
Recopilación de información con sockets
Ejemplo para los métodos de socket
Búsqueda inversa
Implementar en Python un escáner de puertos con sockets
Método connect_ex()
Escáner de puertos con sockets
Explicación función escáner de puertos
Escáner de puertos avanzado
Ejecución escáner de puertos avanzado
Escáner de puertos a partir de un dominio
Función principal escáner de puertos a partir de un dominio
Implementar en Python un servidor HTTP
Métodos de socket del servidor
Implementación del servidor
Probando el servidor creando un cliente HTTP
Resumen
2 - Aplicaciones clientes-servidor con sockets en Python
Objetivo
Al finalizar esta unidad, el alumno conocerá el módulo sockets para implementar una aplicación cliente-servidor para el paso de mensajes y obtener una shell inversa en Python.
Contenido
Aplicaciones clientes-servidor con sockets en python
Métodos para enviar y recibir datos entre un cliente y un servidor
Métodos de socket del servidor
Métodos de socket del cliente
Cliente básico con el módulo de socket
Administrar excepciones de socket
Creando un cliente y un servidor TCP con sockets
Métodos para aceptar conexiones
Enviar y recibir datos del socket
Implementando el servidor TCP
Implementando el cliente TCP
Shell inversa con sockets
Resumen
3 - Módulos para realizar peticiones con Python
Objetivo
Al finalizar esta unidad, el alumno conocerá los principales módulos disponibles tanto en la librería estándar como en forma de módulo para realizar peticiones a un sitio web y una API REST.
Contenido
Módulos para realizar peticiones con Python
Protocolo HTTP y creación de clientes HTTP en python
Introducción al protocolo HTTP
Módulo http.client
Construyendo un cliente HTTP con urllib.request
Ejemplo con el método urlopen()
Objeto de respuesta
Códigos de estado
Manejo de excepciones con urllib.request
Comprobación de cabeceras HTTP con urllib.request
Ejecución del script
Personalización de cabeceras con urllib
Obtener correos electrónicos de una URL con urllib.request
Obtener enlaces de una URL con urllib.request
Módulo urllib3
Crear un cliente HTTP con requests
Introducción al módulo requests
Comprobar respuesta de una petición
Obtener el fichero robots.txt de un dominio con el módulo requests
Obtener cabeceras con el módulo requests
Ventajas del módulo requests
Realizar peticiones GET a una API REST
Realizar peticiones POST a una API REST
Realizar peticiones mediante un proxy
Gestionar excepciones con el módulo requests
Ejemplo script para tratar excepciones
Resumen
4 - Recolección de información de servidores con Python
Objetivo
Al finalizar esta unidad, el alumno conocerá los principales módulos disponibles en Python con el objetivo de extraer información de servidores y servicios que están ejecutando, así como información como nombres de dominio y banners. Con las herramientas que estudiaremos podemos sacar información que nos puede resultar útil para fases posteriores en nuestro proceso de pentesting o auditoría.
Contenido
Recolección de información de servidores con Python
Utilizando Shodan para la obtención de información de un servidor
Diferencias entre Shodan y otros buscadores
Extensión de Google Chrome
Filtros en Shodan
Servicios de Shodan
Registro en Shodan
Utilizando Python para realizar búsquedas en Shodan
Shodan API REST
Acceso a Shodan desde Python
Shodanploit
Búsquedas de Shodan en python
Realizar búsquedas por un host determinado
Ejecución ShodanSearch
Utilizando Shodan para la obtención de información de un servidor FTP
Shodan eye
Consultas sin API Key
Utilizando el registro Whois para obtener información de un servidor
Servicios whois
Obtener información de un dominio con el servicio domaintools
Módulo python-whois
Módulo ipwhois
Extracción de información de servidores DNS
Servidores DNS
Módulo DNSPython
Determinar el destino de un registro MX y su preferencia
Implementar un cliente consulta de registros DNS
Añadiendo tratamiento de excepciones a la consulta de registros DNS
Otras operaciones con el módulo dnspython
Búsqueda inversa
Servicios DNS
DNSLookup
Resumen
5 - Extracción de metadatos con Python
Objetivo
Al finalizar esta unidad, el alumno conocerá los principales módulos disponibles en Python con el objetivo automatizar la extracción de metadatos de documentos e imágenes. El proceso de extracción de información permite recoger metadatos de documentos y en ocasiones también es posible obtener la ubicación geográfica o el autor del documento.
Contenido
Extracción de metadatos con Python
Obtener información geográfica acerca de la localización de un servidor
Servicio de geolocalización freegeoip
Módulos de geolocalización en python
Métodos de Pygeoip
Geolocalización con la base de datos MaxMind
Geolocalización con geoip2-python
Geolocalización con maxminddb-geolite2
Geolocalización con python-geoip-python3
Extracción de metadatos en documentos con el módulo PyPDF2
Obtención de metadatos con PdfFileReader
Extraer información y metadatos XMP de documentos PDF
Extraer imágenes de un documento PDF
Otras herramientas
Extracción de metadatos en imágenes
Extracción de metadatos con el módulo PIL.ExifTags
Obtener los metadatos EXIF de una imagen
Obteniendo geolocalización
Extraer metadatos de imágenes web
Extrayendo metadatos de las imágenes descargadas
Resumen
6 - WebScraping con Python
Objetivo
Al finalizar esta unidad, el alumno conocerá los principales módulos disponibles en Python con el objetivo automatizar la extracción de información de un sitio web. Si queremos extraer el contenido de una página web automatizando la extracción de información, muchas veces nos encontramos con que la página web no ofrece ninguna API para obtener los datos que necesitas y es necesario recurrir a técnicas de scraping para recuperar datos de una web de forma automática. Algunas de las herramientas más potentes, las podemos encontrar en Python, entre las que podemos destacar BeautifulSoup y Scrapy.
Contenido
Web Scraping con Python
Extracción de contenidos web con Python
Parsers XML y HTML
Submódulo lxml.html
Extraer etiquetas de un sitio web con el módulo lxml
Obtener formularios de un sitio web
Expresiones xpath
Ejemplo de script utilizando expresiones xpath
Extracción de enlaces con el módulo lxml con expresiones xpath
Extracción de documentos pdf con el módulo lxml con expresiones xpath
Extraer contenido y etiquetas con BeautifulSoup
Método find_all() de BeautifulSoup
Extracción de etiquetas meta
Extracción de contenido mediante expresiones regulares
Manejo de excepciones de URL y etiquetas no encontradas
Extracción de imágenes y enlaces con el módulo bs4
Extraer enlaces a partir de una url con BeautifulSoup
Implementar un crawler de enlaces a partir de una url
Resumen
7 - WebScraping avanzado con Scrapy
Objetivo
Al finalizar esta unidad, el alumno conocerá Scrapy como framework para extraer información de sitios web de forma automática mediante la creación de spyders. Scrapy también permite exportar los datos extraídos en diferentes formatos como csv, xml y json con el objetivo de analizar estos datos posteriormente.
Contenido
Web Scraping avanzado con Scrapy
Arquitectura e instalación de Scrapy
Arquitectura de Scrapy
Instalación de scrapy
Extrayendo información mediante scrapy shell
Uso de selectores
Scrapy como framework de desarrollo de spyders
Creación de un proyecto scrapy
Spyders
Estructura de un Spyder
Creando el esqueleto de nuestro spyder
Extracción de enlaces con scrapy
Fichero BooksSpider.py
Ejecución de BooksSpider
Scrapy pipelines
Fichero configuración de scrapy settings.py
Exportación de resultados en formatos json, csv, xml
Consejos y trucos de ejecución de scrapy
Proyecto Scrapy para extraer las conferencias europython
Creación proyecto europython
Ficheros proyecto scrapy
Spyder europython
Funcionamiento del spyder
Obtener Expresiones XPath
Ejecutando el spyder Europython
Pipelines proyecto europython
Fichero pipelines.py
Settings proyecto europython
Resumen
8 - Escaneo de puertos y redes con Python
Objetivo
Al finalizar esta unidad, el alumno conocerá los principales módulos disponibles en Python con el objetivo automatizar los procesos de escáner de puertos y redes. Algunas de las herramientas que permiten realizar un escáner de puertos y automatizar la detección de servicios y puertos abiertos, las podemos encontrar en Python, entre las que podemos destacar Python-nmap. También usaremos nmap para detectar vulnerabilidades en servicios específicos gracias a los scripts de nmap.
Contenido
Escaneo de puertos y redes con python
Nmap como herramienta de escáner de puertos
Tipos de escaneo con nmap
Escaneo de puertos con Python-nmap
Método de escaneo
Obtener resultados del escaneo en formato csv
Escaneo síncrono
Ejecución escáner síncrono
Guardar resultado del escaneo en un fichero JSON
Ejecución escáner formato json
Usando PortScannerYield
Usando NMAP con el módulo os(operating system)
Usando NMAP con el módulo subproccess
Escaneo asíncrono
Ejemplo de escáner asíncrono con python-nmap
Ejecución escáner asíncrono
Ejecutar scripts de nmap para detectar servicios y vulnerabilidades
Ejecución scripts de nmap
Lanzar script categoría discovery
Lanzar script obtener cabeceras
Obtener subdominios con script de nmap
Lanzar scripts para un determinado servicio
Analizar el servicio FTP con scripts de nmap
Obtener las máquinas activas de un segmento de red
Ejecutar comando ping en Python
Ejecución script comand ping
Resumen
9 - Conexiones con servidores FTP, SFTP, SSH desde Python
Objetivo
Al finalizar esta unidad, el alumno conocerá los principales módulos disponibles en Python con el objetivo automatizar los procesos de conexión a un servidor FTP, SFTP y SSH. Algunas de las herramientas que permiten conectarnos con estos servidores las podemos encontrar en Python, entre las que podemos destacar FTPLib y Paramiko.
Contenido
Conexiones con servidores FTP, SFTP, SSH desde Python
Conexiones con servidores FTP utilizando el módulo ftplib
Módulo ftplib
Conexión con un servidor FTP
Métodos de la clase FTP
Descarga de ficheros de servidores FTP(I)
Descarga de ficheros de servidores FTP(II)
Comprobar conexión FTP anónima
Ejecución conexión FTP anónima
Proceso de fuerza bruta para conectarnos con un servidor FTP
Conexión con servidores SSH utilizando paramiko
Ejecutar comandos con paramiko
Conexión con la clase Transport
Ejecutar comandos con la clase Transport
Tratamiento de excepciones
Operaciones sobre archivos mediante el cliente SFTP
Descarga de ficheros con el cliente SFTP
Acceder a un servidor via SFTP utilizando el módulo PySftp
Descarga de un fichero utilizando el módulo PySftp
Proceso de fuerza bruta contra un servidor SSH
Ejecución script fuerza bruta
Resumen
10 - Análisis de vulnerabilidades en aplicaciones web con Python
Objetivo
Al finalizar esta unidad, el alumno conocerá las principales herramientas desarrolladas por la comunidad de Python con el objetivo de detectar vulnerabilidades en aplicaciones web como sql injection y cross site scripting utilizando la metodología OWASP. Se estudiarán con detalle las herramientas sqlmap y bandit para detectar vulnerabilidades en sitios web y aplicaciones desarrolladas en Python.
Contenido
Análisis de vulnerabilidades en aplicaciones web con Python
Introducción a la metodología OWASP
Inyección de comandos
SQL Injection
Cross-Site Scripting (XSS)
OWASP Python Security Project
Scripts en python para detectar vulnerabilidades en sitios web
Script en python para detectar SQL Injection
Script en python para detectar Cross-Site Scripting XSS
Ejecución script Cross-Site Scripting XSS
Introducción a la herramienta sqlmap para detectar vulnerabilidades del tipo sql injection
Ejecutar sqlmap sobre un dominio vulnerable
Extracción de tablas y columnas de una base de datos
Acceder a información de una tabla
Introducción a la herramienta bandit para detectar vulnerabilidades en proyectos de python
Instalar y ejecutar bandit
Análisis de vulnerabilidades con bandit
Plugins de bandit para análisis de código estático
Ejemplo módulo subprocess
Plugin SQL Inyection
Otras herramientas de análisis de código estático en python
Pyup
Safety
LGTM y reglas de seguridad en python
Ejemplo de código para detectar XSS
Detectar vulnerabilidades en sitios web con herramientas automáticas
Escáner de vulnerabilidades XSS para python 3.7
Ejecución pwnxss sobre dominio vulnerable
Escáner de vulnerabilidades en sitios web CMS
Ejecución de cmsmap en python3
Resumen