
Exploit de Prueba de Concepto para la vulnerabilidad de inyección SQL en com_fields de Joomla 3.7.0 (CVE-2017-8917), que demuestra detección, enumeración y extracción de datos en un flujo de trabajo compatible con CTF.
Este repositorio contiene un proof of concept (PoC) simple y apto para CTF para la vulnerabilidad de inyección SQL com_fields de Joomla (CVE-2017-8917). El objetivo es mantener el flujo de trabajo ligero mientras se muestra el flujo completo de explotación: detección, enumeración y extracción de datos.
Vulnerabilidad: Inyección SQL en el componente com_fields de Joomla.
Causa raíz: El parámetro list[fullordering] no está debidamente sanitizado, lo que permite inyectar SQL en la consulta generada. Cuando se elabora con un payload basado en errores (por ejemplo, UpdateXML), el resultado SQL puede ser mostrado en la respuesta, permitiendo la extracción de datos.
Cómo se explota (alto nivel):
index.php?option=com_fields&view=fields&layout=modal con el parámetro list[fullordering] establecido en un payload malicioso.UpdateXML) para forzar a la base de datos a mostrar los resultados.<title>) y extraer la salida inyectada.A continuación se muestran los componentes más críticos.
parse_args()Analiza los argumentos de la CLI en un objeto args simple con host y debug. El script asume HTTP en el puerto 80 y construye la URL base desde --host.
run_exploit()run_exploit() es la función principal de orquestación:
requests.Session() para que las cookies y cabeceras persistan.request_title(): Envía una solicitud y extrae el valor de <title>. El PoC usa SQLi basado en errores para filtrar datos en esa etiqueta, por lo que este es el núcleo de extracción de datos.build_params(): Crea los parámetros de solicitud vulnerables con la SQL inyectada.sql_list() y dump_table() automatizan la enumeración y la extracción por fragmentos._fetch_token()El token CSRF se extrae de la página de inicio de sesión de Joomla. Aunque algunos escenarios pueden no requerirlo, muchas rutas de Joomla aún imponen comprobaciones CSRF. Incluirlo:
wrap_payload() y encode_sql_string()Estos ayudantes generan el payload de inyección real:
wrap_payload() envuelve una consulta sin procesar en UpdateXML(...) para forzar la salida basada en errores.encode_sql_string() convierte cadenas en expresiones CHAR(...) para evitar problemas de comillas._dump_table())Las filas se concatenan con un separador y se obtienen en subcadenas para evitar truncamiento. Esto mantiene la salida consistente incluso cuando los valores de las filas son largos.
python main.py --host <TARGET_IP>
Salida de depuración opcional:
python main.py --host <TARGET_IP> --debug
└─$ python exploit.py --host <TARGET>
]LLLLLLmmmmmLLLLLL[
]LLLLLLLLLLLLLLLLL[
]LLLLLLLLLLLLLLLLL[
]LLLLLLLLLLLLLLLLL[
]LLLLLLLLLLLLLLLLL[
ms. ]LLLLLLLLLLLLLLLLL[ ,m
]LLLLs. ]LLLLLLLL~+LLLLLLL[ _gLLLL
LLLLLLLL_. LLLLLLLL ~~\LLLL[ ,gLLLLLLLi
dLLLLLLLLLLm_ -LLLLLLLo LLL[ _mLLLLLLLLLL.
iLLLLLLLLLLLLLLs. ]LLf` , 'c LLL[ ,gLLLLLLLLLLLLLL
iLLLLLLLLLLLLLLLLLLsgL` 'c- \. LLLLLLLLLLLLLLLLLLLLLL
,LLLLLLLLLLLLLLLLLLLLL! =__/Li iLLLLLLLLLLLLLLLLLLLLLLL
gLLLLLLLLLLLLLLLLLLLLLL imm_.Y~'` LLLLLLLLLLLLLLLLLLLLLLLLL.
dLLLLLLLLLLLLLLLLLLLLLLL 'LL_ dLLLLLLLLLLLLLLLLLLLLLLLLLLi
,LLLLLLLLLLLLLLLLLLLLLLLLLi ~--__LLLLLLLLLLLLLLLLLLLLLLLLLLLLs
'LLLLLLLLLLLLLLLLLLLLLLLLLLs. LLLLLLLLLLLLLLLLLLLLLLLLLLLLL~
'LLLLLLLLLLLLLLLLLLLLLLLLLL_. LLLLLLLLLLLLLLLLLLLLLLLLf
'LLLLLLLLLLLLLLLLLLLLLLLLLLm_ 'LLLLLLLLLLLLLLLLLLLf`
'LLLLLLLLLLLLLLLLLLLLLLLL'Lm_ LLLLLLLLLLLLLLLL`
LLLLLLLLLLLLLLLLLLLLLL 'LL LLLLLLLLLLLLLf
'LLLLLLLLLLLLLLLLLLL L LLLLLLLLLLL~
_LLLLLLLLLLLLLLL !i ] ,LLLLLLLLLLLs.
gLLLLLLLLLLLLLLLLL! 's [ _mLLLLLLLLLLLLLLLs
gmLLLLLLLLLLLLLLLLLLL ~eLLLLLLLLLLLLLLLLLLLLLms
_gLLLLLLLLLLLLLLLLLLLLLL. 'LLLLLLLLLLLLLLLLLLLLLLLs_
_gLLLLLLLLLLLLLLLLLLLLLLLLLL_ !LLLLLLLLLLLLLLLLLLLLLLLLs.
,gLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLm_ YLLLLLLLLLLLLLLLLLLLLLLLLLms
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLs ]LLLLLLLLLLLLLLLLLLLLLLLLLL`
'LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 'YL ]LLLLLLLLLLLLLLLLLLLLLLLLf
'LLLLLLLLLLLLLLLLLLLLLLLLLLLf`! f ,LLLLLLLLLLLLLLLLLLLLLLLL!
'LLLLLLLLLLLLLLLLLLLLLLLLL[ LmmLLLLLLLLLLLLLLLLLLLLLLLL`
LLLLLLLLLLLLLLLLLf LLLLi t LLLLLLL LLLLLLLLLLLLLLLLL!
'LLLLLLLLLLLLLLLLf LLLL[ '*LLLLLLL 'LLLLLLLLLLLLL[
!LLLLLLLLLf` LLLLLs 'YLLLLL ~LLLLLLLLLL
LLLLLLf~ LLLLLLLs LLLLL ~LLLLLL`
'LLL~ LLLLLLLLLm iLLLLL ~LLL~
~` LLLLLLLL[LLmLLLLLL '`
LLLLLL`d[ LLLLLLLL
LLLLLLdL[ LLLLLLLL
LLLLLLLLLLLLLLLLLL Juergen Jakubowski
LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLL [email protected]
EXPLOIT POR ztrxwzy.
INSPIRADO POR EL POC DE Baptiste Contreras.
[888] Objetivo : http://10.66.187.202:80/index.php
[888] Token CSRF : 3ec54b1b32b5dc2dd8186537821b8dc1
[888] http://10.66.187.202:80/index.php es vulnerable a SQLi
[888] Versión de base de datos detectada : 5.5.64-MariaDB
[888] Base de datos actual : joomla
[888] Tablas en la base de datos joomla
Licencia MIT Copyright (c) 2025 Jesús Caldera
Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para tratar el Software sin restricción, incluidos, entre otros, los derechos de uso, copia, modificación, fusión, publicación, distribución, sublicencia y/o venta de copias del Software, y para permitir a las personas a las que se les proporcione el Software hacerlo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRA, DERIVADA DE, FUERA O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTROS TRATOS EN EL SOFTWARE.