復習しましたー、環境生かして頂いてて、ありがとうございます。
解説元のみなさんもかなり勉強になりました…ありがとうございます。
https://score.beginners.azure.noc.seccon.jp/
- [pwn] BeginnersBof
- 作問者 https://feneshi.co/ctf4b2022writeup/
- https://www.honamium.net/post/ctf4b_2022_writeup/
- https://miso-24.hatenablog.com/entry/2022/06/05/173116
- https://tan.hatenadiary.jp/entry/2022/06/05/180411
- https://greentea-hoge.hatenablog.com/entry/seccon_beginners_2022
- https://b1ue.x0.com/writeup/2022secconb/
- BoFをしてリターンアドレスをwin関数のそれにすり替える
- https://qiita.com/kusano_k/items/963b299d1b33b97270b9
- 他とやり方変わらない気がするが調整している。作問者記事に書いてある「リモートだと1回目のサイズをpayloadの長さピッタリにしたりするとコケます」が発動していた?わからない
- https://blog.y011d4.com/20220605-ctf4b-writeup
- win関数のリターンアドレスを絨毯爆撃して刺させる。多すぎると逆に出てこなかった。なぜだろう
- [pwn] raindrop
- gdbがうまく動かない日々を数日過ごしていたが、@n01e0さんに助けていただいて解決できた(圧倒的感謝!)
- 子プロセスを生成している場合にデバッガのアタッチ先を親のままにするか子に移すかという設定が行える。自分の環境では子に移ってしまっていたのでそのまま死んでた。gdb起動直後に
set follow-fork-mode parent
をして親のそのまま追うようにすればいい
- 子プロセスを生成している場合にデバッガのアタッチ先を親のままにするか子に移すかという設定が行える。自分の環境では子に移ってしまっていたのでそのまま死んでた。gdb起動直後に
- 作問者 https://feneshi.co/ctf4b2022writeup/
- https://qiita.com/kusano_k/items/963b299d1b33b97270b9
- ROP chainで"finish"の末尾から"sh"をもらってきて、
pop rdi; ret
-> shアドレス -> system関数呼び出し
- ROP chainで"finish"の末尾から"sh"をもらってきて、
- https://www.honamium.net/post/ctf4b_2022_writeup/
- https://miso-24.hatenablog.com/entry/2022/06/05/173116
- https://b1ue.x0.com/writeup/2022secconb/
- https://blog.y011d4.com/20220605-ctf4b-writeup
- https://tan.hatenadiary.jp/entry/2022/06/05/180411
- https://greentea-hoge.hatenablog.com/entry/seccon_beginners_2022
- 2回ROP Chainやって、いろんな記事で書かれているアラインメントのための調整をしている(よくわかっていないが、こういう戻ってくる系もあるというくらいで理解をさぼってしまった…)
- gdbがうまく動かない日々を数日過ごしていたが、@n01e0さんに助けていただいて解決できた(圧倒的感謝!)
- [pwn] simplelist
- 作問者 https://feneshi.co/ctf4b2022writeup/
- https://miso-24.hatenablog.com/entry/2022/06/05/173116
- https://blog.y011d4.com/20220605-ctf4b-writeup
- ヒープ領域でオーバーフローを発生させて、任意メモリの読み書きを実現する
- 単方向リストで(content,next)を保持しているがcontent書き換え部分でoverflowが発生して次の要素のnextを自由に書き換えることができる
- nextを目的のアドレスにして、(すると見た目としては要素が1つ増える)overflowの次の要素を指定して読み書きすれば実質メモリの読み書きができるようになる
- GOT領域を読んで、libcの先頭書き込みアドレスを特定して、中身の正確な関数アドレスを把握。GOT領域を書き換えて、指定アドレスをlibc内部のone gadgetに書き換えて、適当に呼べばシェル獲得
- ヒープ領域でオーバーフローを発生させて、任意メモリの読み書きを実現する
- https://greentea-hoge.hatenablog.com/entry/seccon_beginners_2022
- 最後だけちょっと違う。コード中に
atoi("[input]")
となっている箇所があるので、atoiのGOT領域をsystem関数に書き換えて、入力に/bin/sh
を入れてシェル起動
- 最後だけちょっと違う。コード中に
- https://qiita.com/kusano_k/items/963b299d1b33b97270b9
- [pwn] snowdrop
- 作問者 https://feneshi.co/ctf4b2022writeup/
- https://www.honamium.net/post/ctf4b_2022_writeup/
- https://tan.hatenadiary.jp/entry/2022/06/05/180411
- https://greentea-hoge.hatenablog.com/entry/seccon_beginners_2022
- リターンアドレス入れるとこの真下にシェルコードを置いて、そこへジャンプさせる
- https://miso-24.hatenablog.com/entry/2022/06/05/173116
- 上とほぼ同じで下にシェルコードを置くが、nopを大量に置いて、適当にシェルコードの発火までつなげている
- 上と同じっぽい。nop使われてる
- https://qiita.com/kusano_k/items/963b299d1b33b97270b9
- pwntoolsのROP系ライブラリで色々やってくれていると想像しているが、readで引数を持ってきて、execveで呼び出している(あまり理解できてない)
- https://blog.y011d4.com/20220605-ctf4b-writeup
- ここまで復習してきて、ちょっと理解力尽きてしまった…ROP Chainでopen,read,writeの順で読んでシェル起動している
- [pwn] Monkey Heap
- 力尽きました。リンクだけ共有しておきます。House of bananaが想定解?House of *で解けるみたいです。
- https://qiita.com/kusano_k/items/2e8bf933bff37c0e98e0
- https://qiita.com/task4233/items/9b4f7bcf52cc87a9c7ad