
Un PoC para CVE-2020-24913, una vulnerabilidad de inyección SQL en qcubed (todas las versiones incluyendo 3.1.1) en profile.php a través del parámetro strQuery permite a un atacante no autenticado acceder a la base de datos inyectando código SQL mediante una solicitud POST manipulada.
Un PoC para CVE-2020-24913, una vulnerabilidad de inyección SQL en qcubed (todas las versiones incluida la 3.1.1) en profile.php a través del parámetro strQuery permite a un atacante no autenticado acceder a la base de datos inyectando código SQL mediante una solicitud POST manipulada. Este PoC se realiza utilizando una base de datos MySQL. No pudimos usar un payload de consultas apiladas (como se puede hacer con Postgres) y tuvimos que explotar esta vulnerabilidad con un enfoque basado en tiempo.
En el parámetro "strProfileData", usamos el siguiente payload (sin codificar): a:1:{i:0;a:3:{s:12:"objBacktrace";a:1:{s:4:"args";a:1:{i:0;s:3:"pwn";}}s:8:"strQuery";s:38:"(SELECT * FROM (SELECT(SLEEP(10)))CP);";s:11:"dblTimeInfo";s:1:"1";}}
El parámetro vulnerable es "strProfileData". Una solicitud exitosa para enviar al servidor tiene este aspecto. El array serializado de PHP que se envía en este parámetro debe estar codificado en base64.
En las siguientes imágenes, el parámetro strProfileData ha sido decodificado en base64 para que el lector pueda verlo más claramente, pero como se mencionó anteriormente, debe enviarse codificado en base64.
La siguiente solicitud contiene una consulta que hace que el servidor duerma 10 segundos. Vamos a explotar la vulnerabilidad de inyección SQL enviando una consulta SQL a la base de datos que la obliga a esperar una cantidad específica de tiempo (en segundos) antes de responder.
Y para obtener los datos de la base de datos, vamos a utilizar una estructura IF que hace que la base de datos duerma más o menos tiempo dependiendo de si la condición es verdadera o falsa.
En las siguientes imágenes obtenemos los primeros caracteres de la versión de la base de datos (8.0.XX)
Usamos la consulta SQL "SLEEP(5-(IF(SUBSTRING(@@version,X,1)='Y',2,5)))" que hace que la base de datos duerma (5-2)=3 segundos si la condición es verdadera, o que hace que la base de datos duerma (5-5)=0 segundos si la condición es falsa. La condición es que el carácter de la versión de la base de datos en la posición X sea igual al carácter Y.
