WriteUp reference : https://github.com/Hong5489/TJCTF-2019/tree/master/moar
Pada soal yang ini kita diberikan sebuah website yang memiliki 2 tombol (“Backward”) dan (“Forward”).
Bila kita click backward berkali-kali atau forward berkali-kali kita berakhir pada link yang sama yaitu /4b043a01-a4b7-4141-8a99-fc94fe7e3778.html, tetapi bila kita click backward beberapa kali dan kemudian click forward beberapa kali kita mendapatkan link yang berbeda-beda. Kita sepertinya harus mencari jalur yang sesuai untuk mendapatkan jalur ke link yang mendapatkan flagnya.
Contoh: (click forward terus menerus) akan membawa kita ke:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/4b043a01-a4b7-4141-8a99-fc94fe7e3778.html /e634644e-b802-496a-8bb5-0e0aac40779f.html /f50f7e37-8ba7-43c6-9836-a6148831564e.html /ac2ecaa1-0dc9-47ae-b8f1-133d50e4af99.html /d6ca6b5d-c8be-4474-b612-407df5b4bb04.html /9552275b-c392-4f5c-ac0b-f6dd843bf94b.html /a0da2909-c757-4231-8075-f75ff2a2ce00.html /c9f7162a-2ce1-40d4-81a5-6a6f92d08c54.html /715a3c29-6834-4a01-a757-729aab193a62.html /c037b1ac-9d23-4a98-aab8-4667281509a1.html /e7795183-e817-48ce-bfa6-f69dc9b6d67f.html /b846555a-a1a5-49c2-8896-950145057e73.html /ce1b06c9-553b-4448-a6b7-887b6fb79615.html /f5bc4454-74bb-4594-8666-a58242cb53fb.html /d4fc331c-542a-46ed-8b37-a0c3c74c7b61.html and repeating from /4b043a01-a4b7-4141-8a99-fc94fe7e3778.html |
Jadi kita bisa melakukan brute untuk mengecek setiap link yang ada untuk mencari flag kita tersebut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#!/usr/bin/env python import requests import re from threading import Thread, activeCount import os import signal remaining = [] path = [] url = "https://moar_horse_2.tjctf.org" allowed = False #untuk membatasi thread yang aktif (supaya tidak terlalu memberatkan process) def limit(): global allowed while(True): if activeCount() <= 500: allowed = True else: allowed = False def push(newurl, result): #bila ketemu tjctf dalam salah satu filenya akan memberhentikan semua processnya if re.search("tjctf", result.text): print result.text os.kill(os.getpid(), signal.SIGKILL) Backward = re.findall("/.*.html", result.text.split('\n')[14].strip())[0] Forward = re.findall("/.*.html", result.text.split('\n')[15].strip())[0] path.append(newurl) print len(path) if (url+Backward) not in path and (url+Forward) not in path: #bila jumlah thread yang aktif masih dibawah batas limit, kita akan membuka thread baru untuk mengecheck backward dan sekaligus melanjutkan yang sebelumnya dengan forward if allowed == True: result= requests.get(url+Backward) thread = Thread(target=push, args=(url+Backward, result)) thread.start() result= requests.get(url+Forward) push(url+Forward, result) #dan bila thread yang aktif sudah diatas batas limit, kita hanya melanjutkan pengecheckan ke arah backward dan menyimpan file forward untuk dicheck nantinya else: result = requests.get(url+Backward) remaining.append(Forward) push(url + Backward, result) #bila backward belum terdapat di path sedangkan forward ada, kita hanya mengecheck backward dan meninggalkan forward if (url+Backward) not in path: result = requests.get(url+Backward) push(url + Backward,result) #bila forward belum terdapat di path sedangkan backward ada, kita hanya mengecheck forward dan meninggalkan backward elif (url+Forward) not in path: result = requests.get(url+Forward) push(url + Forward, result) else: #mengecheck yang tertinggal sebelumnya saat thread melebihi batas limit for remain in remaining: if allowed: remaining.remove(remain) result = requests.get(url+remain) thread = Thread(target=push, args=(url+remain, result)) thread.start() return limiter= Thread(target=limit) limiter.start() result = requests.get(url) push(url, result) |
Dengan ini kita bisa ngecheck setiap path dan saya membatasi thread yang aktif agar tidak begitu memberatkan computing process. Kita hanya perlu meninggalkan ini untuk berjalan beberapa menit dan…
flag : tjctf{s0rry_n0_h0rs3s_anym0ar}
P.S. if you want kind of an easier way, just do
wget -nc -rl0 https://moar_horse_2.tjctf.org/
to download all the files from that website (kinda slow) and just
grep -r “tjctf”
and you will find the flag