Esta es la primera de las 18 cápsulas en las que trataremos sobre Penetration With Kali Linux, la estructura será similar a la de la certificación OSCP de OffSec.
A lo largo de las entradas veremos básicamente las cinco fases de un penetration testing, adicionando el manejo de algunas tools esenciales como metasploit, nmap, wireshark, ncat, etc. Veremos también algo de web explotation y crearemos nuestro propio laboratorio para realizar las prácticas. (Para abordar sobre la terminologia y demas pasos de un Pentesting seguir el siguiente post - Pentesting con Kali Taller #1)
Aclaración: Por una cuestión de gusto, comodidad y performance, la distro a utilizar será la Kali 1.1.0a lanzada el 13 de Mayo de 2015, sin embargo, quien guste utilizar la 2.0 puede hacerlo tranquilamente ya que las tools que veremos están en ambas y el resto es técnica. Con ésto, quiero decir que no es fundamental la distro a utilizar, pueden seguir las entradas con Parrot, BackBox, Cyborg o la que quieran, todas están basadas en linux, tal vez cambie un poco la estructura de directorios pero en esencia es lo mismo.
No vamos a detallar el proceso de descarga e instalación, solo mencionar que la ISO la pueden descargar desde acá y la documentación de Instalación. (Si desean ver algun video sigan el siguiente post - Pentesting con Kali #2 Instalación y conociendo el entorno)
Para las cápsulas utilizaremos una máquina virtual sobre VMWare, pueden hacerlo también con Virtual Box. No hace falta que instalen la iso, pueden correrla en LiveCD, pero hay que tener en cuenta que si guardas o instalas cosas y luego apagas la máquina virtual vas a perder los cambios realizados, en mi caso la dejo en pausa.
Por las dudas, las credenciales por defecto son root-toor.
Una vez levantado el Kali, el primer paso que nos conviene dar, es abrir una consola y lanzar los siguientes comandos:
apt-get dist-upgrade - Instala actualizaciones y dependencias.
updatedb - Actualiza una base de datos y archivos del sistema.
apt-get update - Actualizar los repositorios y listado de paquetes.
apt-get upgrade - Actualización del sistema operativo y aplicaciones.
Bien, si hasta aquí sigue todo funcionando y no nos arrojó ningún kernel panic vamos bien.
Esquema:
1- Conociendo Kali Linux
1.1 Familiarizándonos con la distro.
1.2 Manejo de servicios.
1.3 Entorno Bash & shell scripting.
1.1 Familiarizándonos con la distro.
Comenzaremos viendo la estructura de Kali. Como todo Linux, tiene un root y debajo los 15 directorios:
Los recursos más importantes de Kali es el siguiente:
Veamos la forma de localizar archivos:
Find: Si queremos buscar un archivo por nombre, entonces usaremos find de la siguiente manera: find -name NombreDeArchivo
Locate: este comando es más rápido que find y puede buscar en todo el sistema de archivos con facilidad. Este comando no va a funcionar si no realizamos el updatedb anterior:
**locate NombredeArchivo **
Which: nos sirve para averiguar dónde se encuentra instalado un determinado programa:
which NombreDeArchivo
Todos poseen parámetros para filtrar las búsquedas, como son nociones muy básicas de linux nosotros sólo las mencionaremos. Si no conocías estos comandos, estás invitado a profundizar.
1.2 Manejo de servicios.
Kali Linux trae la mayoría de los servicios como MySql, ssh, etc apagados por defecto. Por lo tanto, si queremos utilizar servicios como por ejemplo apache, debemos levantarlo primero.
Para inicializar un servicio debemos utilizar la siguiente sintaxis:
#service nombre-del-servicio start
Si queremos hacer que el servicio se inicialice al bootear nuestro Kali:
#update-rc.d nombre-del-servicio enable
Para finalizar o para un servicio:
#service nombre-del-servicio stop
Comencemos manejando ssh para poder conectarnos a nuestro Kali con una comunicación cifrada bajo protocolo seguro.
Inicializamos ssh de la siguiente manera:
#service ssh start
Para corroborar que el servicio ha sido inicializado podemos ejecutar el siguiente comando:
#netstat -antp|grep sshd
De ésta manera validamos que SSH está funcionando y corriendo en el puerto TCP 22 mediante el uso del comando netstat y canalizando el resultado en el comando grep para filtrar la salida para sshd. En el caso de que nos sea útil tener el servicio ssh inicializado al bootear nuestro Kali, deberíamos llamar al archivo update-rc.d que está ubicado en /usr/sbin/ para decirle que ssh debe estar habilitado.
#update-rc.d ssh enable
1.3 Entorno Bash & Shell Scripting
Bash proporciona un potente entorno para trabajar, y un motor de secuencias de comandos para hacer uso de la automatización de los procedimientos mediante un script bash. Supongamos que queremos identificar los subdominios y sus correspondientes direcciones ip pertenecientes a un sitio, si lo hacemos de manera manual sería largo y tedioso, con una herramienta automatizada podríamos hacerlo más rápido, pero tal vez no es exactamente lo que buscamos, en cambio si lo hacemos con un script podemos manejar de manera granular lo que estamos buscando
$wget www.cisco.com
Aquí hemos descargado el index de cisco.com, para poder verlo podemos hacer un cat o para abrirlo en un editor podemos usar nano o vi
cat index.html o nano index.html
```(Es recomendable investigar un poco más sobre estos comandos si se desconocen).
Para buscar los hipervínculos podemos usar grep, si tiramos un grep de todos los href= veremos algo molesto de entender.
[![](http://2.bp.blogspot.com/-9maA2qsWmhM/VhYDSJOiQSI/AAAAAAAAAQs/g3GF0-2y4XY/s640/grep_href.png)](http://2.bp.blogspot.com/-9maA2qsWmhM/VhYDSJOiQSI/AAAAAAAAAQs/g3GF0-2y4XY/s1600/grep_href.png)
Si nos ayudamos de otros comandos para parsear el contenido como lo es cut, podremos visualizar el contenido de manera algo más amigable.
grep “href=” index.html | cut -d “/” -f3
Aquí usamos grep (para buscar) + string a buscar + archivo en el cual buscar | (para concatenar comandos) + cut (para extraer segmentos) + -d (carácter delimitador) + "/" (como carácter delimitador) + -f (para seleccionar rango del tabulador) + 3 (rango tabulado).
De esta forma obtendremos todos los hipervínculos del sitio.
[![](http://2.bp.blogspot.com/-ARd777kwtC8/VhYG47vHTnI/AAAAAAAAAQ4/1_MBuNBdNh4/s640/grep_href2.png)](http://2.bp.blogspot.com/-ARd777kwtC8/VhYG47vHTnI/AAAAAAAAAQ4/1_MBuNBdNh4/s1600/grep_href2.png)
Bien, ahora supongamos que queremos eliminar los repetidos y también ordenarlos alfabéticamente para verlos de manera má ordenada.
grep “href=” index.html | cut -d “/” -f3 | grep “\.” | cut -d ‘"’ -f1 | sort -u
El nuevo comando que hemos agregado es sort con el parámetro -u , el primero ordena la lista dada y el segundo hace que el orden sea único.
[![](http://3.bp.blogspot.com/-E_Ko4GleACQ/VhYG_1zfjxI/AAAAAAAAARE/ikHxhdImrrU/s640/grep_cut.png)](http://3.bp.blogspot.com/-E_Ko4GleACQ/VhYG_1zfjxI/AAAAAAAAARE/ikHxhdImrrU/s1600/grep_cut.png)
Hasta aquí ya tenemos nuestro listado de urls únicas que hemos extraído del sitio, ahora obtengamos las direcciones ip de cada uno.
Podríamos hacerlo con tools como nmap pasándole la lista, pero no es la idea, buscamos aprender el proceso que las herramientas automatizan, vamos a hacer un script que nos liste las direcciones ip de cada url.
Primero tenemos que guardar nuestro listado, para ello:
grep “href=” index.html | cut -d “/” -f3 | grep “\.” | cut -d ‘"’ -f1 | sort -u > list.txt
Podemos hacer un cat de list.txt para corroborar si es lo mismo que hemos visto en pantalla.
for url in $(cat list.txt); do host $url; done | grep “has address” | cut -d " " -f4 | sort -u
Aquí decimos que a la variable url se le asignan los valores de cada una de las urls que tenemos en nuestro list.txt, obtenga el host y luego parseamos con los comandos que ya conocemos.
Entonces obtenemos el siguiente listado de direcciones ip únicas:
[![](http://2.bp.blogspot.com/-bwpbfGqOYvw/VhYIIq17CeI/AAAAAAAAARM/BnBWkCIpt-s/s640/grep_2for.png)](http://2.bp.blogspot.com/-bwpbfGqOYvw/VhYIIq17CeI/AAAAAAAAARM/BnBWkCIpt-s/s1600/grep_2for.png)
A este ejemplo le podemos adicionar parámetros al comando host para descubrir servicios activos entre otras cosas.
Hasta aquí el primer post sobre penetration with kali, es totalmente introductorio, si ya conocían lo expuesto espero que les haya servido para refrescar un poco, en caso de no conocer, les recomiendo busquen algun manual de linux básico para familiarizarse con el entorno y capacidades del sistema operativo linux independientemente de la distro.
Me gustaría saber su opinión respecto a si prefieren que deje algunos ejercicios adicionales al finalizar cada módulo o con los ejemplos del post les es suficiente.
Como siempre, cualquier duda o consulta, estamos por aquí.
Regards{~}