Diese Seite wird über eine ungesicherte Verbindung abgerufen. Jeder, der zufällig gerade in der Nähe ist, kann völlig problemlos jegliche Kommunikation mit dieser Seite einsehen und nach belieben manipulieren. Unter dem folgenden Link ist eine HTTPS-Gesicherte Verbindung möglich: https://0x7be.de.org. Beim Anklicken eines beliebigen Links innerhalb dieses Blogs wird automatisch auf die HTTPS-Gesicherte Verbindung gewechselt.

Es kann hierbei zu einem Warnhinweis durch den Browser kommen, da die von dieser Seite verwendete Zertifizierungsstelle CAcert unkommerziell ist, und als solche derzeit nicht in den gängigen Browsern vorinstalliert wird. Es ist also nötig, entweder eine Ausnahmeregelung für 0x7be.de zu definieren, oder das CAcert-Zertifikat dem Browser hinzuzufügen.

Dear english-speaking visitors: With this script you can extract cookies from the cookies database of Firefox 3.x via a simple Python script. The script is documented in english very well, even though the blog post is in German.

Simple download the script, extract it, and view the source code for further information. If you want to call the script, use “./scriptname host”, where “host” is a part of the URL for that you want to get the cookies.

Ich bin ja vollends begeistert vom neuen Firefox. Das ganze Ding ist schnell, hat viele sinnvolle Funktionen, und funktioniert einfach besser als Firefox 2 (wäre ja auch schlimm, wenn nicht). Bis alle Erweiterungen wieder funktionieren, wird auch nur noch eine Frage der Zeit sein – Und wenn man nicht warten will, kann man die Überprüfung ja ausschalten, meist klappt es dann trotzdem.

Eine der großen Änderungen ist, dass Firefox das meiste jetzt in Datenbanken speichert. Natürlich in keinen Schwergewichten wie MySQL oder hochperformanten, großen Datenbanken wie PostgreSQL, sondern in einer (na ja, mehreren *g*) kleinen, feinen SQLite-Datenbankdateien, was es überhaupt erst möglich macht, solche Geschichten wie die Awesomebar oder Places zu benutzen.

Dieser Fortschritt hat allerdings den Nachteil, dass ältere Programme mitunter nicht mehr richtig funktionieren, da ihnen die Möglichkeit fehlt, auf bestimmte Dateien zugreifen zu können. So habe ich zum Beispiel zwei Tools, die auf die cookies.txt von Mozilla-Browsern zugreifen können, und dann mit diesen Cookies Websites aufrufen können.

Zum Beispiel kann man wget dazu veranlassen mit “–load-cookies="cookies.txt"” die Datei zu benutzen, um dann zum Beispiel Seiten aus einem Passwortgeschützten Forum herauszuladen. Nun haben wir aber keine “cookies.txt” mehr, in der Zeilenweise die Cookies in Plaintext aufgelistet sind, sondern einen “cookies.sqlite”, was eine SQLite-Datenbankdatei ist.

Diesen – auf den ersten Blick – Nachteil können wir uns aber auch gut zu Nutze machen und in einen Vorteil verwandeln. In “cookies.txt” standen nun mal alle Cookies drin, wenn also diese Datei irgendwo angegeben wurde, hatte das Programm sofort alle Cookies zur Verfügung. Abgesehen von den – sich zugegeben recht gering auswirkenden – Performance-Einbußen, besteht hier auch ein gewisses Sicherheitsrisiko, da man nie mit hunderprozentiger Gewissheit sagen kann, was das Tool noch so alles macht, außer, man analysiert den Quelltext des Tools …

Aber werden wir mal etwas konkreter: Ich habe einen RapidShare-Premium-Account. Zusätzlich habe ich mir ein Tool geschrieben, mittels dem ich Dateien von RapidShare runterladen kann, dazu braucht das Tool die Cookie-Datei. Natürlich habe ich die entsprechenden Zeilen aus der “cookies.txt” rauskopiert und in eine andere Datei eingefügt, die ich innerhalb meines Tools an wget übergebe.

Aber nun habe ich mein RS-Passwort geändert. Das Problem ist jetzt, dass das Tool immer noch auf die RS-Cookie-Datei zugreift, dieser Cookie aber nicht mehr die aktuellen Login-Informationen enthält. Folglich schlägt der Download mit dem Tool fehl. Irgendwie muss ich also die Cookie-Informationen aus Firefox in die Datei bekommen.

Ich könnte jetzt natürlich hergehen und mir die Mühe machen, den Cookie manuell aus der Datenbank herauszuschreiben und in die Cookie-Textdatei zu bringen, aber das ist umständlich und müsste jedes mal wiederholt werden, wenn sich etwas an dem Cookie ändert. “Aber das will man nicht” ;)

Mit einem einfachen Python-Script ist das zudem schneller und sauberer erledigt, zudem schleichen sich weniger Fehler ein, und die ganze Sache kann automatisiert werden.

#!/usr/bin/python
 
import sqlite3 as db
import sys
 
cookiedb = '/home/USENAME/.mozilla/firefox/PROFIL/cookies.sqlite'
targetfile = '/home/USERNAME/cookies.txt'
what = sys.argv[1]
connection = db.connect(cookiedb)
cursor = connection.cursor()
contents = "host, path, isSecure, expiry, name, value"
 
cursor.execute("SELECT " +contents+ " FROM moz_cookies WHERE host LIKE '%" 
               +what+ "%'")
 
file = open(targetfile, 'w')
index = 0
for row in cursor.fetchall():
  file.write("%s\tTRUE\t%s\t%s\t%d\t%s\t%s\n" % (row[0], row[1],
             str(bool(row[2])).upper(), row[3], str(row[4]), str(row[5])))
  index += 1
 
print "Gesucht nach: %s" % what
print "Exportiert: %d" % index
 
file.close()
connection.close()

Eine vollständig dokumentierte Version des Scriptes gibt es ebenfalls. Dort stehen noch mal einige Informationen als Kommentare drin und das ganze Script ist zum besseren Verständnis in kleine Abschnitte unterteilt. Und Selbstverständlich sind die Kommentare auf Englisch verfasst.

Dieses Python-Script kann nun genutzt werden, um vor dem Aufruf des eigentlichen Programms die Cookie-Datei frisch generieren zu lassen, mit allen aktuellen Cookie-Angaben. Und Zwar muss dazu das Script aufgerufen, und ein Parameter übergeben werden, der dann dahingehend verwendet wird, dass mit ihm Verglichen wird, ob der Hostname das Angegebene enthält.

./export-firefox-cookies.py rapidshare

In meinem Beispiel exportiere ich also die RapidShare-Cookies. Natürlich müssen in dem Script “cookiedb” und “targetfile” noch angepasst werden. Ich werde vielleicht mein Script noch etwas erweitern, so dass beim Aufruf auch eben diese Daten noch gleich mit angegeben werden müssen. Das Konzept sollte jedem Klar werden, der sich die Script-Datei herunterlädt, und die Kommentare liest. Python ist wie Schach: Einfach zu lernen, aber es braucht viel Übung, bis man wirklich gut ist – Trotzdem kann man es spielen, sobald man die Regeln kennt.

Mein RapidShare-Download-Tool habe ich bereits etwas erweitert. Ich habe bereits einen Cookiedatei-Parameter. Den Variablen-Namen habe ich angepasst und setze dort nun den Pfad zur Cookie-Datenbank ein. Weiter unten im Script rufe ich das Python-Script auf.

#!/bin/bash
cookiedb="/home/dirk/.mozilla/firefox/dirk.default/cookies.sqlite"
 
# Weitere Optionen und Vorbereitungen
 
bash /home/dirk/.shellscript/export-firefox-cookies.py rapidshare
 
# Download-Anweisungen und weiteres

Das Script speichert die Cookie-Datei dort, wo wget im späteren Aufruf die Cookie-Datei erwartet. Viel hat sich also nicht getan im Programmcode. Es ist lediglich eine einzige Zeile hinzugekommen, und aus “ästhetischen Gründen” habe ich eine Variable umbenannt ;)

Nun habe ich auch noch – anders als vorher – immer eine “frische” Cookie-Datei. Ich kann also das Passwort regelmäßig ändern, ohne dem RapidShare-DL-Tool ALLE Cookies zur verfügung stellen zu müssen, indem ich die Original-Datei angebe, und bin trotzdem dynamisch und aktuell, weil das Tool bei jedem Aufruf den aktuellen Cookie aus der Datenbank holt.

Vielleicht kann das ja einer von euch auch gebrauchen.

  • Technorati
  • MisterWong
  • Digg
  • Facebook
  • del.icio.us
  • Twitter
  • MySpace
  • StumbleUpon
  • Reddit
  • BlinkList
  • blogmarks
  • Fark
  • Simpy
  • Slashdot
  • MyShare
  • Google Bookmarks
  • Sphinn
  • Wikio
  • DotNetKicks
  • eKudos
  • Gwar
  • Haohao
  • Internetmedia
  • NewsVine
  • Wists
  • Yigg
  • Faves
  • Meneame
  • Yahoo! Buzz
  • Blogosphere News
  • Kirtsy
  • laaik.it
  • Mixx
  • Webnews.de
  • FriendFeed
  • LinkedIn
  • Linkter
  • Ping.fm
  • Propeller
  • SphereIt
  • ThisNext
  • Webride
  • Fleck
  • HelloTxt
  • Identi.ca
  • LinkArena
  • MSN Reporter
  • Netvibes
  • Segnalo
  • Upnews
  • Xerpi
  • Current
  • Diigo
  • Global Grind
  • HackerNews
  • Hyves
  • LinkaGoGo
  • muti
  • Posterous
  • Scoopeo
  • Socialogs
  • Suggest to Techmeme via Twitter
  • Tumblr
  • Yahoo! Bookmarks
  • IndianPad
  • Live
  • N4G

Der Beitrag wurde am 19. Juni 2008 veröffentlicht und unter Ich war ein Posting, Technisches abgelegt.

23 Kommentare für „Firefox 3 und cookies.txt“

Kommentar hinterlassen

XHTML: Folgende Tags können benutzt werden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

0x7be.de – Dirk Sohler – https://0x7be.de/2008/06/19/firefox-3-und-cookiestxt/
Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: