Tabla de Contenidos
Python avanzado para proyectos de seguridad
Notas del curso Python avanzado para proyectos de seguridad del Clúster Tic de Galicia.
- Horas: 35
- Fecha Inicio: 11/11/2024
- Fecha Fin: 13/12/2024
Objetivo general
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.
Objetivos específicos
- 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
Temario
1. Trabajando con sockets en Python
2. Aplicaciones cliente-servidor con sockets en Python
3. Módulos para realizar peticiones con Python
4. Recolección de información de servidores con Python
5. Extracción de metadatos con Python
6. Web Scraping con Python
7. Webscraping avanzado con Scrapy
8. Escaneo de puertos y redes con Python
9. Conexiones con servidores FTP, SFTP, SSH desde Python
10. Análisis de vulnerabilidades en aplicaciones web con Python
Cuestionarios
Prueba inicial de conocimientos
¿Qué es un socket en el contexto de la programación de redes en Python?
- Un archivo de texto.
- Un canal de comunicación punto a punto entre un cliente y un servidor. (Correcto)
- Un servidor web.
- Una base de datos.
¿Qué módulo de Python es utilizado para automatizar la creación de un servidor HTTP?
- socket. (Correcto)
- os.
- sys.
- requests.
El método socket.accept() permite aceptar conexiones de un cliente en un servidor.
- Verdadero. (Correcto)
- Falso.
El método socket.recv() se utiliza para recibir datos de un cliente en un servidor Python.
- Verdadero. (Correcto)
- Falso.
¿Qué método se utiliza en Python para implementar un escáner de puertos?
- bind().
- listen().
- connect_ex(). (Correcto)
- send().
La familia de sockets AF_INET se utiliza para las direcciones IPv6.
- Verdadero.
- Falso.
¿Qué hace el método sendall() en un socket de Python?
- Envía todos los datos al servidor.
- Envía todos los datos en el buffer al cliente. (Correcto)
- Recibe datos del cliente.
- Cierra la conexión.
El código de estado HTTP 200 indica que la petición fue exitosa.
- Verdadero. (Correcto)
- Falso.
¿Cuál es el principal objetivo del módulo requests en Python?
- Crear servidores web.
- Realizar peticiones HTTP a sitios web. (Correcto)
- Enviar correos electrónicos.
- Manejar excepciones de conexión.
Scrapy permite exportar datos extraídos de un sitio web en formatos JSON, CSV y XML.
- Verdadero. (Correcto)
- Falso.
Trabajando con sockets en Python
Los sockets en Python permiten la comunicación entre procesos en la misma máquina o en máquinas diferentes.
- Verdadero. (Correcto)
- Falso.
¿Qué método de socket convierte un nombre de host en una dirección IPv4?
gethostbyaddr().gethostbyname(). (Correcto)getfqdn().getservbyport().
¿Qué protocolo es utilizado por los sockets de flujo en Python?
- UDP.
- ICMP.
- TCP. (Correcto)
- HTTP.
¿Qué método en Python se utiliza para resolver un nombre de dominio a partir de una dirección IP?
gethostbyname().getfqdn().gethostbyaddr(). (Correcto)connect_ex().
El método socket.getservbyport() permite obtener el nombre de un puerto a partir de su número.
- Verdadero. (Correcto)
- Falso.
¿Qué hace la función socket.send() en un servidor HTTP implementado en Python?
- Recibe datos de un cliente.
- Conecta el servidor con el cliente.
- Envía datos al cliente. (Correcto)
- Cierra la conexión con el cliente.
¿Qué tipo de socket se utiliza para trabajar con UDP en Python?
- SOCK_DGRAM. (Correcto)
- SOCK_STREAM.
- AF_INET.
- AF_INET6.
¿Qué método se utiliza para escuchar conexiones entrantes en un servidor en Python?
bind().listen(). (Correcto)recv().accept().
¿Qué función de socket permite la búsqueda inversa de una dirección IP?
gethostbyname().gethostbyaddr(). (Correcto)getfqdn().connect_ex().
¿Qué protocolo utiliza el socket AF_INET en Python?
- UDP.
- ICMP.
- TCP. (Correcto)
- FTP.
Examen 2
¿Qué método del módulo socket se utiliza para recibir datos desde un cliente?
send().connect().recv(). (Correcto)accept().
El método bind() en el servidor permite asociar una dirección IP y un puerto con un socket.
- Verdadero. (Correcto)
- Falso.
¿Qué método del módulo socket en Python permite conectar un cliente a un servidor?
- connect(). (Correcto)
- bind().
- listen().
- close().
Identifica las funciones clave del módulo requests en Python. (Respuesta múltiple).
get(). (Correcto)post(). (Correcto)send().bind().
¿Qué herramienta se describe como el «Google de los hackers» debido a su capacidad para rastrear servidores y dispositivos conectados a Internet?
- Nmap.
- Wireshark.
- Shodan. (Correcto)
- Burp Suite.
¿Qué información puede proporcionar el servicio WHOIS?
- Información de registro de un dominio. (Correcto)
- Dirección IP de un servidor.
- Contenidos de un servidor web.
- Lista de puertos abiertos.
La API de Shodan permite buscar información sobre servidores y dispositivos conectados a Internet utilizando filtros como el número de puerto.
- Verdadero. (Correcto)
- Falso.
¿Qué es el código 404 en una respuesta HTTP?
- Recurso no encontrado. (Correcto)
- Petición exitosa.
- Error del servidor.
- Petición redirigida.
¿Qué módulo en Python se utiliza para realizar consultas WHOIS de dominios?
- python-whois. (Correcto)
- urllib3.
- requests.
- socket.
¿Qué función se utiliza para obtener los metadatos de un archivo PDF en Python?
pdfinfo().get_pdf_data().PdfFileReader(). (Correcto)fetch_pdf().
Examen 3
El módulo ftplib en Python permite realizar conexiones cifradas con TLS a servidores FTP.
- Verdadero. (Correcto)
- Falso.
¿Qué método de la clase FTP en ftplib se utiliza para cambiar de directorio en un servidor FTP?
cwd()(Correcto)dir().nlst().quit().
¿Cuáles son los métodos comunes utilizados para realizar peticiones HTTP con el módulo requests en Python? (Respuesta múltiple).
get(). (Correcto)post(). (Correcto)send().put(). (Correcto)
Qué tipo de ataque se aprovecha de la falta de validación en la entrada de datos del usuario en una aplicación web?
- SQL Injection. (Correcto)
- XSS.
- Inyección de comandos.
- Fuerza mixta.
¿Qué técnica de scraping se basa en obtener la información estructurada de un sitio web HTML y procesarla?
- Screen scraping
- Data mining
- Web scraping (Correcto)
- API scraping
Nmap se utiliza exclusivamente para el escaneo de puertos en redes locales.
- Verdadero.
- Falso. (Correcto)
¿Qué componente de Scrapy es responsable de realizar las peticiones HTTP y aplicar reglas de extracción de datos?
- Scheduler.
- Downloader.
- Spider. (Correcto)
- Engine.
¿Cuál es el propósito del módulo Paramiko en Python?
- Transferir archivos por FTP.
- Crear scripts de automatización.
- Conectar a servidores SSH y ejecutar comandos de forma remota. (Correcto)
- Extraer datos de sitios web.
¿Qué método de ftplib permite descargar archivos desde un servidor FTP en Python?
upload().retrbinary(). (Correcto)put().fetch().
¿Qué función de lxml se utiliza para obtener los enlaces de una página web mediante XPath?
parse().fetch().xpath(). (Correcto)html().
Examen final
¿Qué función se utiliza para crear un socket en Python?
socket.bind().socket.socket(). (Correcto)socket.recv().socket.send().
¿Qué puerto utiliza comúnmente el protocolo HTTP?
- 22.
- 80. (Correcto)
- 38.
- 90.
El método requests.get() se utiliza para enviar una petición HTTP GET a un servidor web.
- Verdadero. (Correcto)
- Falso.
De los siguientes, ¿cuáles son códigos de estado en HTTP? (Respuesta múltiple).
- 200: éxito. (Correcto)
- 404: error del cliente. (Correcto)
- 600: Invalid Request.
- 500: error del servidor. (Correcto)
¿Qué método del módulo urllib.request se utiliza para abrir una URL en Python?
get().post().urlopen(). (Correcto)fetch().
¿Qué módulo de Python permite la extracción de información geográfica a partir de una dirección IP?
- re.
- Pygeoip. (Correcto)
- datetime.
- sys.
¿Qué es el método recv() en la conexión de sockets en Python?
- Un método que permite recibir datos desde el cliente. (Correcto)
- Un método que envía datos al servidor.
- Un método que establece la conexión.
- Un método que cierra la conexión.
¿Qué función de lxml permite analizar un documento HTML usando expresiones XPath en Python?
find().XPath(). (Correcto)get().parse().
De las siguientes, identifica las vulnerabilidades comunes en aplicaciones web. (Respuesta múltiple)
- SQL Injection.(Correcto)
- Cross-Site Scripting (XSS).(Correcto)
- Buffer overflow.
- Inyección de comandos.(Correcto)
El módulo requests en Python permite realizar peticiones HTTP y manejar respuestas JSON.
- Verdadero. (Correcto)
- Falso.
