Best Pwnable Challenges 2025
嗯,用户让我总结一下这篇文章的内容,控制在一百个字以内,而且不需要用“文章内容总结”之类的开头,直接写描述。好的,我先看看这篇文章讲的是什么。 这篇文章是关于今年参加的CTF比赛中一些有趣的问题的总结。作者挑选了几个获得不同奖项的问题,比如创造力奖、脆弱性奖、教育奖和风水奖,分别介绍了每个问题的背景、解法和感想。此外,还提到了其他一些虽然没有获奖但也很有意思的问题。 首先,Stack Impromptu获得了创造力奖。这个问题涉及到利用服务器中的漏洞来控制文件描述符,最终导致任意文件描述符被关闭。解法中利用了socket的知识和一些巧妙的技巧。 然后是decore,获得了脆弱性奖。这个问题利用了core_pattern机制,当程序崩溃时生成一个含有漏洞的core dump文件。通过解析这个文件可以触发漏洞。 接下来是new_era,教育奖得主。这个问题涉及Linux内核中的堆溢出漏洞,帮助参赛者学习内核层面的攻击方法。 最后是old school,风水奖得主。这是一个复杂的glibc堆问题,在没有tcache的情况下处理double free的情况。 除了这些获奖问题外,文章还提到了其他一些值得一看的问题,如Stack Rhapsody、piano、LPE和RandomJS等。 总的来说,这篇文章详细介绍了今年CTF比赛中的一些精彩问题,并分享了作者对这些问题的看法和解题思路。 </think> 这篇文章总结了今年CTF比赛中几个有趣的问题及其奖项:创造力奖(Stack Impromptu)、脆弱性奖(decore)、教育奖(new_era)和风水奖(old school)。每个问题都展示了独特的解法和技巧,并附有作问者和详细解释。此外还提及其他未获奖但同样值得关注的问题。 2025-12-31 04:56:5 Author: ptr-yudai.hatenablog.com(查看原文) 阅读量:3 收藏

今年参加したCTFの中から主観で面白かった問題を取り上げます。毎週参加してるわけではないので他にも面白い問題があったと思いますが、CTFtimeでtop 10に入るほどには参加していたらしいので今年は記事にしてみました。もっと面白い問題を知っているぞという方はぜひ教えてください。

Stack Impromptu - 創造力賞

創造力賞(Creativity Award):解法がもっとも独創的だった・美しかった問題に与えられる賞

作問者

Dronexさん

解説と概要

はじめに紹介するのはBlackHat MEAの決勝で出題したStack Impromptuという問題です。「出題した」というように私が作問者になっているので紹介するか迷いましたが、90%くらいはDronexさんが作った問題なので対象にしました。

スレッド型サーバで次のような自明な脆弱性があるという問題です。

void fatal(const char *msg) {
  perror(msg);
  pthread_exit(NULL);
}

int server_read(int& fd) {
  size_t size;
  char buf[0x40];

  memset(buf, 0, sizeof(buf));
  if (read(fd, &size, sizeof(size)) != sizeof(size)
      || size > 0x100
      || read(fd, buf, size) < size)
    goto err;

  write(fd, buf, size);
  return 0;

err:
  close(fd);
  fatal("Could not receive data (read)");
  return 1;
}

void* server_main(void* arg) {
  int fd = (int)((intptr_t)arg);
  while (server_read(fd) == 0);
  return NULL;
}

セキュリティ機構がすべてかかっているため、stack canaryやlibcのアドレスをリークする必要があります。リークするためには write を適切なサイズで呼ぶ必要がありますが、そのためには read が失敗する(-1を返す)必要があります。

この問題ではバッファオーバーフローによってfdが書き換えられるため、 pthread_exit が死なないように工夫すると良い感じに任意のfdをcloseできるprimitiveが手に入ります。ここでさらに、 read で待機中のソケットにRSTパケットを送ると、こちらから接続を切ることなく相手の read を失敗させることができます。これらを組み合わせて、サーバ側のfdを差し替えることで別のソケットが未初期化バッファのリークを受け取ることができるという、ソケットの知識をフル活用したパズルになっています。

解法スクリプト

コメント

間違えて解けない状態の問題をDronexに渡したら、1日かけて解いてきたので驚きました。 fdが差し替わることで、新しく開いたソケットに突然プログラム上ありえない謎のデータが降ってくるリーク方法は過去に見たことがなく美しかったです。

decore - 脆弱性

脆弱性賞(Vulnerability Award):脆弱性がもっとも巧妙かつ自然に隠されていた問題に与えられる賞

作問者

不明

解説と概要

decoreはKalmarCTF 2025で出題された問題です。脆弱なプログラムが core_pattern に登録されているので、クラッシュすると「解析されると脆弱性を発火するコアダンプ」を生成するようなプログラムを作る必要があります。脆弱性はシンボル情報のパース時にELFのsymtab/strtabが不正だと範囲外参照を起こしてしまうというバグです。範囲外参照でフラグを表示するためにはフラグがメモリにマップされている必要があるので、そこをなんとかするという問題です。 この問題に関してはwriteupを公開しているので詳しくはそちらをご覧ください。

ptr-yudai.hatenablog.com

コメント

core_pattern に脆弱なプログラムが登録されていて権限昇格に使うという問題設定がそもそも斬新でした。プログラム側の脆弱性と、Linux側の回避しようのない問題を組み合わせて初めて解けるのも面白かったです。 脆弱性も実際にありそうな感じで良かったですが、欲を言えばソースコードも配布してほしかったです。

new_era - 教育賞

教育賞(Educational Award):もっとも教育的な問題に与えられる賞

作問者

r1ruさん

解説と概要

OSINTで有名なTsukuCTFですが、今年はr1ruさんがpwnを出題されていました。この問題は、Linux kernelのヒープでoff-by-nullが起きるというシンプルな脆弱性です。 こちらは作問者writeupが公開されているので、詳しくはそちらをご覧ください。

r1ru.github.io

コメント

ここ数年、Linux kernel exploitは半分以上がdata-oriented attackになっており、 pipe_buffer やページテーブルを使う問題を多く見るようになったため、その点でも教育的だと思いました。 同CTFのxcacheという問題も、Linux kernelの専用キャッシュでUAFが起こるという近年よく見るパターンを簡略化した問題設定のため、cross-cache attackの教材としておすすめです。

old school - 風水賞

風水賞(Feng Shui Award):もっとも面倒な*1glibcヒープ問題に与えられる賞

作問者

c0mm4nd_さん

解説と概要

最後に紹介するのはsnakeCTF 2025 Qualsのold schoolです。 この問題は、tcacheが無効化された環境で、freeとreallocでdouble freeが発生するという状況をなんとかするヒープ問です。fastbinのdouble freeといえば、2つのチャンクを交互にfreeして検知を回避するのが一般的ですが、この問題は2連続でfreeされることが確定しているため難しい問題です。topから取得できないがfastbinがあるときに malloc_consoliadte が走るという挙動を利用すると解けます。 公式writeupが公開されているので、詳しくはそちらをご覧ください。

snakectf.org

コメント

fastbinをunsortedbinに追い出したり、fastbinでFILE構造体を書き換えにいったり、いろいろ考えることがあって大変でした。ヒープで苦しみ楽しみたい方にはおすすめです。 いままでありがとう、fastbin。

その他の良問

惜しくも受賞を逃した問題たちです。

  • 創造力賞
    • Stack Rhapsody - BlackHat MEA CTF 2025 Finals(ソースコードがとてもシンプルで一見すると不可能ですが解ける面白い問題です。)
  • 脆弱性
    • piano - HKCERT CTF 2025 Quals(例外発生時のスタックの扱いでコーナーケースが発生し、結果としてUse-after-Freeにつながるという、一見パッチから何が起こるかわかりにくい問題でした。)
  • 教育賞
    • LPE - CODEGATE CTF 2025 Finals(Windows 11のセキュリティ機構入門として良いと思います。)
    • RandomJS - ASIS CTF 2025 Quals(JavaScriptのUse-after-Free入門として良いです。)
  • 風水賞
    • pryspace - TSG CTF 2025 Quals(厳しい制約で巨大なunsortedbinを作るというアイデアが斬新でした。)

*1:ヒープ問においては褒め言葉?


文章来源: https://ptr-yudai.hatenablog.com/entry/2025/12/31/135605
如有侵权请联系:admin#unsafe.sh