Bitmessage
Bitmessage est un système de messagerie publié en novembre 2012 et dont la popularité vient de faire un petit bon suite à l’affaire PRISM. Le système est décentralisé et fonctionne sans autorité de confiance. Une implémentation expérimentale Python est disponible.
Discours de Bruce Schneier sur le pouvoir et la sécurité
Un discours qui vaut vraiment le coup d’être écouté.
La sécurité avec le cloud computing: “someone else take care of it“. Et souvent nous navons d’autres choix que de donner une confiance totale.
pyAggr3g470r: recherche avec un index
Le module Whoosh est maintenant utilisé pour indexer la base MongoDB de pyAggr3g470r et faire des recherches sur le contenu des articles (texte intégral). Whoosh est entièrement écrit en Python et vraiment rapide. Avec un processeur i7 il me faut environ 3 minutes pour indexer près de 60.000 entrées et quelques dixièmes de secondes pour effectuer une recherche exhaustive.
pyHIDS: Alertes IRC
pyHIDS peut maintenant envoyer des alertes sur un channel IRC via irker, comme le montre la capture décran ci-dessous.
Utiliser Tor de manière transparente
Voici la procédure si vous désirez que toutes vos applications clientes (navigateurs, kmail, apt-get, etc.) passent par Privoxy/Tor pour les connexions HTTP.
Find a Bike
Find a Bike, un site pour trouver un vélo en libre-service à proximité. Il utilise lAPI de JCDecaux ainsi que OpenStreetMap.
Comparaison des performances de Python 2.7 et 3.3 avec Ackermann
$ time python ackermann.py 3 12
32765
real 2m33.121s
user 2m32.518s
sys 0m0.088s
$ time python ackermann.py 3 12
32765
real 2m57.908s
user 2m57.316s
sys 0m0.068s
$ time python3.3 ackermann.py 3 12
32765
real 4m6.365s
user 3m18.204s
sys 0m47.452s
Tests effectués avec, dans l’ordre, Python 2.7.3, 2.7.4 et 3.3.1 sur cet algorithme. Nous voyons que malgré le fait que Python 3.* s’améliore (voir ce billet), Python 2.7 est toujours bien plus rapide. Ce test n’utilise pas d’itérateurs ou objets/structures complexes. Il s’agit simplement de l’implémentation naïve de la fonction d’Ackermann. Nous avions déjà fait quelques comparaisons entre différents langages.
Extraire les mots de passe de Firefox
#!/usr/bin/env python
#
# ffpwdcracker - Crack the passwords stored using Firefox browser. The script currently works only on Linux.
#
# usage: ffpwdcracker [paths_to_location_of_files]
# Run it with no paramters to extract the standard Passwords from all Profiles of the current
# logged in User.
# Required files:
# + key3.db
# + signongs.sqlite
# + cert8.db
# are used and needed to collect the passwords.
from ctypes import *
import struct
import sys
import os
import glob
import re
import time
import base64
class SECItem(Structure):
_fields_ = [('type', c_uint),('data', c_void_p),('len', c_uint)]
class secuPWData(Structure):
_fields_ = [('source', c_ubyte),('data', c_char_p)]
(SECWouldBlock, SECFailure, SECSuccess) = (-2, -1, 0)
(PW_NONE, PW_FROMFILE, PW_PLAINTEXT, PW_EXTERNAL) = (0, 1, 2, 3)
def errorlog(row,path):
print("----[-]Error while Decoding! writting error.log:")
print(libnss.PORT_GetError())
try:
f = open('error.log','a')
f.write("-------------------\n")
f.write("#ERROR in: %s at %s\n" %(path,time.ctime()))
f.write("Site: %s\n"%row[1])
f.write("Username: %s\n"%row[6])
f.write("Password: %s\n"%row[7])
f.write("-------------------\n")
f.close()
except IOError:
print("Error while writing logfile - No log created!")
# reads the signons.sqlite which is a sqlite3 Database (>Firefox 3)
def readsignonDB(userpath,dbname):
if libnss.NSS_Init(userpath)!=0:
print("""Error Initalizing NSS_Init,\n
propably no usefull results""")
print("Dirname: %s" % os.path.split(userpath)[-1])
import sqlite3
conn = sqlite3.connect(userpath + os.sep + dbname)
c = conn.cursor()
c.execute("SELECT * FROM moz_logins;")
for row in c:
print("Site: %s" % row[1])
uname.data = cast(c_char_p(base64.b64decode(row[6])), c_void_p)
uname.len = len(base64.b64decode(row[6]))
passwd.data = cast(c_char_p(base64.b64decode(row[7])), c_void_p)
passwd.len = len(base64.b64decode(row[7]))
if libnss.PK11SDR_Decrypt(byref(uname), byref(dectext), byref(pwdata)) == -1:
errorlog(row, userpath + os.sep + dbname)
print("Username: %s" % string_at(dectext.data, dectext.len))
if libnss.PK11SDR_Decrypt(byref(passwd), byref(dectext), byref(pwdata)) == -1:
errorlog(row, userpath + os.sep + dbname)
print("Password: %s" % string_at(dectext.data, dectext.len))
print("")
c.close()
conn.close()
libnss.NSS_Shutdown()
if __name__ == "__main__":
# Point of entry in execution mode.
ordner = sys.argv[1:]
#Load the libnss3 linked file
libnss = CDLL("libnss3.so")
pwdata = secuPWData()
pwdata.source = PW_NONE
pwdata.data=0
uname = SECItem()
passwd = SECItem()
dectext = SECItem()
for user in ordner:
signonfiles = glob.glob(user+os.sep+"signons*.*")
for signonfile in signonfiles:
(filepath,filename) = os.path.split(signonfile)
filetype = re.findall('\.(.*)',filename)[0]
if filetype.lower() == "sqlite":
readsignonDB(filepath,filename)
else:
print("Unhandled Signons File: %s" % filename)
print("Skipping")
J’ai trouvé ce script sur Internet et je n’ai pas modifié grand chose. Il est pratique si vous voulez récupérer vos mots de passe rapidement. Certaines personnes reposent uniquement sur la fonctionalité denregistrement de mots de passe de Firefox, ce qui peut vite devenir embêtant avec un grand nombre didentifiants si par mégarde vous perdez le fichier signongs.sqlite. De plus comme on peut le voir ici, il n’est pas très compliqué de récupérer ces informations.