Ahora mismo no traigo mi server de pruebas pero mañana intento hacer algo de SQL en las entradas a ver si encuentro algo ñ_ñ'
No usa SQL, solamente guarda todos los datos en archivos de texto.
Ya pude inyectar una shell y no está tan dificil, solamente que debes regirte por un filtro htmlspecialchars sin token o sea que puedes escribir comillas simples y con eso crear tu código php de la siguiente forma.
Fijate en configuraciones:
http://127.0.0.1/cutenews/index.php?mod=options&action=syscon&rand=xxxCuando guardas una configuración lo que haces es sobreescribir un archivo llamado data/config.php
<?PHP
//System Configurations (Auto Generated file)
$config_http_script_dir = "http://127.0.0.1/cutenews";
$config_skin = "default";
$config_date_adjust = "0";
...
El filtro dice así:
inc/options.mdu linea 755 a 760
fwrite($handler, "<?PHP \n\n//System Configurations (Auto Generated file)\n\n");
foreach($save_con as $name=>$value)
{
}
Como htmlspecialchars no tiene token ENT_QUOTES (
http://cl.php.net/htmlspecialchars) significa que podemos insertar comillas simples pero si no podemos inyectar con comillas dobles para escapar de la variable $config_http_script_dir como lo hacemos?:
Fijate que en el input donde va el link del cutenews le puse al final el carácter "\" asi que tomará la comilla doble como parte de la misma variable y queda masomenos así:
Ahora que logramos escapar hay que cerrar la variable y comenzara a inyectar código:
; echo 'test'; exit; /*
Fijate que este contenido queda acá:
$config_skin = "default";
asi que nos encontramos con la comilla doble que cierra la primera variable y comenzamos a escribir en php pero primero cerramos con ";" y para que el código no quede corrupto y se quede sin hacer nada cerramos con "/*" y queda:
Ya sabemos que se ejecuta el código pero ojo que cuando lo hagas quedará corrupto pero las configuraciones por defecto de cutenews permiten que alcance a terminar de ejecutar nuestra inyeción asi que hay solo una oportunidad y si te fijas también no puedes ejecutar código y terminar con exit si es que no se debolvió algún buffer de stream en el php (debe ser por la misma configuración y ob_start() ) asi que en total nos queda masomenos así:
Cuando lo hagas te va a dar el mismo error que la imagen anterior pero si vas a
http://127.0.0.1/cutenews/r00t.php verás algo así como esto: