ksnctf(1)
cpawctfが解き終わってしまったので今日からは
を解いていこうと思います。
36問もありますね!
Easy Cipher 50点
まずはいつものやつですね。
def encrypt(text, s): result = "" for char in text: if (char == " " or char == "."): result += char elif (char.isupper()): result += chr((ord(char) + s-65) % 26 + 65) else: result += chr((ord(char) + s - 97) % 26 + 97) return result ENC = "EBG KVVV vf n fvzcyr yrggre fhofgvghgvba pvcure gung ercynprf n yrggre jvgu gur yrggre KVVV yrggref nsgre vg va gur nycunorg. EBG KVVV vf na rknzcyr bs gur Pnrfne pvcure, qrirybcrq va napvrag Ebzr. Synt vf SYNTFjmtkOWFNZdjkkNH. Vafreg na haqrefpber vzzrqvngryl nsgre SYNT." s = 13 print(encrypt(ENC,s))
もう書きなれたもんですね。
#! 20点
Unix系でコードを書きなれている人ならばみな知っているであろう、コードの最初に書くこいつ、、。意味は知っていても名前なんて知らねえよ、、(笑)
ということでググって完了。
Simple Auth II 20点
コードを読んでいくとsqliteにクエリを飛ばしているので、とりまSQLインジェクションをしてみるがうまくいかない。 結構考えてもわからなかったので調べると、database.dbが相対パスで指定されていることに気が付く。よってurlのauth.phpをdatabase.dbに変えてあげるとファイルをダウンロードできる。あとはDB Browser(SQLite)なりで開いてあげればFLAGをゲット!
Simple Auth 50点
とても単純なコードになっていて、明らかにstrcasecmpが何か問題を起こすだろうと予想した。調べるとどうやら脆弱性があるらしい。引数に配列を渡すとnull (0)を返すらしいので、今度はphpのinputに配列を投げる方法を調べる。inputタグのnameを配列の形にしてあげればいいらしいので、Chrome Dev Toolsからhtmlを書き換えて送信を押したらFlagをゲット。
これぞCTF!って感じの面白い問題でした。
今日はこの辺にして続きは次回やります!