Leyendo las cookies y logins de Firefox con Python y SQLite

Aprovecho la oportunidad para decir Felices navidad! / Bo nadal! / Merry christmas!

Ahora sí... recordemos que Firefox guardaba alguna información en forma de bases de datos SQLite (interesantes por el hecho de que no requiere un demonio externo, sino que toda la información lo maneja la librería sobre un archivo), veamos como hacer un script que nos muestre las cookies para dominios concretos.

Las cookies se guardan en el archivo "cookies.sqlite" en la carpeta del perfil del programa, un "file" confirma que es una base de datos sqlite3, se puede abrir con

=============================================================================== sqlite3 cookies.sqlite ===============================================================================

Veamos que tablas tiene

=============================================================================== sqlite> .table moz_cookies sqlite> ===============================================================================

Entonces solo hay una tabla, "moz_cookies", veamos como funciona

=============================================================================== sqlite> .schema moz_cookies CREATE TABLE moz_cookies (id INTEGER PRIMARY KEY, name TEXT, value TEXT, host TEXT, path TEXT,expiry INTEGER, lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER); sqlite> ===============================================================================

Los nombres de los campos son bastante ilustrativos, probemos buscando campos con "google", por ejemplo, en el host...

=============================================================================== sqlite> select * from moz_cookies where host like '%google%'; 1284819422521617|PREF|ID=9781f1e5d7ff9422:U=e5291c6e5476d7f8:TM=1284819422: LM=1286025562:GM=1:S=yVNr14zH2KpCzPpS|.google.com|/ |1349097562|1286026121306278|0|0 ... sqlite> ===============================================================================

Ya está, ahora a plasmarlo en un script, lo primero es importar sqlite3 (y de paso sys =P)

import sqlite3, sys

La función que muestre las cookies será cookie_f

def cookie_f(fn, host):

Ahora hay que abrir el archivo:

sock = sqlite3.connect(fn)

Y obtener un cursor para manejarlo:

c = sock.cursor()

Lo próximo es hacer la petición, para delegar el esfuerzo de filtrarla, se pondrá una "?" donde se ubicará la cadena de host, y se concatenan después los % del like, el segundo argumento, la cadena de host, tiene que ser una tupla:

c.execute("select * from moz_cookies where host like '%' || ? || '%'", (host, ))

Ahora hay que hacer efectivos los cambios:

sock.commit()

Y mostrar los datos obtenidos:

for res in c.fetchall():

   print res

Una vez hecho esto, y dado que no se harán más peticiones, se cierra la base de datos:

c.close()

El resto del código es trivial:

if (len(sys.argv) < 3):

print sys.argv[0], " "

exit(0)

cookie_f(sys.argv[1], sys.argv[2])

El código completo: http://pastebin.com/jwt1Apwu

=============================================================================== $ ./firesnake.py cookies.sqlite google (1284819422521617L, u'PREF', u'ID=9781f1e5d7ff9422:U=e5291c6e5476d7f8: TM=1284819422:LM=1286025562:GM=1:S=yVNr14zH2KpCzPpS', u'.google.com', u'/', 1349097562, 1286026121306278L, 0, 0) ... ===============================================================================

Hasta el año que viene ;)

[Referencias] http://docs.python.org/library/sqlite3.html http://www.sqlite.org/sqlite.html

untagged

PyLOIC 0.2 » « Escaneando un servidor FTP