💉Otros operadores de inyección
Última actualización
Última actualización
Antes de continuar, probemos algunos otros operadores de inyección y veamos de qué manera diferente los manejaría la aplicación web.
Podemos comenzar con el operador AND
( &&
), de modo que nuestra carga útil final sería ( 127.0.0.1 && whoami
), y el comando ejecutado final sería el siguiente:
Como siempre debemos hacer, intentemos ejecutar primero el comando en nuestra máquina virtual Linux para asegurarnos de que sea un comando que funcione:
Como podemos ver, el comando se ejecuta y obtenemos el mismo resultado que obtuvimos anteriormente.
Ahora, podemos hacer lo mismo que hicimos antes copiando nuestra carga útil, pegándola en nuestra solicitud HTTP Burp Suite
, codificándola en URL y finalmente enviándola:
Como podemos ver, inyectamos exitosamente nuestro comando y recibimos el resultado esperado de ambos comandos.
Por último, probemos el operador de inyección OR
( ||
). El operador OR
solo ejecuta el segundo comando si el primero no se ejecuta. Esto puede resultarnos útil en casos en los que nuestra inyección interrumpiría el comando original sin tener una forma sólida de hacer que ambos comandos funcionen. Por lo tanto, el uso del operador OR
haría que nuestro nuevo comando se ejecute si el primero falla.
Si intentamos utilizar nuestro payload habitual con el operador ||
( 127.0.0.1 || whoami
), veremos que solo se ejecutará el primer comando:
Esto se debe a la forma en que bash
funcionan los comandos. Como el primer comando devuelve un código de salida 0
que indica que la ejecución se realizó correctamente, el bash
comando se detiene y no intenta ejecutar el otro comando. Solo intentaría ejecutar el otro comando si el primer comando fallara y devolviera un código de salida 1
.
Intentemos romper intencionalmente el primer comando al no proporcionar una IP y usar directamente el operador ||
( || whoami
), de modo que el comando ping
falle y nuestro comando inyectado se ejecute:
Como podemos ver, esta vez, el comando whoami
se ejecutó después de que el comando ping
fallara y nos dio un mensaje de error. Por lo tanto, ahora probemos la carga útil (|| whoami
) en nuestra solicitud HTTP:
Vemos que esta vez solo obtuvimos la salida del segundo comando como se esperaba. Con esto, estamos usando una carga útil mucho más simple y obteniendo un resultado mucho más limpio.
Estos operadores se pueden utilizar para varios tipos de inyección, como inyecciones SQL, inyecciones LDAP, XSS, SSRF, XML, etc. Hemos creado una lista de los operadores más comunes que se pueden utilizar para inyecciones:
Tipo de inyección | Operadores |
SQL Injection |
|
Command Injection |
|
LDAP Injection |
|
XPath Injection |
|
OS Command Injection |
|
Code Injection |
|
Directory Traversal/File Path Traversal |
|
Object Injection |
|
XQuery Injection |
|
Shellcode Injection |
|
Header Injection | |
Tenga en cuenta que esta tabla está incompleta y que son posibles muchas otras opciones y operadores. También depende en gran medida del entorno con el que estemos trabajando y probando.
En este módulo, nos ocuparemos principalmente de inyecciones de comandos directos, en las que nuestra entrada va directamente al comando del sistema y recibimos la salida del comando.