ふるつき

私は素直に思ったことを書いてるけど、上から目線だって言われる

katagaitaiCTF勉強会関西medに行っていた

katagaitaiCTF勉強会関西medに行っていた

 そういう勉強会に行っていました。ネーミングセンス最高ですね。

 medは脱初心者を目指す人や、技術向上を狙う中級者向けの勉強会です。

 ひとことで言うと、めちゃんこむずかしい勉強会でした。その分楽しかったです。

 内容としては、CryptoとExploitでした。

 

Crypto

 いずれかきます。  

Exploit

 Codegateという有名なCTFの過去問であるところの、beef_steakという問題を解くことを目標として勉強していました。これは400点問題らしいのですが、同CTFには1000点の問題もあるとかでした。こわいこわい。

くわしい話は↓を見て下さい。私がいろいろ言うよりもそのほうがずっとわかることでしょう。すっごい資料なので。

   

 

 資料にもある通り、受け取った値を、flagでRC4というアルゴリズムで暗号化して、ある値と合致していれば、system("/bin/cat > ./message")が実行されるバイナリです。但しスタックバッファオーバーフロー脆弱性をがあり、それをりようしていろいろできてしまいます。

攻略方法は↑を見ていただければ、という感じです。

とはいえ、それだけでは記事書く意味ないので、はまったところを少しだけ書きます。  

資料の215ページ、これは、スタックバッファオーバーフローをさせて、env[0]にLD_PRELOAD=./message のアドレスを 指させよう 、というところなのですが、バッファの先頭からenv[0]まで296bytesあるはずです。しかし私はもう少し長い値が出たので困っていました。原因は簡単で、私はlocalで長さを測るとき、毎度毎度argv[1]を設定していた(コマンドライン引数を与えて起動していた)から、その文字列のアドレス分ずれていたというだけでした。(どの環境でも差は296bytesになります。同じバイナリを使っているので)

また、212ページで割愛されているSHARED LIBRARY INJECTIONですが、どういうsoをつくるかという話がありました。内部でsystem関数をつかって大変な事になりました。というのも、system関数では設定されたLD_PRELOADを引き継がれるので、また同じライブラリが呼ばれる、するとなかでsystem関数が呼ばれる……。

あとは資料通りにやればできちゃうはずです。  

感想

 書くことなかった。

難しい勉強会でしたが、難しいとそれだけ達成感がすごい。一回資料通りにsolver書いてみてください。興奮します。