【TryHackMe】Network Services2のメモ

TryHackMeのNetworkServices2 Roomをやったメモ
nmapしてport, ミドルウェア取得して、metasploitでExploitの流れが基本ね

NFS:
Network File System, allows a system to share directories and files with over a network by mounting a file system on a server
NFSを使ってファイルにアクセスするには、RPC callがnfsd(NFS daemon)へ配置される、そのcallのparametersは、file handle, file name, user id, group id
NFS protocolを使ってNFSは動く
NFSの最新versionは4.2(2016年から変わっていない)

Enumerating NFS:
NFS-commonというツールを使う、このツールはいくつかのパッケージから成るが特にshowmount と mount.nfsがNFS shareから情報を取り出すのに使える、インストールはsudo apt install nfs-common
では、いつも通りport scanningから始めるよ、nmap -A [Target IP]
22/tcp ssh, 111/tcp rpcbind, 2049/tcp nfs がopenです
/tmp/mountをmkdirしてmountしてみます
sudo mount -t nfs [NFS server IP]:[name of share] /tmp/mount/ -nolock
-t nfs: type of device to mount
-nolock: NLM locking使用設定
あれ?拒否られたけど,,,あー、shareの名前がだめなのか
/usr/sbin/showmount -e [NFS server IP]、これでshare名を取得
正しいshare名で再度mount、成功!
ssh鍵とユーザー名取得して、ssh成功!

Exploiting NFS:
escalate privileges, Root Squashing is enabled, リモートrootユーザーはnfsnobodyにアサインされ、それは少ない権限しか持たない。もし、Root squashingをoffできればSUID bitファイルを作って、リモートからrootアクセスできるはず
SUID(Set User ID)とは、どのユーザーでそのファイルを実行しても特定のユーザーで実行されるファイルのこと、今回はsuper-user権限
方法は、ややこしく聞こえるがSUID filesがどう動くかわかれば簡単、我々はすでにfileをNFS shareにアップロード可能、そしてこれらのファイルのパーミッションは操作可能。今回のケースでは、bash shell をexecutableでアップロードする。そして、ssh接続してそのbash shellを実行してrootに昇格する。
~/Downloads/にbashスクリプトをダウンロードして、cpでmount先のNFS shareに配置、root権限、SUID bit permissionの設定はchmod +sx bashスクリプトでOK、したらsshしてhomeディレクトリ見る。bashスクリプトある。./bash -pで実行。
root昇格成功!
/root/root.txtの中身を確認して、flag取得!

SMTP:
Simple Mail Transfer Protocol, handle the sending of emails.
POP and IMAP, Post Office Protocol and Internet Message Access Protocol
仕組みは、
1. mail user agent(mail client)からSMTP serverに接続(SMTP handshake, port25)
2. clientはsenderとrecipientのメールアドレスとメール body、添付をserverへ送る
3. SMTP serverはrecipientのdomain nameを確認する
4. SMTP serverはrecipientのSMTPserverに接続を試みる、繋がらない場合はメールはSMTP queueにputされる
5. recipientのSMTP Serverは受信メールを確認し、POP or IMAP serverに転送する
6. 受信者はEmailを確認できる

Enumerating SMTP:
MetaSploitのsmtp_version moduleを使う。
SMTPは2つの内部コマンドを持っている、VRFY(有効なuser name)、EXPN(emailアドレス)、これらを用いて有効なユーザーリストを明らかにする。
telnet接続すれば手動でenumerateできるが、MetaSploitはsmtp_enumというモジュールを持っているので、それを使う。
MetaSploit以外では、smtp-user-enumというtoolもある。

では、ポートスキャンから、nmapでいつも通り。25ポートでSMTPが動いていることを確認。
msfconsoleコマンドでMetasploitを起動。
searchコマンドでsmtp_versionのフルパスを確認。
useコマンドでsmtp_versionモジュールをactiveにする。
optionsコマンドでモジュールオプションの設定を確認。
RHOSTSが設定されていないことがわかる。
set RHOSTS [IP address]で値を設定。optionコマンドで値が入ったことを確認。
runコマンドを実行、system mail nameをget!
MTAとしてはpostfixが動いていることも確認!

それでは次のステップへ。smtp_enumモジュールをsearchします。
useでsmtp_enumモジュールをactiveにする。
optionsで設定を確認したところ、RHOSTSが空、あとUSER_FILEというwordlistファイルを指定できる設定もある。set RHOSTS [Target IP address]とset USER_FILE [wordlistファイルパス]で設定。run!!
あれ?ユーザー名返ってこんぞ。。。
USER_FILEで指定したパスが間違ってた。。。
Users found: administrator
見つかりましたね!

Exploiting SMTP:
Enumeration sectionでuser nameとSMTPサーバータイプとOSの情報を獲得しました。
また、port scanningでは22 sshも開いていることも確認済。
SSHパスワードブルートフォース攻撃をHydraを使って実施します。
Hydra は辞書を使った攻撃がメイン。/usr/share/wordlists/rockyou.txt もよく使われる。他を使いたい場合はSecListsがオススメ。
文法 hydra -t 16 -l [USERNAME] -P /usr/share/wordlists/rockyou.txt -vV [target IP] ssh
-t 16: 並列接続数、-P path to dictionary、-vV verbose
実行!
はい、パスワード見つかりました!
当該パスワードを使ってSSHしてsmtp.txtを確認!Exploit成功!

MySQL:
relational database management system(RDBMS) on Structured Query Language(SQL)
database: 構造化データ、RDBMS: キーを持ったテーブルを使ったリレーショナルデータベースの管理ソフトウェア、SQL: mysqlを始めとしたRDBMSソフト(server)にclientとして繋ぐ時にSQLを使う、mysqlはlinuxやwindows上で動き、back end databaseとして一般的に使われている(LAMPなど)。facebookでも使ってるらしい。

Enumerating MySQL:
Mysqlは最初の攻撃ポイントとしてはあまり好ましくない、もちろん デフォルトアカウントに対しブルートフォース攻撃をかけることはできるが、ほとんどのCTFシナリオでは、あまりやらない。シナリオとして、典型的にはenumerationによってmysqlに攻撃するためのクレデンシャル情報を取得する。このルームでは前提として、webサーバーのサブドメインをenumerateし、root:passwordを発見し、その情報でSSHしようとしたが失敗し、mysqlに攻撃しようとした前提で進める。ツールはMetasploitを使う。

それでは、いつも通りnmapでport scanから、3306/tcpがmysqlで開いてます。ではシナリオ上で取得済みのクレデンシャルを使ってmysql接続できるか試します。mysql -h [Target IP] -u [username] -pを実行。あれ、AttackBoxにはmysql client入ってない模様。そしてapt installも失敗する。うーん、どうしようもないですな。次に行きます。
Metasploitコンソールを起動。msfconsole実行。mysql_sqlモジュールを使います。searchでmysql_sqlモジュールを探します。use auxiliary/admin/mysql/mysql_sqlで当該モジュールをactiveにします。optionsで設定が必要な変数を確認、PASSWORD, RHOSTS, USERNAMEですね。set PASSWORD password, set RHOSTS [Target IP], set USERNAME rootで設定。optionsのSQL変数がデフォでselect version()になっているらしく、バージョン情報を取得できました。次にそのSQL変数を変更して何のデータベースがあるか確認します。set SQL show databasesです。information_schema, mysql, performance_schema, sysの4つを確認。

Exploiting MySQL:
Enumeration stageでmysql serverクレデンシャル、mysql version、データベースを知りました。次のステップに移る前に、少し用語の解説。スキーマ: mysqlではデータベースと同義と思ってもらっていい(oracleではスキーマはデータベースの一部だが)、ハッシュ: 可変長の入力を固定長の出力に変換する暗号化アルゴリズム、Mysqlでは、ハッシュをいくつかの方法で使っている。例えば、データをハッシュテーブルにインデックス付けすると、各ハッシュには元のデータへのポインターとして機能する一意のIDが与えられたことになり、元のデータよりも大幅に小さいインデックスが作成され、値をより効率的に検索・アクセスできるようになります。我々が取り出すデータはプレーンテキストではなく単なるパスワード保管用のパスワードハッシュです。
では、mysql_schemadumpモジュールをuseでactiveにします。optionsでPASSWORD, RHOSTS, USERNAMEが空であることを確認。setしていきます。run実行!
スキーマ情報が表示されました。
なんかもっといいモジュールがあるらしい、mysql_hashdump(先言えや
同様にuseして、optionsでrun!
なんとデフォでないユーザーが検出されました。パスワードハッシュも取得。
ユーザー名とハッシュごとコピーして、hash.txtをlocalに作成。
では、John the Ripperを試します。john hash.txtでいいらしい。
パスワードが表示されました。
パスワードの使い回しは大変危険ですが、みんなやりがちなので、他のサービスにもこのユーザー&パスワードを使ってみましょう。ということで、SSHしてみます。いけました!
フラグ取得成功!

Please share this page: