###### tags: `niticCTF` # writeups - nitic CTF ## CTF後記 最終順位が48位。 Pwnにもう少し難しい問題が来るかなと予想していて、Pwnだけでまぁまぁ点数が取れるんじゃないかと思っていたが、その予想を外した。 みんなが解ける問題(pwn_monster) or 解けない問題(baby_IO_jail) に二極分化されていて悲しい。もう少し...出してほしかった。 ただ、Pwnに関しては、毎回初心者向けCTFでも5割以下の正答率だったので初参加の人にとっては「調べれば解ける」問題だったので良かった。 CryptoやWebなどの他の分野に挑戦するいい機会になった。 それと同時に、CryptoやWebもしっかり学ばないと良い順位を取ることができないことも学んだ。 niticCTFを開催してくださった方々、ありがとうございました。 ## Web ### web_meta Chromeのdeveloper toolで、見るだけ。 ### long flag web_metaと同様、developer toolで開いて、`<style>`の`<p>`の要素の設定を削除し、`#flag`内の`display`の値を適当に`10px`と指定すれば、Flagが出てきてコピー出来る。 ## Pwn ### pwn_monster1,2,3 pwn_monsterの詳しいWriteupは[こちら](https://hackmd.io/@yu1hpa/H1Yiv8GzK) ### baby_IO_jail [TODO] わからなかった...ので復習してwriteupを載せる ## Rev ### protected GhidraやCutterなどで開く。比較している文字列がわかるので、入力するとFlagが出力される。 ## Crypto ### Caesar Cipher [cybershef](https://gchq.github.io/CyberChef/)のROT13で、Amountの値をいじると、Flag形式の文字列を得られる。 ### ord_xor XORされる前の文字列をY、された文字列をXと置き、XORする値をkとする。 $$X \oplus k = Y$$が成り立つ(らしい)。 ```python= encflag = 'nhtjcZcsfroydRx`rl' def xor(c: str, n: int) -> str: tmp = ord(c) for _ in range(n): tmp ^= n return chr(tmp) dec_flag = "" for i in range(len(encflag)): dec_flag += xor(encflag[i], i) print(dec_flag) ``` ## Misc ### Excel 白文字の問題かなと思ったので、`Ctrl+a`で全選択して`Ctrl+c`+`Ctrl+v`で適当なところに貼り付けるとFlagを得られる。 ### image_conv 完全にSteganoの問題だった。 [Stegsolve](https://github.com/zardus/ctf-tools/tree/master/stegsolve)というツールがあるので、値をいじる。Flagの文字列が見えて得られる。 (色を反転するだけだと`nitic_ctf{}`の部分だけしか見えないので注意)