ひとこと

― 今日のひとこと ―
年に1回くらい、EVE Onlineやりたくなるのよね。
(2025.12.24)
ラベル Kioptrix の投稿を表示しています。 すべての投稿を表示
ラベル Kioptrix の投稿を表示しています。 すべての投稿を表示

2020年6月11日木曜日

OSCP学習 #1

2020年4月末頃、会社の上司(趣味が"冒険"のアメリカ人。よくジャングルに消える)から「OSCP受けたい人いたら経費で受けられるよ」と連絡があり、もともと自分で受けるつもりだったのでこれ幸いと申し込み。約10万円浮きました。

OSCPというのは海外のセキュリティに関する民間資格で、サイバー攻撃に特化したハンズオンの試験が行われるなかなか難しいと評判のもの。
試験は48時間あり、最初の24時間で5台のマシンをハッキングして管理者権限を取り、次の24時間でその過程についてレポート(全部英語)を作成し提出するというもの。
うーんめんどくさい。

Kioptrixの記事は#2を書く気力がないのでOSCPの方をメモしておこう。。

----------------------------------------------------------------------------

OSCPはいきなり受けることもできるが、基本的にはラボ利用権を購入し、ラボで学習した上で受験する形になる。
利用権は30日/60日/90日から選択し、その期間内はラボのマシンに攻撃を仕掛けることができる。
また、権利発生初日にテキスト(これも全部英語)がPDFで送られてくるので、それを読んで基礎を学習することができる。

自分は5月9日から90日間で申し込んでおり、6月5日時点でテキスト読了&6月10日時点でラボ4台攻略済みという状態。

----------------------------------------------------------------------------

■テキストについて

850ページ超あります。以前は350ページ程度だったらしいが最近アップデートされたとか。
複数のブログ等では、以前のバージョンでの受験記なんかで「1か月かけて読みました」という記述を目にするが、今や850ページ・・・
全部英語だしふつーに読んでたら2か月くらいかかりそうだぞ。

ということで、まずテキストを機械翻訳。
会社がNDA付きで導入している翻訳サービスを利用。翻訳対象ファイルのサイズ制限によりテキストを8分割して翻訳依頼キューに登録。
翻訳完了通知が来たのが3日後の朝。8つのうち1つは翻訳不可とのエラーだったので、それは更に2分割して再度翻訳依頼。
次の朝には2つのうち1つは翻訳できたので(もう1つはやはりエラー)、そのまま読み進めることに。

内容としては、Bashの使い方やfind, vi, grep等とそれに類する便利なコマンドの利用方法にはじまり、
DNSからのホスト名列挙やポートスキャン等のEnumerationテクニックや、
RFIやSQLインジェクション等のWeb系、Active Directory、ラテラルムーブメント等の技術やツールについてなど、
25章に渡って解説されるもの。
途中途中でエクササイズと称したハンズオンがあり、それをやると理解が深まる。やらなくてもいい。

仕事が忙しかった日や2度の抜歯で悶え苦しんでいた期間を除き、だいたい20日くらいかけて読了した。

自分の場合は、体感的には6割くらいは既知の内容だったものの、Enumerationの知見が広がったこと、
ADやラテラルムーブメント等のRedteam的な部分を多少体系的に理解できたのがよかった。
ただ、バッファオーバーフローについてはもう少し手を動かしてスムーズに実践できるようになるべきだな。

あらゆる技術を実践するにあたり、自分の得意な部分(完全に自力でできること)や不得手な分野(何かを参考にしないと自力でできないこと)を細かく確認できたと思う。

----------------------------------------------------------------------------

■ラボについて

ちゃんと数えてないけど多分50以上のIPがあります。
VPNでラボのネットワークに繋ぎ、任意のIPを攻撃し、管理者権限またはシステム権限を取得し、Shellを得て、特定のテキストファイルを探すという流れ。

IPによってはどうも指定されたテキストファイル以外にも重要情報があるそうで、そこについてはノーヒント。
とりあえず、今のところ自分は指定のテキストファイルだけを探すようにしている。
情報を見つける見つけないよりも高権限のShellを奪うまでの技術習得を優先したいので。

試験本番ではMetasploitやSqlMap等の一部の強力なツールと商用ソフトウェアの利用が制限ないし禁止される。
https://support.offensive-security.com/oscp-exam-guide/#exam-restrictions:-metasploit

理由は「プロセスの自動化ではなく脆弱性の特定と悪用に関するスキルを評価するため」らしい。
ラボ環境においては学習のため積極的にそれらのツールを使うべきとテキストに記載されているとはいえ、
自分はラボでも基本的にそれらは使わないか、使ったとしてもその後に使わないパターンでも攻略するようにしている。

例えば、ラボのとあるIPを攻略するにあたり、どうもSMBがあやしいという時。
Enumerationの結果EternalBlueの脆弱性がありそうだということがわかるも、
カーネルレベルのメモリの脆弱性をネットワーク経由で悪用する(=そのExploitを作れる)ほどの力も時間もない。いやある方がおかしいけど。
Webで見つけたExploitの概要を読んでもピンとこない。
ここで、MetasploitのEternalBlueに関するExploitモジュールを使えばシステム権限のShellをスムーズに取得することはできた。
その後Githubで改めてExploitを見つけ、単発的なコード実行ができることは確認した。
それ単体ではShellが取れないので、「ただファイルを作成するだけ」というPythonのExploitを他で見つけ、FTPコマンドを持つテキストファイルを作成するよう書き換えた。
(1つ目のExploitで繰り返しechoリダイレクトしてもよかったがスマートではないしレスポンス時間に難があった)
自身の環境でFTPサービスを起動し、nc.exeやwhoami.exeをFTP用ディレクトリに準備し、Shell用のポートをlistenしておく。
その後、2つ目のExploitで作成したFTPコマンドファイルを使って、1つ目のExploitでFTPを実行し、自身の環境からexeファイルをダウンロードし、再度1つ目のExploitでnc.exeによるreverse shellのコマンドを実行し、listenしておいたポートでShellを取得。
whoamiで現在のユーザを確認。システム権限であることが明示的にわかったのでdirコマンドでフラグを検索。
これで無事クリア。という流れ

難易度は様々ありそうだけどたしかにKioptrixと似ているものもある。

----------------------------------------------------------------------------

■今後の学習の流れ

来月中にラボを30台以上は攻略し、バッファオーバーフローを完全に修め、準備が整ったと判断できたら試験に申し込むつもり。
契約上は12月頭までに受ければいいことになっているがラボは8月上旬までしか使えないし、8月には受験したい。

今のところ1日1台くらいのペースで攻略できているが、難しいやつにあたると3日とかかかりそうではある。。
Try Harderだぜ!

2019年12月30日月曜日

Kioptrix攻略 #1

サイバーセキュリティのオフェンシブな技術を実践すべく敢えてセキュリティホールを持つよう構築された仮想マシンが集うサービス、VulnHub
2020年内のOSCP取得に向けた学習を兼ねて、VulnHubの仮想マシンの中でも最もOSCPっぽいと名高いKioptrixシリーズに挑戦する。

過去にこのブログで攻略記事を書いていたHackmeは、用意されたWebアプリケーション上の脆弱性を各レベルで1つずつ突いていく構成だった。
少なくとも自分がクリアしたLv1~Lv4については、Webセキュリティにおける脆弱性攻撃の基礎を手で学ぶための、どちらかというと初学者向けのサービスだ。
Kioptrixは、ネットワーク越しに仮想マシンの管理者権限を取得するという目的において、攻撃面はWebに限定されない。
自分が現在クリアしているLv1~Lv2に関していえば、むしろWebだけでは不充分だ。実際の侵入テストと同じく、ステップバイステップで情報を集め、攻撃を試していく必要がある。
その分だけHackmeより多角的・実践的な技術が求められるというわけだ。

とはいえ自分もこういったテストの経験はあまりないので、試行錯誤しながら進めている。
同じくトライ&エラーで進めた方が様々勉強になるのは明らかなので、「何から手を付ければいいのか全然わからねぇ...」というシャイボーイ以外はここでページを閉じ、まず自力で解いてみることをお勧めする。

なお、ただ解き方を書き残すのではなく、どう考えて何をしたのか?をちまちま書いているため長いです。

仮想マシンの立ち上げについては詳細割愛する。
Kioptrixのrarファイルをダウンロードして展開してVirtualBoxで仮想マシンを立ち上げてネットワークアダプタをNATネットワークにするだけ。たぶん。
(Lv1だけはちょっと設定が面倒なので、このサイトを参考にしてください。)
攻撃にはKali Linuxを使う。基本的に、自身が操作するのは全部Kali。こちらの立ち上げやツールの使い方等についても割愛。


では!




0.Kioptrixマシンを探す

KioptrixマシンはKaliと同じネットワークに存在するはず。なのでまずKaliのIPアドレスを確認する。
ifconfig


自分の環境ではKaliのIPアドレスは10.0.2.5なので、10.0.2.5/24を探索対象にしよう。
nmap 10.0.2.5/24 -T5
単純にnmapでネットワークスキャン。
KioptrixマシンのIPがわかればいいので"-T5"オプションで高速化する。


開いているサービスを見るに、10.0.2.6がKioptrixマシンのようだ。

1.ポートスキャン

KioptrixマシンのIPアドレスを指定して、サービスのバージョンを詳しく調べてみる。
nmap -Pn -sV -p- 10.0.2.6
前回の結果で疎通可能なのは明らかなので"-Pn"でpingを省略し、"-p-"で全ポートを指定した上で"-sV"でバナー情報を取得する。


うーん古い!(古いVMだから当然だけど)
Webシステムのプラットフォームの脆弱性診断なんかをやっていると、よく使われるサービスのバージョン感というか、「このサービスの最新はこのバージョンで、どのバージョンにはこういう脆弱性が報告されている」というのをなんとなく覚えてしまう。
なのでOpenSSH 2.9やらApache 1.3.20やらを見ると、まるで古代遺跡を掘り当てた考古学者のように、これは大変なお宝が眠っていそうだぜ!とわくわくするのだ。
バージョンは出ていないがSambaも気になる。

2.Webアプリケーションのチェック

脆弱性情報を調べる前に、ポート80/443でWebサーバが稼働しているようなので、とりあえずブラウザでアクセスしてみよう。

"Test Page"?ほーん
どんなページがあるか探してみる。
python3 dirsearch.py -u http://10.0.2.6/ -e * -x 403,404
Webサイトのページを探索するツールは色々あるが、自分はdirsearchをよく使う。結果は...
  [01:18:34] 200 -    3KB - /index.html
  [01:18:35] 301 -  294B  - /manual  ->  http://127.0.0.1/manual/
  [01:18:40] 200 -   27B  - /test.php
  [01:18:40] 200 -    4KB - /usage/

RCEか、それに繋がるような脆弱性があるかもしれないと考え、test.phpとusage/を軽く確認したが、特に実りなし。
本格的にWebの脆弱性を探し始めるとかなり時間がかかってしまうので保留とする。
ちなみに、usage/のページに記載されていた、ページで利用されているのであろうソフトウェア「Webalizer Version 2.01」にはRCEの脆弱性(CVE-2002-0180)が報告されている。
しかしそのCVEに対応するExploitは見つけられなかった。

3.サービスのチェックと脆弱性攻撃

nmapで得たバナー情報によると、Kioptrixマシン上で気になるサービスが3つ稼働している。
  • OpenSSH 2.9p2
  • Apache/1.3.20 (Unix)(Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
  • Samba
OpenSSHやApacheのバージョンはずいぶん古いし、Sambaは比較的最近でもマルウェアが感染活動に悪用することで知られている。
この3つについて、RCE等でCVSSの高い(必要条件の緩いRCEなので体感CVSS7.0以上くらいの)脆弱性を順番に探していく。

OpenSSH 2.9p2

Webでざっと調べたところ、該当しそうなCVEは4つ。ただ、これらのExploitは見つけられなかった。
  • CVE-2002-0639
  • CVE-2002-0640
  • CVE-2006-5051
  • CVE-2010-4478

OpenSSHにはユーザ列挙の脆弱性がある(&それ脆弱性じゃないぞと公式見解が出た)ことは有名なので、それを試してみる。
Metasploitを使う。
msfconsole
SSHのユーザ列挙の脆弱性をsearchで見つけ、実行する。
use auxiliary/scanner/ssh/ssh_enumusers
set RHOSTS 10.0.2.6
set THREADS 8
set USER_FILE '/usr/share/wordlists/metasploit/unix_users.txt'
run
結果は...
    [+] 10.0.2.6:22 - SSH - User 'adm' found
    [+] 10.0.2.6:22 - SSH - User 'bin' found
    [+] 10.0.2.6:22 - SSH - User 'daemon' found
    [+] 10.0.2.6:22 - SSH - User 'ftp' found
    [+] 10.0.2.6:22 - SSH - User 'games' found
    [+] 10.0.2.6:22 - SSH - User 'gopher' found
    [+] 10.0.2.6:22 - SSH - User 'halt' found
    [+] 10.0.2.6:22 - SSH - User 'lp' found
    [+] 10.0.2.6:22 - SSH - User 'mail' found
    [+] 10.0.2.6:22 - SSH - User 'news' found
    [+] 10.0.2.6:22 - SSH - User 'nobody' found
    [+] 10.0.2.6:22 - SSH - User 'operator' found
    [+] 10.0.2.6:22 - SSH - User 'postgres' found
    [+] 10.0.2.6:22 - SSH - User 'root' found
    [+] 10.0.2.6:22 - SSH - User 'sync' found
    [+] 10.0.2.6:22 - SSH - User 'uucp' found
結構たくさんユーザがいるようで。
ちなみにこれらのユーザに対してhydraで総当たり攻撃してもパスワードは見つけられませんでした。
リストはMetasploit標準のものを使ったとはいえ、そんな文字通り力づくな方法でクリアできたらつまんないよね。

というわけで、OpenSSHから攻めるのは諦める。

Samba

Webアプリケーションの脆弱性は見つかっていないので、気分転換のためApacheではなくSambaを調べることに。
smbclient -L 10.0.2.6
これで普通に接続しただけではバージョンはわからなかった。
まぁこんなのでわかるならきっとnmapが突き止めてくれているか。
他にバージョンを確認する手段を調べたところ、Metasploitに該当するモジュールがあることがわかったので早速使ってみる。

use auxiliary/scanner/smb/smb_version
set RHOSTS 10.0.2.6
set THREADS 8
run

あっさりわかった。Samba 2.2.1aだ。このバージョンに対応する、ちょうどいいCVEは...
  • CVE-2003-0201
この脆弱性はOSごとのExploitが複数公開されている。
Metasploitモジュール含め4つほど試してみたが、うまくいったのはこの1つだけ。
https://www.exploit-db.com/exploits/22469
他はモジュールのコード修正したりgccのオプションいじってみたりしたけど実りなし...ここですごく時間がかかった。

Apache/1.3.20 (Unix)(Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b

「"Apache 1.3.20" "exploit" -"kioptrix"」といったキーワードでWeb検索すると、何やらものものしい名称のExploitがすぐに見つかった。
このExploitのREADMEを読めば書いてあるが、なぜそんな名前に...
https://github.com/heltonWernik/OpenLuck

git clone https://github.com/heltonWernik/OpenFuck.git
gcc -o OpenFuck OpenFuck.c -lcrypto
./OpenFuck 0x6b 10.0.2.6 -c 50

4.コマンド実行

SambaやApacheの脆弱性を突いて、Kioptrixマシン上でコマンドを実行できるようになった。
まず確認すべきは自分の権限だ。whoamiで簡単に確認する。
whoami
"root"と出力され、管理者権限でコマンドを実行できていることがわかる。

次に、既存ユーザのパスワードを調べてみる。
cat /etc/passwd
cat /etc/shadow
OpenSSHでのユーザ列挙で判明していたユーザ名がちらほら。
これらの表示結果を基にパスワードハッシュを解析してみたが、10分ほど経過しても解析しきれなかったので中断。
ハッシュ解析にはJohn the Ripperを使った。このツールの使い方はHackme攻略 Lv3の記事を参照。

既存ユーザがだめなら新しいユーザを作ってやる、と考えユーザ作成コマンドを実行
useradd fakeuser
adduser fakeuser
...するも悉く失敗。
仕方ないのでrootのパスワードを変更する。
passwd
これでSSHでログインできるようになったので、試してみる。

やったぜ。

さて、VulnHubのページには"Flag(s) EMail"と記載されているので、メールを探す。
いくつかディレクトリを眺めていると、/var/mail/rootというパスを見つけた。
cd /var/mail
more root
これでファイルを読んでみると...

"If your are reading this, you got root. Congratulations. Level 2 won't be as easy..."

Lv1クリア!


なお、ふと「これsendmailかな」と思いsendmailコマンドを打ってみるとビンゴだったので、moreじゃなくてmailコマンドでもメールが読めます。
あとついでにSSH接続でuseraddしたらユーザ作成できたけど理由がよくわかってない

--------------------------------

久し振りに長めの記事を書いたけどめちゃくちゃ疲れた...Lv2以降書くの億劫だな...