1
TABLA DE CONTENIDOS
MÓDULO III ................................................................................................................................................ 3
1. OBJETIVO DEL MÓDULO .................................................................................................... 3
2. TÉCNICAS DE ESCANEO DE USO COMÚN ..................................................................... 3
3. SCRIPTS EN LUA PARA NMAP .......................................................................................... 9
4. DESARROLLO DE SCRIPT DE ESCANEO ...................................................................... 11
5. DESARROLLO DE SCRIPT DE RECONOCIMIENTO...................................................... 13
6. BIBLIOGRAFIA .................................................................................................................... 14
2
MÓDULO III
En el módulo III se vera la creación de scripts para el proceso de
pentesting.
1. OBJETIVO DEL MÓDULO
El objetivo de este módulo es que el estudiante pueda comparar las
herramientas existentes y crear o modificar scripts durante el proceso de
pentesting
2. TÉCNICAS DE ESCANEO DE USO COMÚN
Según la metodología de EC-Council las fases del pentesting son:
Reconocimient
o
Escaneo
Ganando
acceso
Manteniendo
acceso
Borrando huellas
acceso
3
En el reconocimiento se recopila pruebas e información sobre los objetivos
que desea atacar.
Reconocimiento activo: el reconocimiento activo utiliza herramientas y
técnicas que “tocan” ligeramente al objetivo
Reconocimiento pasivo: El reconocimiento pasivo implica recopilar
información sobre su objetivo sin su conocimiento,
Un puerto de red: Es un numero que le damos a una aplicación o servicio
que está corriendo dentro de un servidor.
Herramientas más usadas para el scaneo de puertos son:
• NMAP
• Zenmap
• Ipscan
• Hping3
• Metasploit
Escaneo de red: El escaneo de red es el proceso por lo que se logra
identificarlos servicios de red, así como posible vulnerabilidades y riesgos
de seguridad
Los puertos son desde 1 a 65535
Los puertos más comúnmente usados son:
SERVICIO PUERTO
FTP 21
SSH 22
Telnet 23
HTTP 80
SMTP 25
Kerberos 88
Netbios 139
SMB 445
RDP 3389
LDAP 389
MSSQL 1433
MySQL 3306
4
Oracle 1521
Postgres 5432
VNC 5800/5900
DNS 53
NTP 123
SNMP 161/162
Para abrir (establecer) una conexión TCP se usa el 3-way handshake
SYN
SYN-ACK
ACK
Establecido
Abrir una sesión TCP
FIN
ACK
FIN
ACK
sesión
cerrada
Cerrar una sesión TCP
5
NMAP es una herramienta de escaneo de red gratuita y de código abierto
que se utiliza en pruebas de penetración para explotar y auditar redes
NMAP Usa las siguientes fases:
Fase 1 Host Discovery ARP(LAN), ICMP(WAN)
Fase 2 Escaneo de puertos
Fase 3 Fingerprint
Fase 4 Ejecución de scripts
Comodines usados frecuentemente:
-v Verbose, nos indica que esta haciendo el analisi a detalle
-p Me indica el puerto especifico
-p- Escanea todos los puertos
-sS Escaneo usando synscan, comienza con una conexión normal, pero
no se establece un handshake, solo se espera la respuesta
-O Detección del sistema operativo
-A Detección del sistema operativo y servicios
Ejemplos de nmap
6
nmap –p88 192.168.29.102
nmap –sVC 192.168.29.102
Nota: por default nmap usa los 1000 puertos mas comunes
7
Scripts en NMAP , un script tiene la capacidad de automatizar tareas
utilizando scripts personalizados, las categorías de script en nmap son:
default: Esta es la categoría predeterminada en Nmap, que incluye una gran
cantidad de scripts de reconocimiento básicos y útiles para la mayoría de los
escaneos.
discovery: Esta categoría se enfoca en descubrir información sobre la red,
como la detección de hosts y dispositivos activos, y la resolución de nombres
de dominio.
safe: Esta categoría incluye scripts que son considerados seguros y que no
realizan actividades invasivas que puedan desencadenar una alerta de
seguridad en la red.
intrusive: Esta categoría incluye scripts más invasivos que pueden ser
detectados fácilmente por un sistema de detección de intrusos o un Firewall,
pero que pueden proporcionar información valiosa sobre vulnerabilidades y
debilidades en la red.
vuln: Esta categoría se enfoca específ icamente en la detección de
vulnerabilidades y debilidades en los sistemas y servicios que se están
ejecutando en la red.
8
Ejemplo:
nmap --script smb-os-discovery.nse 192.168.29.102
3. SCRIPTS EN LUA PARA NMAP
Nmap permite personalizar y extender sus capacidades mediante la
creación de scripts personalizados en el lenguaje de programación Lua.
Los scripts en lua tienen los siguientes campos
• description: Este campo se utiliza para proporcionar una descripción
corta del script y su funcionalidad.
• categories: Este campo se utiliza para especificar las categorías a
las que pertenece el script, como descubrimiento, explotación,
enumeración, etc.
9
• author: Este campo se utiliza para identificar al autor del script.
• license: Este campo se utiliza para especificar los términos de la
licencia bajo la cual se distribuye el script.
• dependencies: Este campo se utiliza para especificar cualquier
dependencia de biblioteca o software que requiera el script para
funcionar correctamente.
• actions: Este campo se utiliza para definir la funcionalidad específica
del script, como la realización de un escaneo de puertos, la
detección de vulnerabilidades, etc.
description =[[ Muestra los puertos aabiertos TCP]]
portrule = function(host,port)
return port.protocol =="tcp"
and port.state =="open"
end
action = function(host,port)
return "Este puerto esta abierto"
end
10
4. DESARROLLO DE SCRIPT DE ESCANEO
Para hacer el escaneo de puertos usaremos un módulo de Python que nos
permitirá las conexiones TCP y UDP, donde AF_NET(ipv4) y
SOCK_STREAM(TCP)
#!/usr/bin/python3
import argparse,socket,sys # Importamos los módulos necesarios para el script
description = """ Ejemplos de uso:
+ Escaneo básico, default port 80:
python3 portScan.py -t 192.168.136.130
+ Indica un puerto específico:
python3 portScan.py -t 192.168.136.130 -p 80,443,445
+ Indica un rango de puertos a escanear:
python3 portScan.py -t 192.168.136.130 --range 1-445 """
parser = argparse.ArgumentParser(description="Port
scanning",epilog=description,formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("-t",metavar="Host",dest="host",help="Indica el host a escanear.
Obligatorio.",required="True")
parser.add_argument('-p',dest="ports",metavar="Ports",help="Indica los puertos a
escanear separados por coma. Ejemplo: -p 80,8080,443. Por defecto puerto
80",default="80")
parser.add_argument('--range',metavar="Rango",help="Indica un rango de puertos a
escanear separados por un guión. Ejemplo: --range 130-140")
params = parser.parse_args()
if params.range is None: #Si no se indica un rango de puertos, escanea los puertos
indicados en el parámetro -p
ports = params.ports.split(",")
try:
11
print("\n[*] Escaneando objetivo %s...\n" % params.host)
for port in ports:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # Se crea al objeto
socket
s.settimeout(0.3) # Indica el tiempo de intento de conexion
result = s.connect_ex((params.host,int(port)))
if result == 0: # Si el resultado de conexión en el puerto es 0, el puerto está
abierto
print("[+] Puerto %s abierto\n" % port)
else:
print("[-] Puerto %s cerrado\n" % port)
s.close()
except:
print("[!]Error de conexion con %s" %params.host)
sys.exit(1)
if params.range: # Si se indica el parámetro --range, la herramienta escaneará los
puertos que están dentro del rango indicado.
rango = params.range.split("-")
start = int(rango[0]) # Almacena el primer valor del rango pasado por parámetro
end = int(rango[1]) # Almacena el segundo valor del rango pasado por parámetro
try:
print("\n[*] Escaneando objetivo %s...\n" % params.host)
for port in range(start,end+1):
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.settimeout(0.3) # Establece el tiempo de intento de conexión
12
result = s.connect_ex((params.host,int(port)))
if result == 0: # Si el restultado de la conexión es 0, el puerto está abierto
print("[+] Puerto %s abierto\n" % port)
else:
print("[+] Puerto %s cerrado\n" % port)
s.close()
except:
print("[!]Error de conexion con el objetivo")
sys.exit(1)
5. DESARROLLO DE SCRIPT DE RECONOCIMIENTO
En el proceso de pentesting la enumeración de subdominios es una de las fases
cruciales , Al identificar los subdominios un atacante puede obtener información
valiosa de cada una de estos es un Uso de WFUZZ
import requests
# the domain to scan for subdomains
domain = "google.com"
# read all subdomains
file = open("subdomain.txt")
# read all content
content = file.read()
# split by new lines
subdomains = content.splitlines()
# a list of discovered subdomains
discovered_subdomains = []
for subdomain in subdomains:
# construct the url
url = f"http://{subdomain}.{domain}"
try:
# if this raises an ERROR, that means the subdomain does not exist
13
requests.get(url)
except requests.ConnectionError:
# if the subdomain does not exist, just pass, print nothing
pass
else:
print("[+] Discovered subdomain:", url)
# append the discovered subdomain to our list
discovered_subdomains.append(url)
# save the discovered subdomains into a file
with open("discovered_subdomains.txt", "w") as f:
for subdomain in discovered_subdomains:
print(subdomain, file=f)
6. BIBLIOGRAFIA
https://nmap.org/book/nse-language.html
https://akaj4ndr0.github.io/pythonII -socket/#
https://thepythoncode.com/article/make-subdomain-scanner-python
14
15