強エンジニアになりたい大学生の日記

その日学んだことを日記程度に発信します。

ksnctf(1)

cpawctfが解き終わってしまったので今日からは

ksnctf

を解いていこうと思います。

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!って感じの面白い問題でした。

今日はこの辺にして続きは次回やります!