#!/usr/bin/env python ################################################################ # .___ __ _______ .___ # # __| _/____ _______| | __ ____ \ _ \ __| _/____ # # / __ |\__ \\_ __ \ |/ // ___\/ /_\ \ / __ |/ __ \ # # / /_/ | / __ \| | \/ <\ \___\ \_/ \/ /_/ \ ___/ # # \____ |(______/__| |__|_ \\_____>\_____ /\_____|\____\ # # \/ \/ \/ # # ___________ ______ _ __ # # _/ ___\_ __ \_/ __ \ \/ \/ / # # \ \___| | \/\ ___/\ / # # \___ >__| \___ >\/\_/ # # est.2007 \/ \/ forum.darkc0de.com # ################################################################ # # md5 MySQL Database BruteForce AllinOne python v 1.1 # python by low1z feb2009 # idea & php design froz3n @ darkc0de # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # darkc0de Crew # www.darkc0de.com # code low1z # # Greetz to # d3hydr8, rsauron, baltazar, inkubus, kopele # and the rest of the Darkc0de members # import MySQLdb, sys, re, md5, time host = 'YOUR-MYSQLSERVER-IP-HERE' username = 'YOUR-MYSQLUSERNAME-HERE' password = 'YOUR-MYSQLPASSWD-HERE' dbname = 'md5db' onloadDBstatus = 0 version = '1.1_feb09' db = MySQLdb.connect(host=host, user=username, passwd=password) def dbconnect(): csr = db.cursor() return(csr) def timer(): now = time.localtime(time.time()) return time.asctime(now) def setupdb(): csr = dbconnect() try: csr.execute("CREATE DATABASE "+dbname) print "Database:", dbname, "created" except MySQLdb.Error, e: print "Error %s" % (e.args[1]) sys.exit(1) try: csr.execute("CREATE TABLE "+dbname+".data (id INT( 255 ) NOT NULL AUTO_INCREMENT ,plain TEXT NOT NULL ,md5 VARCHAR( 255 ) NOT NULL ,PRIMARY KEY ( id ) , UNIQUE ( md5 )) ENGINE = MYISAM;") print "Tables in db:", dbname, "created, Database ready to use!" except MySQLdb.Error, e: print "Error %s" % (e.args[1]) sys.exit(1) def insertwl(): counter = 0 try: words = open(wordlist, "r") except(IOError): print "Error: check", wordlist sys.exit(1) dupes = 0 print "Inserting Wordlist, Skipping Dupes....may take ages" print "\nStart :", timer() for word in words.read().split('\n'): hash = md5.new(word).hexdigest() counter = counter+1 try: csr = dbconnect() csr.execute("INSERT INTO "+dbname+".data (plain, md5)VALUES ('"+str(word)+"', '"+str(hash)+"');") except MySQLdb.Error, e: dupes = dupes+1 print "\nDupes :", dupes print "\nDone :", timer() def statusdb(): try: csr = dbconnect() csr.execute("SELECT COUNT(id) AS num FROM "+dbname+".data") dbcount = csr.fetchone() return dbcount[0] csr.close() except MySQLdb.Error, e: print "Error %s" % (e.args[1]) sys.exit(1) def dropdb(): csr = dbconnect() try: csr.execute("DROP DATABASE "+dbname) print "Database:", dbname, "deleted" except MySQLdb.Error, e: print "Error %s" % (e.args[1]) sys.exit(1) def single(sshash): csr = dbconnect () csr.execute("SELECT plain FROM "+dbname+".data WHERE md5 = '"+sshash+"'") dset = csr.fetchone() if dset == None: print sshash, " : ", "not in DB" else: print sshash, " : ", dset[0] csr.close() def multi(): try: sshashs = open(md5file, "r").readlines() for sshash in sshashs: sshash = sshash.replace("\n","") single(sshash) except(IOError): print "Check your Filepath!!\n" def helpme(): print "HELP - Args\n" print " -h / -help | bring up this screen" print " -s / -setupdb | initial db installation" print " -w / -wordlist | insert wordlist into db eg. -w " print " -d / -dropdb | delete database" print " -ss / -single | search db for given hash eg. >python md5db.py -ss " print " -ms / - multi | takes a list of md5's for cracking eg. >python md5db -ms " print " -c / -count | count database entries\n" print " _ ___ _ _ " print " _ __ __| | __| __| | |__ " print " | ' \/ _` |__ \/ _` | '_ \ " print " |_|_|_\__,_|___/\__,_|_.__/ " print "+--------------------------------------+" print "| + Python/MySQL Bruteforce AllinOne + |" print "| |" print "| + md5db11.py", version, " |" print "| + php & concept by froz3n |" print "| + python by low1z |" print "| |" print "| + use -h for help |" print "+--------------------------------------+\n" if onloadDBstatus == 1: try: print "\t",statusdb(), " Sets in DB\n" except MySQLdb.Error, e: print "Error, Database is not in place, use -s option to create it" if len(sys.argv) <= 1: print "\tuse -help to get options\n" sys.exit(1) for arg in sys.argv[1:]: if arg.lower() == "-h" or arg.lower() == "-help": helpme() if arg.lower() == "-s" or arg.lower() == "-setupdb": setupdb() if arg.lower() == "-d" or arg.lower() == "-dropdb": dropdb() if arg.lower() == "-c" or arg.lower() == "-count": print "\t",statusdb(), " Sets in DB\n" if arg.lower() == "-ss" or arg.lower() == "single": try: sshash = sys.argv[2] if len(sshash) != 32: print "invalid md5 supplied, check your input!\n" sys.exit(1) single(sshash) except(IndexError): print "Error: check hash ...\n" if arg.lower() == "-w" or arg.lower() == "-wordlist": try: wordlist = sys.argv[2] insertwl() except(IndexError): print "Error: check wordlist file\n" if arg.lower() == "-ms" or arg.lower() == "-multi": try: md5file = sys.argv[2] multi() except(IndexError): print "Error: check md5 plain import file...\n"