💉Bypass de otros caracteres en Blacklist
Además de los operadores de inyección y los caracteres de espacio, un carácter que se incluye con mucha frecuencia en la lista negra es la barra diagonal ( /
) o la barra invertida ( \
), ya que es necesario para especificar directorios en Linux o Windows. Podemos utilizar varias técnicas para producir cualquier carácter que queramos y evitar el uso de caracteres incluidos en la lista negra.
Linux
Existen muchas técnicas que podemos utilizar para incluir barras en nuestra carga útil. Una de esas técnicas que podemos utilizar para reemplazar barras (o cualquier otro caracter
) es mediante , Variables de entorno de Linux
como hicimos con ${IFS}
. Mientras que ${IFS}
se reemplaza directamente con un espacio, no existe una variable de entorno para barras o puntos y comas. Sin embargo, estos caracteres se pueden utilizar en una variable de entorno y podemos especificar el inicio
y longitud
de nuestra cadena para que coincida exactamente con este carácter.
Por ejemplo, si observamos la variable de entorno $PATH
en Linux, podría verse algo como lo siguiente:
Entonces, si comenzamos con el carácter 0
y solo tomamos una cadena de longitud 1
, terminaremos solo con el carácter /
, que podemos usar en nuestra carga útil:
Nota: Cuando usamos el comando anterior en nuestra carga útil, no agregaremos echo
, ya que solo lo usamos en este caso para mostrar el carácter generado.
Podemos hacer lo mismo con las variables de entorno $HOME
o $PWD
. También podemos utilizar el mismo concepto para obtener un carácter de punto y coma, que se utilizará como operador de inyección. Por ejemplo, el siguiente comando nos da un punto y coma:
Ejercicio: Trate de entender cómo el comando anterior generó un punto y coma y luego úselo en la carga útil para usarlo como operador de inyección. Sugerencia: El comando
printenv
imprime todas las variables de entorno en Linux, por lo que puede ver cuáles pueden contener caracteres útiles y luego tratar de reducir la cadena a ese carácter únicamente.
Entonces, intentemos usar variables de entorno para agregar un punto y coma y un espacio a nuestra carga útil ( 127.0.0.1${LS_COLORS:10:1}${IFS}
) como nuestra carga útil, y veamos si podemos omitir el filtro:
Como podemos ver, esta vez también hemos logrado pasar con éxito el filtro de caracteres.
Windows
El mismo concepto funciona también en Windows. Por ejemplo, para producir una barra en Windows Command Line (CMD)
, podemos usar echo
con una variable de Windows ( %HOMEPATH%
-> \Users\htb-student
), y luego especificar una posición inicial ( ~6
-> \htb-student
) y, finalmente, especificar una posición final negativa, que en este caso es la longitud del nombre de usuario htb-student
( -11
-> \
):
Podemos lograr lo mismo utilizando las mismas variables en Windows PowerShell
. Con PowerShell, una palabra se considera una matriz, por lo que tenemos que especificar el índice del carácter que necesitamos. Como solo necesitamos un carácter, no tenemos que especificar las posiciones de inicio y fin:
También podemos usar el comando de PowerShell Get-ChildItem Env:
para imprimir todas las variables de entorno y luego elegir una de ellas para producir el carácter que necesitamos. Intenta ser creativo y encuentra diferentes comandos para producir caracteres similares.
Cambio de carácter
Existen otras técnicas para producir los caracteres necesarios sin utilizarlos, como shifting characters
. Por ejemplo, el siguiente comando de Linux desplaza el carácter que pasamos por 1
. Por lo tanto, todo lo que tenemos que hacer es encontrar el carácter en la tabla ASCII que está justo antes del carácter que necesitamos (podemos obtenerlo con man ascii
), luego agregarlo en lugar de [
en el siguiente ejemplo. De esta manera, el último carácter impreso sería el que necesitamos:
Podemos usar comandos de PowerShell para lograr el mismo resultado en Windows, aunque pueden ser bastante más largos que los de Linux.
Caso práctico
Utilice lo que aprendió en esta sección para buscar el nombre del usuario en la carpeta '/home
'. ¿Qué usuario encontró?
Vamos a utilizar el siguiente payload:
Que va a hacer la siguiente consulta:
Encontramos un usuario: 1nj3c70r
Última actualización