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}