Writeup: SwapSwap
2 回入れ替えればもとに戻る… よね?
1. 問題のソースコード
import os
flag = os.environ.get("FLAG", "Alpaca{*** REDACTED ***}")
inp = input("> ")
# This must be true, isn't it?
if inp == inp.swapcase().swapcase():
print("Check passed!")
else:
print("Check failed - !?")
print("Here is your flag:", flag)
問題を見ると
if inp == inp.swapcase().swapcase():
print("Check passed!")
ここでは「ユーザーの入力したもの」と「ユーザーの入力したものを2回 swapcase()を行ったもの」が一致した場合、Check passed!としていて
else:
print("Check failed - !?")
print("Here is your flag:", flag)
次に、else の時に flag を出すようにしている。
2. 解法・解説
問題のコードにより、swapcase()を2回しても一致させないようなものをユーザー入力として送ればいい。
swapcase()とは文字列内の大文字を小文字に、小文字を大文字に入れ替えるメソッドである。
そのようなものであげられるものがトルコ語やドイツ語の「İstanbul の"İ"」や「Groß の"ß"」がある。
これらを踏まえて入力すると。
nc 34.170.146.252 54861
> İ
Check failed - !?
Here is your flag: Alpaca{*****}
となりフラグが取得できる。