Pentesting con Kali I - Conociendo Kali Linux

14 comments
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.


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. 


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.


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: 


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{~}

14 comentarios

  1. Seria Óptimo que dejes ejercicios (la practica:madre de la ciencia)

    ResponderEliminar
    Respuestas
    1. Daniel ya se tienen los ejerciciós puedes consultar en la siguiente entrada.

      Pentesting con Kali - Preguntas y Respuestas I

      Regards,
      Snifer

      Eliminar
    2. Muchas Gracias, por tu trabajo, lo expones muy bien y con la claridad que se requiere

      Eliminar
  2. Hola,

    Buena entrada, siempre viene bien repasar cosas..

    No estaria mal tu idea de dejar algun ejercicio adicional para poner en práctica lo que comentes en esta nueva serie..

    Un saludo

    Miguel

    ResponderEliminar
  3. Muy buenas,
    Antetodo gracias por el aporte, como simpre muy interesante. Tengo una duda que me gustaría resolver. Entiendo que la resolucion de los nombres se hace con la parte de | do host. He intentado hacerlo de forma aislada en una terminal pero no me ha resuelto el nombre por lo que no veo como lo hace funcionar en tu ejemplo. Podrias explicarme como resuelve los nombres?

    ResponderEliminar
    Respuestas
    1. Lastemist,

      Buenas noches comentarte que creamos un post en el cual estamos respondiendo tu duda, ademas de generar las preguntas respectivas.

      Pentesting con Kali - Preguntas y Respuestas I

      Eliminar
  4. Muchas Gracias, este aporte vale oro.

    ResponderEliminar
  5. muchas gracias por tomarse el tiempo en hacer y compartir esto

    ResponderEliminar
  6. Que groso el que escribió este post!
    José deja de joder y arranca con armitage y drozer dale papa!
    Salu2 desde uruguay ;D

    ResponderEliminar
  7. gracias por el post!muy interesante ;)

    ResponderEliminar
  8. en 1.3 he hecho lo siguiente
    He buscado en google inrul:access.log y me han salido diferentes paginas donde he seleccionado la de dregg.is (dregg.is/log/access.log), la he descargado con wget www.dregg.is y se me ha guardado en index.html.2, al abrirlo con cat index.html.2 no me sale igual que cuando lo hicimos con www.cisco.com, aqui no solo salen link sino la configuracion de la pagina, y al filtrarlo con el grep del ejemplo no me sale ningun link uanque yo puedo encontartlos leyendo el index.html.2
    Por favor alguien me pdoria decir como se hace el 1.3
    PD: en el 1.2 el servicio sysv-rc-conf no lo pueod localizar, con locate sysv-rc-conf no me sale

    ResponderEliminar