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
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

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»
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]#
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.
Los comentarios están cerrados.