*白百合めも*

セキュリティ中心に毎日の勉強の記録を書くよ*

Metasploitable2落城計画〜その2〜

皆さんこんにちは✨白百合です!

最近急に寒くなってきたので、あったかいお茶でも飲んでほっこりしながら見てくださいね*(ノンカフェインで健康にも良いルイボスティーが最近のハマりです❤️)

今回は、前回(Metasploitable2落城計画〜その1〜 - *白百合めも*)に引き続き、Metasploitable2を攻略していきますよ!🍰


nmapで見つかったポート・サービスのうち、今回はこれらについて見ていきます🍦

25/tcp    open  smtp        Postfix smtpd
512/tcp   open  exec        netkit-rsh rexecd  
513/tcp   open  login       OpenBSD or Solaris rlogind  
514/tcp   open  shell       Netkit rshd  
1099/tcp  open  rmiregistry GNU Classpath grmiregistry  
1524/tcp  open  bindshell   Metasploitable root shell  
2049/tcp  open  nfs         2-4 (RPC #100003)  


・攻撃法

❤️25/tcp open smtp Postfix smtpd

これに関しては一発でシェルを取ることはできないので前回省略していたのですが、 アプローチとして大事だなと思ったので載せます!!

よく使われるユーザ名のリストを用意して(デフォルトは/usr/share/metasploit-framework/data/wordlists/unix_users.txt)、
Metasploitモジュールauxiliary/scanner/smtp/smtp_enumにて、
メールで使われているユーザアカウント(システムのアカウントも大体同じ)を辞書攻撃で見つけていきます!

SMTP内部コマンドで、VRFY・EXPN(指定されたユーザのメールボックスがあるかどうかを検査する)と言うものがあり、これが有効になってるとユーザアカウントの一部が辞書攻撃でわかってしまいます⚡️
(モジュールについて詳しくはこちら
Scanner SMTP Auxiliary Modules - Metasploit Unleashed


早速やっていきます!

モジュールを設定して、
f:id:white-lily6u6:20181028101735p:plain:w350
RHOSTにMetasploitable2のIPアドレスを設定して、
f:id:white-lily6u6:20181028101746p:plain:w500
exploitすると……
f:id:white-lily6u6:20181028101756p:plain:w600
ちょっと小さいですが、ユーザアカウントが列挙されていますね!
特定のサービスに対するブルートフォース・辞書攻撃の対策をしていても、別のサービスに対してやられてしまったらしょうがないので、漏れがないようにしておきましょう*



❤️512/tcp open exec netkit-rsh rexecd
❤️513/tcp open login OpenBSD or Solaris rlogind
❤️514/tcp open shell Netkit rshd


次はこの3つについてまとめて見ていきますね♪
rexec、rlogin、rsh、これらは全部前にremoteの"r"がついてることから想像つく通り、
リモートからサーバにログインしたりそこでコマンド実行したりできるサービスになります!

rlogin:リモートのサーバにログインする
rexec:rloginでリモートのサーバにログインした際、コマンドを対話式に実行できるようにする
rsh:外部サーバ上でコマンドを実行できるようにする
  実行コマンド名が指定されている場合には、
  リモートホスト上で単一のコマンドを実行し、
  コマンド名が指定されていない場合は、rlogin コマンドを実行する

これらは色々とセキュアじゃないので、基本的に使用しない方が良いです。

例えば!
各ユーザのホーム直下の「.hosts」ファイルに、信頼されたホストのIPアドレス/ホスト名とユーザ名を並べて記述するのですが、

f:id:white-lily6u6:20181025210528p:plain:w300

このように+ +と書いてあると、どこからでもどんなユーザでもパスワードなしでrloginできてしまうんです⚡️

実際にKaliでやってみたのがこちら!
f:id:white-lily6u6:20181025210958p:plain:w500
あっさりとrootログインできてしまってますね💦

一般ユーザの人が自分のホーム下に .rhosts ファイルを作成して、勝手にそのユーザーに対するアクセス権を与えることができてしまうので、まずいですね😠



❤️1099/tcp open rmiregistry GNU Classpath grmiregistry

こちらはググってみると、

CVE-2011-3556 : Unspecified vulnerability in the Java Runtime Environment component in Oracle Java SE JDK and JRE 7, 6 Update 27 and ear

がヒットしました🌸
Java RMI(Remote Method Invocation)とは、リモートホスト上にあるJavaオブジェクトのメソッドを呼び出すためのコンポーネントです🌷

特定のバージョンのJava RMI Serverのデフォルト設定に脆弱性があり、どんなリモートURLからのClassでも認証なしで読み込めてしまうみたいです⚡️

これは、Metasploitモジュール、exploit/multi/misc/java_rmi_serverを使っていきます!

一応「rmi_server」でモジュール検索すると、ちゃんとお目当のものが出てきましたね!
まずはこのモジュールを指定します🌹
f:id:white-lily6u6:20181102194218p:plain


今回はペイロード(exploit成功後に実行されるコード)をちゃんと設定する手順を踏みたいと思います!🌺
(設定しないと、コードで書かれているペイロードが実行されるか、コードにも書かれていなければMetasploitが自動的に設定してくれる)

Meterpreterという、Metasploitのコンポーネントペイロードに指定します*
Meterpreterのセッションが確立されると独自のコマンドが使えるようになり、
簡単にファイルをダウンロードアップロードできたり、対象と繋がってるWebカメラで写真が撮れたり、 色んなことができてしまいます🌼
(コマンド集はこちら→ Meterpreter Basics - Metasploit Unleashed
Windows向けのコマンドが多い印象です。。。!)

ここでは、java/meterpreter/reverse_tcpというペイロードをセットします🍨
f:id:white-lily6u6:20181102194237p:plain

オプションを見ると、ちゃんとペイロードがセットされているのが分かりますね!
(ちなみに、今回の場合ペイロードをセットしなくても、Metasploitが自動的に同ペイロードをセットしてくれます https://metasploit.help.rapid7.com/docs/working-with-payloadsf:id:white-lily6u6:20181102194248p:plain

上記オプションで設定必須になっているRHOST(Metasploitable2のIPアドレス)とLHOST(Kali linuxIPアドレス)を埋めます!
f:id:white-lily6u6:20181102194301p:plain

準備ができたら、exploitします!
f:id:white-lily6u6:20181102213722p:plain
Exploit failed: RuntimeError Timeout HTTPDELAY expired and the HTTP Server didn't get a payload request」というエラーが出てしまっているのですが(ググったら、Metasploit最新版にしたら直るよと書いてあったけど直らなかった)
sessionsコマンドで確認したところ、とりあえず新しいセッションはできているので繋いでいきます!

sessions -i 1と、セッションidを指定すると、無事Meterpreterが返ってきました!
対象はLinuxであまりコマンド使えないので、とりあえずshellコマンドで普通のlinuxコマンド打てるようにします✨
f:id:white-lily6u6:20181028163655p:plain
はい!ちゃんとrootが取れていますね!
リモートが絡んでくるシステム・サービスで脆弱性見つかると危ないなぁって分かりますね⚡️こういう系は特に脆弱性情報気をつけておきたい。



❤️1524/tcp open bindshell Metasploitable root shell


これは最もshell取るのが簡単だと思いますw
超分かりやすく開けてあるバックドアポート(ingreslockによる)ですね!
nc(telnet)で繋げにいくだけでrootゲットです! f:id:white-lily6u6:20181102221155p:plain
自サービスに時々スキャンしてみると不要なポートが開いてないか確認できて良いかもですね!(許可がおりている範囲外には絶対やらないでね)



❤️2049/tcp open nfs 2-4 (RPC #100003)   


NFSとはNetwork File Systemの略で、UNIX系OSで利用されるファイル共有システムのことです🍧
これはRPC(Remote Procedure Call)という、ネットワーク上の別のサーバにプログラムを実行させ、その結果を元のサーバに返す手法が使われています🍩

早速やっていきます🍫
事前準備として、Kaliにてapt install rpcbindapt install nfs-commonで必要なコマンドを使えるようにしておいてください✨
まず、rpcinfoコマンドで、Metasploitable2のサーバ上で動作しているRPCのサービス一覧を見ていきます!

f:id:white-lily6u6:20181102224601p:plain:w380

また、showmount -eコマンドを実行すると、ルートファイルシステムがエクスポートされていることがわかります🍡
*と記載があるので、どのユーザでもマウントできてしまいます!
f:id:white-lily6u6:20181103004710p:plain:w450

今回は相手サーバにssh公開鍵を配置して鍵認証でsshできるようにします!
まず、新しくssh鍵を作ります🍮
f:id:white-lily6u6:20181105222152p:plain

次に、適当にマウント用のディレクトリを作り、
そこにMetasploitable2のルートファイルシステムをマウントさせます🌟
f:id:white-lily6u6:20181105222209p:plain

df- hコマンドでマウント状況が確認できます!
f:id:white-lily6u6:20181105225305p:plain:w400

次に、先ほど作った鍵のうち公開鍵を、マウントポイントの/root/.ssh/authorized_keysにコピーします🌺
f:id:white-lily6u6:20181105222232p:plain

これでMetasploitable2のサーバに公開鍵を配置できたので、マウントを解除します🍬
f:id:white-lily6u6:20181105222244p:plain:w300

あとは鍵認証でsshできることを確認すればオッケーです^v^*
f:id:white-lily6u6:20181105222257p:plain

こんなに簡単にできてしまうので、NFSを用いることがあれば十分にアクセス制限をかけたり使用できるユーザを制限したりしましょう!




当初の予定だともう少し先まで書くつもりだったのですが、
モチベーション維持のためにとりあえずここで公開します*

ご指摘などありましたらコメントやDMなどでお待ちしております!!

次も早めに書けたらいいな〜!❤️
最後は最近買った雑貨(これ3点で1000円いかない)を自慢して去ります!またね!

f:id:white-lily6u6:20181105232013j:plain:w500



参考サイト様
本家:https://metasploit.help.rapid7.com/docs/metasploitable-2-exploitability-guide
CSS様:https://www.computersecuritystudent.com/cgi-bin/CSS/process_request_v3.pl?HID=f213c73c216e2231c8f0d65f3d93ac18&TYPE=SUB
個人ブログ:Metasploitable: 2 – Walkthrough – Min Ko Ko