7.1 Username

Default Password

https://www.cirt.net/passwords
https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/default-passwords.csv
https://github.com/scadastrangelove/SCADAPASS/blob/master/scadapass.csv
https://academy.hackthebox.com/storage/modules/80/scripts/basic_bruteforce_py.txt
https://academy.hackthebox.com/storage/modules/80/scripts/rate_limit_check_py.txt

Brute Force script
basic_bruteforce_py

CAPTCHA Bypass

Read the source

Rate-Limit bypass

rate_limit_check.py
Update header X-Forwarded-For: 127.0.0.1

Username

https://github.com/danielmiessler/SecLists/tree/master/Usernames

wfuzz -c -z file,/opt/useful/SecLists/Usernames/top-usernames-shortlist.txt -d "Username=FUZZ&Password=dummypass" --hs "Unknown username" http://test.test.test/user_unknown.php


Timing attack

https://academy.hackthebox.com/storage/modules/80/scripts/timing_py.txt

timing.py
Depending on application's code, the valid response could take longer than invalid response. Use the above code to verify.

python3 timing.py /opt/useful/SecLists/Usernames/top-usernames-shortlist.txt

Python algorithm to test scrypt, bcrypt or PBKDF

import scrypt
import bcrypt
import datetime
import hashlib

rounds = 100
salt = bcrypt.gensalt()

t0 = datetime.datetime.now()

for x in range(rounds):
    scrypt.hash(str(x).encode(), salt)

t1 = datetime.datetime.now()

for x in range(rounds):
    hashlib.sha1(str(x).encode())

t2 = datetime.datetime.now()

for x in range(rounds):
    bcrypt.hashpw(str(x).encode(), salt)

t3 = datetime.datetime.now()

print("sha1:   {}\nscrypt: {}\nbcrypt: {}".format(t2-t1,t1-t0,t3-t2))

Password Attack

Enumerate through Password Reset

Sometimes applications message could reveal wheather username is valid or not.

Enumerate through Registration Form

The registration will reveal whether the username is exist or not.
Caveat: Loud