digits

コンピュータは高速に正しく計算してくれますが、昔のコンピュータは今ほど正確に計算できないことがありました。現在もハードウェアの故障などが原因でとても低い確率でコンピュータは計算をミスするでしょう。 運が良いあなたならこの問題が解けるはずです。10 桁の好きな数字をクエリパラメータ q に入れて、神に祈りましょう。 https://tsukuctf.sechack365.com/problems/digits ※この問題では/problems/digits以下のみを用います。 他の問題/problems/<name>などと混同しないよう注意してください。

プログラムはこれです.

from typing import Optional
from fastapi import FastAPI
import random

app = FastAPI()

FLAG = "TsukuCTF{}"


@app.get("/program/digits/")
def main(q: Optional[str] = None):
    if q == None:
        return {
            "msg": "please input param 'q' (0000000000~9999999999).  example: /?q=1234567890"
        }
    if len(q) != 10:
        return {"msg": "invalid query"}
    if "-" in q or "+" in q:
        return {"msg": "invalid query"}
    try:
        if not type(int(q)) is int:
            return {"msg": "invalid query"}
    except:
        return {"msg": "invalid query"}

    you_are_lucky = 0

    for _ in range(100):
        idx = random.randrange(4)
        if q[idx] < "0":
            you_are_lucky += 1
        if q[idx] > "9":
            you_are_lucky += 1

    if you_are_lucky > 0:
        return {"flag": FLAG}
    else:
        return {"msg": "Sorry... You're unlucky."}

ちなみにFastAPIが使われているのは僕の好みです. 入力qのチェックを一つずつ確認しましょう.

1. qNoneであってはならない

何か入れましょう.

2. qは文字列型である

def main(q: Optional[str] = None): と書かれています.

3. qの長さは 10 であ

len(q) != 10: と書かれています.

4. q+-が含まれない

書いてある通りです.

5. qのある文字が 0 未満または 9 以上になることがある

つまり,0~9 以外の文字を 1 つでもこの時点で入って入れば良いです.

まとめ

結論から言うと,+100000000+++1111111+294287356など,+が 1 つ以上かつその後ろに数字が 1 つ以上入っていれば何でも大丈夫です.
URL には+という文字を入れることができます.これはデリミタの一種で,半角スペースの扱いになります.
正解の文字列は長さが 10 で-が含まれておらず,+は半角スペースに変換されるので+も入っておらず,int関数で変換可能であり,ある文字が 0 未満または 9 以上になることがあります.

お詫び

この問題いっぱいミスをしましたすみませんでした.
まず最初はファイルを与えておらず,ブラックボックスになっていました.
また,最初は@app.get("/program/digits/")@app.get("/program/digits")となっていて,/program/digits/?q=12345678090とアクセスするとlocalhostへリダイレクトされるバグがありました.Yちゃんが気づいて直してくれました.本当にすみませんでした…
あとidx = random.randrange(4)がなんでidx = random.randrange(10)ではないかというと,僕のミスです(あまり難易度は変わらないので無視しました).

TsukuCTF{you_are_lucky_Tsukushi}
© 2021, SecHack365-Fans All Right Reserved.