HumanCTF 2018 - Nice design, Bro
問題文
One of our designers made cool gold cards. And for some reason he added numbers.
writeup
正しいクレジットカード番号を入力しろとのこと。
どれか1文字が?になっているクレジットカード番号が、placeholder
にセットされている。
手作業で、?
に適当な数値をいれて試していると、レスポンスの殆どがHTTPステータスが302
だが、稀に200
が返ってくることがわかる。正しいカード番号の場合、200
が返ってくるようだ。
ただ、正しいカード番号の場合でも、302
が返ってくることもある。
よくわからない。
placeholder
で与えられるカード番号はランダムでなくパターンがあることがわかる。
カード番号のバリエーションを取得するため、スクリプトを作成した。
import requests import re URL="http://ctf.knastu.ru/webch/cards/gold" pattern = 'placeholder="(.+)">' r = requests.get(URL) m = re.search(pattern, r.text) if m: number = m.group(1) print("[+]number =",number) else: exit(1) while True: flag = False for i in range(10): for j in range(10): card_number = number.replace("?",str(i)) r = requests.post( URL, data={"card-number":card_number}, allow_redirects=False ) m = re.search(pattern, r.text) if "HumanCTF{" in r.text: print(r.text) exit(0) if m: print("[+]card-number=",card_number) number = m.group(1) print("[+]number =",number) flag = True break if flag: break
結果、スクリプトを実行しているとフラグが降ってきた。 実行結果は以下。
[+]number = 86018945306991? [+]card-number= 860189453069916 [+]number = ?69350876618253 [+]card-number= 169350876618253 [+]number = 51944461476199? [+]card-number= 519444614761991 [+]number = 74705?779598669 [+]card-number= 747058779598669 [+]number = 667?18296376020 [+]card-number= 667918296376020 [+]number = 77251122409?241 [+]card-number= 772511224091241 [+]number = 348?25600232487 [+]card-number= 348625600232487 [+]number = 35544?989310368 [+]card-number= 355446989310368 [+]number = 8288?1876906683 [+]card-number= 828841876906683 [+]number = 28337872316720? [+]card-number= 283378723167209 [+]number = 70?673080984881 [+]card-number= 709673080984881 [+]number = 92331906373?396 [+]card-number= 923319063733396 [+]number = 1593020738?2606 [+]card-number= 159302073882606 [+]number = 6145?2964936572 [+]card-number= 614502964936572 [+]number = 1?7029011677589 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Gold Card - Überbank</title> (snip) <form action="/webch/cards/gold" method="POST"> <div class="form-group"> <label for="card-number">Enter the right number:</label> <input type="text" name="card-number" id="card-number" class="form-control" placeholder="HumanCTF{giv3_m3_y0ur_CVC}"> <small id="card-number-help" class="form-text text-muted"> Example: ?78282246310005 -> 378282246310005 </small> (snip)
Cookieをセットしていないため、連続正解の判定はされていないはずである。
おそらく、正しいクレジットカード番号を入力すると、ランダムでフラグが降ってくるものと想定される。
何はともあれフラグゲット。
HumanCTF{giv3_m3_y0ur_CVC}