linux-soft-exploit-suggester - Cuando solo entrar no es suficiente

Publicada en Publicada en Análisis de vulnerabilidades, Linux, Pentesting

Buenas compañeros, vengo a presentaros una herramienta que puede ayudaros con la escalada de privilegios en sistemas Linux, linux-soft-exploit-suggester.

Durante el proceso de una intrusión/auditoria, una vez conseguido acceso a un sistema, el siguiente paso es buscar una forma para escalar privilegios, porque no es lo mismo entrar que ownear la maquina completamente y es que ser root marca la diferencia.

Lo normal a la hora de buscar una elevación de privilegios suele ser comprobar; ficheros setuid/setgid, servicios, exploits de Kernel, tareas programadas, ficheros de configuración y un largo etcétera.

Es menos común y suele ser un proceso más tedioso, comprobar que todo el software instalado en la maquina no se encuentre afectado por alguna vulnerabilidad que nos facilite la elevación.

Esta herramienta surge de esta necesidad, encontrada a lo largo de auditorías, laboratorios y CTFs, viendo que existen numerosas herramientas para buscar los puntos comunes, pero ninguna para auditar a ese gran olvidado, el Software.

linux-soft-exploit-suggester está inspirada en otras herramientas como linuxprivchecker.py, linux-exploit-suggester, Windows-Exploit-Suggester y searchexploit. Pero en este caso no buscamos exploits para el kernel sino en todo el software que tenga instalado la máquina, con lo que nos ayuda a encontrar todo el software vulnerable y métodos de elevación.

linux-soft-exploit-suggester está desarrollado en Python y dispone de varias opciones para obtener un resultado más fino.

 

Instalación

El primer paso es la instalación, es sencillo, simplemente clonamos el repositorio. No necesitamos instalar módulos adicionales porque todos los módulos que utiliza normalmente se encuentran en la instalación de Python por defecto.

git clone https://github.com/belane/linux-soft-exploit-suggester

Si lo preferimos también podemos descargar el script directamente con wget

wget https://raw.githubusercontent.com/belane/linux-soft-exploit-suggester/master/linux-soft-exploit-suggester.py

 

Uso básico

Para la búsqueda de vulnerabilidades el script analiza una lista con el software instalado que especificamos con la opción --file / -f

python linux-soft-exploit-suggester.py --file packages

 

Lista de Software

Esta lista debemos obtenerla del sistema a auditar. La herramienta soporta varios formatos de lista, vamos a ver cada uno.
Si se trata de una distribución basada en Debian, primero generamos la lista de paquetes instalados y a continuación la proporcionamos al script:

dpkg -l > packages
python linux-soft-exploit-suggester.py --file packages

La aplicación funciona por defecto con paquetería Debian/Ubuntu, por lo que si proporcionamos una lista de paquetes de Red Hat o Centos debemos usar el parámetro --distro / -d
En una distribución basada en Red Hat como CentOS, generamos la lista de software instalado y ejecutamos el script añadiendo la opción --distro redhat:

rpm -qa > packages
python linux-soft-exploit-suggester.py --file packages --distro redhat

En el caso de que prefiramos utilizar dpkg-query para generar la lista de paquetes instalados, añadimos la opción --clean

dpkg-query -W > packages
python linux-soft-exploit-suggester.py --file packages --clean

Lista de paquetes

Update DB

Uno de los puntos fuertes de la herramienta es que utiliza el listado de exploits de exploit-db.com por lo que siempre podemos disponer de una versión actualizada con los últimos exploits.
Con la opción --update descarga la última versión del fichero file.csv con todos los exploits actualizados.

python linux-soft-exploit-suggester.py --update

 

DB

La opción --db permite especificar donde se encuentra el fichero de exploits, por defecto el script lo busca en el mismo directorio, y en caso de ejecutarse en Kali Linux lo busca en la ruta en la que Kali lo almacena (/usr/share/exploitdb/files.csv).

python linux-soft-exploit-suggester.py --file packages --db file.csv

 

Output

La salida del script es una lista de posibles exploits que incluye en este orden: título del exploit, tipo (local, remoto, dos…), nombre y versión del software instalado, ruta del exploit (en Kali Linux) y URL del exploit en exploit-db.

 

Afinando nuestras búsquedas: level, type y filter

Las siguientes son las opciones más importantes y nos asegurarán el éxito en la búsqueda de exploits.

Level

Por defecto (level 1) se buscan exploits que afecten a la misma versión que se encuentra instalada, pero en muchos casos los exploits afectaran a versiones genéricas y querremos ampliar la búsqueda.
Con la opción --level indicamos que grado de especificación queremos buscar en la versión.
Lo vemos más claro con unos ejemplos, si la aplicación VulnSoft se encuentra instalada con la versión 1.2.3.a

--leve 1, busca exploits para VulnSoft 1.2.3.a
--leve 2, busca exploits para VulnSoft 1.2.3
--leve 3, busca exploits para VulnSoft 1.2
--leve 4, busca exploits para VulnSoft 1
--leve 5, busca exploits para VulnSoft y cualquier versión.

Los niveles 4 y 5 amplían mucho la búsqueda y es recomendable usar estos niveles junto alguna de las opciones que vamos a ver a continuación.

Type

Con esta opción filtramos los exploits por tipo; remotos, locales o denegaciones de servicio (remote, local, dos).

python linux-soft-exploit-suggester.py --file packages --type local

Si no especificamos nada mostrará todos los tipos de exploits a excepción de las denegaciones de servicio. Podemos usar --type dos para que solo muestre estos exploits o usar la opción --dos para que los incluya en todas las búsquedas.

Filter

Si buscamos exploits de algún software en concreto o de algún tipo podemos filtrar los exploits por palabras clave. Por ejemplo, si buscamos exploits de buffers overflow, haremos:

python linux-soft-exploit-suggester.py --file packages --filter overflow

O mejor, si buscamos elevaciones, filtramos por "escalation":

python linux-soft-exploit-suggester.py --file packages --filter escalation

Tips

Si estamos buscando una escalada de privilegios, podemos centrarnos en el software más propenso a ser explotado, este es el software que se encuentra corriendo actualmente o aquel que contenga binarios con setuid activado.
Para generar estos listados podemos hacer un poco de Command Line Kung Fu.
Lista de paquetes del software en ejecución:

for i in $(ps auex|sed -e ':l;s/  / /g;t l'|cut -d' ' -f11|grep -v '\['|grep '/'|sort -u); \
do \
dpkg -l | grep "^ii  `dpkg -S $i 2>&1|cut -d':' -f1`" |tee -a potentials; \
done

Lista de paquetes con binarios con el setuid activado:

for i in $(find / -perm -4000 -o -perm -2000 -type f 2>/dev/null); \
do \
dpkg -l | grep "^ii  `dpkg -S $i 2>&1|cut -d':' -f1`"|tee -a potentials; \
done

Eliminamos los duplicados de la lista y probamos con la nueva lista de paquetes más propensos a facilitarnos la elevación:

sort -u potentials > potentials_nodup
python linux-soft-exploit-suggester.py --file potentials_nodup --level 2 --type local

 

 

Conclusión

Linux-soft-exploit-suggester está enfocado a buscar elevaciones, pero puede ser utilizado para listar todo el software vulnerable en el sistema. Si lo combinamos con las opciones y trucos que hemos visto puede facilitar mucho el trabajo.
Espero que os haya gustado la herramienta y que os sirva en futuras auditorias o CTFs. Podéis encontrarla en GitHub y los commits son bienvenidos :).

 

2 comentarios en “linux-soft-exploit-suggester - Cuando solo entrar no es suficiente

  1. Hola, es muy interesante, lo he probado y funciona estupendo en los debian* pero en servidores centos no consigo que lea la lista de paquetes, aunque le ponga lo de --distro redhat
    Sabes porqué puede ser? Muchas gracias

    [root@server opt]# head packages
    libaps-1.0.8-centos6.798670.16071418.x86_64
    perl-Convert-BinHex-1.119-10.1.el6.noarch
    dmidecode-2.12-7.el6.x86_64
    psa-libpam-plesk-17.0.17-cos6.build1700161028.14.x86_64
    freeze-2.5.0-11.el6.x86_64
    libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64
    zlib-1.2.3-29.el6.x86_64
    nagios-common-3.5.1-1.el6.x86_64
    sw-libboost-system1.49.0-1.49.0-13080810.x86_64
    psa-phpmyadmin-4.6.6-cos6.build1700170125.17.noarch

    [root@server opt]# python linux-soft-exploit-suggester.py --file packages --distro redhat

    | _ __ _ _ | _ _ | _ | __ __ __ _ __ | _ _
    |·| || |\/ (_ | ||_ |- /_)\/| \|| |·|- (_ | || )| )/_)(_ |- /_)|
    ||| ||_|/\ __)|_|| |_ \_ /\|_/||_|||_ __)|_||_/ |_/ \_ __) |_ \_ |
    | _/ _/

    Wrong package list format!
    [root@server opt]#

    1. Buenas Ruben, me alegra que te guste 😉
      Lo he revisado y seguramente no reconoce el formato porque encuentra lineas vacías, tal vez tengas alguna al final del fichero de la lista de paquetes. Prueba a borrar las lineas en blanco.
      Si no, acabo de subir una ultima versión a Github que contempla estos casos, con que actualices debería funcionar.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *