💉Bypass de comandos en Blacklist
Última actualización
Última actualización
Hemos analizado varios métodos para eludir los filtros de un solo carácter. Sin embargo, existen diferentes métodos cuando se trata de eludir los comandos incluidos en la lista negra. Una lista negra de comandos generalmente consta de un conjunto de palabras y, si podemos ofuscar nuestros comandos y hacer que se vean diferentes, es posible que podamos eludir los filtros.
Existen varios métodos de ofuscación de comandos que varían en complejidad, como veremos más adelante con las herramientas de ofuscación de comandos. Trataremos algunas técnicas básicas que pueden permitirnos cambiar la apariencia de nuestro comando para eludir los filtros manualmente.
Hasta ahora hemos logrado pasar por alto con éxito el filtro de caracteres para los espacios y los puntos y comas en nuestra carga útil. Por lo tanto, volvamos a nuestra primera carga útil y volvamos a agregar el comando whoami
para ver si se ejecuta:
Vemos que, aunque usamos caracteres que no están bloqueados por la aplicación web, la solicitud se vuelve a bloquear una vez que agregamos nuestro comando. Es probable que esto se deba a otro tipo de filtro, que es un filtro de lista negra de comandos.
Un filtro de lista negra de comandos básico PHP
se vería así:
Como podemos ver, se comprueba cada palabra introducida por el usuario para ver si coincide con alguna de las palabras incluidas en la lista negra. Sin embargo, este código busca una coincidencia exacta del comando proporcionado, por lo que si enviamos un comando ligeramente diferente, es posible que no se bloquee. Afortunadamente, podemos utilizar varias técnicas de ofuscación que ejecutarán nuestro comando sin utilizar la palabra de comando exacta.
Una técnica de ofuscación muy común y sencilla es insertar ciertos caracteres dentro de nuestro comando que normalmente son ignorados por los intérpretes de comandos como Bash
o PowerShell
y ejecutarán el mismo comando como si no estuvieran allí. Algunos de estos caracteres son una comilla simple '
y una comilla doble "
, además de algunos otros.
Las más fáciles de usar son las comillas, y funcionan tanto en servidores Linux como Windows. Por ejemplo, si queremos ofuscar el comando whoami
, podemos insertar comillas simples entre sus caracteres, de la siguiente manera:
Lo mismo funciona con comillas dobles:
Lo importante a recordar es que no podemos mezclar tipos de cotizaciones y el número de cotizaciones debe ser par. Podemos probar uno de los anteriores en nuestra carga útil (127.0.0.1%0aw'h'o'am'i
) y ver si funciona:
Como podemos ver, este método realmente funciona.
Podemos insertar algunos otros caracteres exclusivos de Linux en medio de los comandos, y el shell bash los ignorará y ejecutará el comando. Estos caracteres incluyen la barra invertida \
y el carácter de parámetro posicional $@
. Esto funciona exactamente igual que con las comillas, pero en este caso el número de caracteres no tiene por qué ser par, y podemos insertar solo uno de ellos si queremos:
También hay algunos caracteres exclusivos de Windows que podemos insertar en medio de los comandos que no afectan el resultado, como un ^
carácter de cursor ( ), como podemos ver en el siguiente ejemplo:
En la siguiente sección, analizaremos algunas técnicas más avanzadas para la ofuscación de comandos y la elusión de filtros.
Utilice lo que aprendió en esta sección para buscar el contenido de flag.txt en la carpeta de inicio del usuario que encontró anteriormente.
En la sección anterior encontramos un usuario 1nj3c70r
, vamos a intentar leer la flag dentro del directorio. Con el siguiente payload encontramos la flag, listando todos los archivos del directorio:
Vamos a modificar el payload para leer la flag de la siguiente manera:
Observad que hemos dividido el comando cat con comillas para hacer el bypass: c'a't
Como vemos conseguimos obtener la flag sin problema.