TryHackMe』というサイトがある。

わざと脆弱性を残してある仮想環境に対して攻撃を行うことでセキュリティの勉強をすることができるサイトだ。

こういう種類のゲームをCTF(Capture The Flag)と呼ぶらしい。

セキュリティの勉強をするなら自分が攻撃者側を体験するのが一番効率的だというコンセプトなんだろう。

自分はYoTubeで以下の動画を見てTryHackMeの存在を知った。

これが結構面白い。

攻撃の手順は割とテンプレ化できるところがあるので、よく使うサイトやコマンドをいつでも見返せるようにこの記事に残していく。

この記事は定期的に更新していくタイプの記事にする予定。

よく使うサイト

pentestmonkey

https://pentestmonkey.net/

リバースシェルのコマンド等が言語ごとにまとまっている。

『TryHackMe』では基本的にはシェルで侵入し、そこから攻撃を仕掛けていくことが多い。

ここで使えそうなコマンドを探してシェルに侵入していこう。

GTFOBins

https://gtfobins.github.io/

Linuxのコマンドを使って権限昇格を行う方法がまとまっている。

『TryHackMe』ではrootユーザに権限昇格できればほとんど勝ち確である。

このサイトで権限昇格できそうなコマンドを探してrootユーザになることを目指そう。

よく使うコマンド

ポートスキャン

nmap -sV (IP Address)

-sVオプションを付けることで動いているサービスとそのバージョン情報を取得できる。

実際の実行例が以下みたいな感じ。

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))

tcpの22番ポートでsshが、tcpの80番ポートでhttpがそれぞれ動いていることがわかる。

バージョン情報も合わせて表示することで、後述する脆弱性検索を使ってバージョン特有の脆弱性を探すことができるようになる。

ディレクトリ探索

gobuster dir -u (IP Address) -w (Wordlist File Path)

(IP Address)/.htaccessが存在しないか、(IP Address)/adminが存在しないかなどを自動で探索してくれる。

.htaccessやadminの部分は-wで指定したワードリストファイルに書かれている単語を使って探索する。

実際の実行例が以下みたいな感じ。

===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htaccess            (Status: 403) [Size: 277]
/.hta                 (Status: 403) [Size: 277]
/.htpasswd            (Status: 403) [Size: 277]
/index.html           (Status: 200) [Size: 11374]
/server-status        (Status: 403) [Size: 277]
/sitemap              (Status: 301) [Size: 314] [--> http://10.10.24.198/sitemap/]
Progress: 4614 / 4615 (99.98%)
===============================================================
Finished
===============================================================

この例では/.htaccess/.hta/.htpasswdなどが存在している。

ステータスが200系だったらアクセス可能、300系だったらアクセスできたりできなかったりである。

アクセス可能なディレクトリに攻撃の突破口がないかを探していこう。

ちなみにgobusterは1階層分しか探索をおこなわないので、もしアクセス可能なディレクトリが見つかったらそのディレクトリに対して再度gobusterを実行して再帰的に探索していくと良い。

SSH鍵のパスフレーズ解読

ssh2john (SSH Private Key File) > (Output File)
john hash --wordlist=(Wordlist File Path)

SSHの秘密鍵に設定されたパスフレーズを解読するコマンド。

johnが解読をおこなうコマンドである。

ただしjohnはハッシュしか受け付けないので、まずはssh2johnで秘密鍵をハッシュ化してからjohnに投げる。

wordlistに登録されているパスフレーズを使って総当たりをおこなうので、パスフレーズが強かったら解読できない。

脆弱性検索

searchsploit (Vulnerability Name)

言語やフレームワークの名前を使って、脆弱性を検索する。

例えば

searchsploit apache 2.4.18

を実行するとapacheのバージョン2.4.18に関連するような脆弱性を探してくれて、以下のような結果が出る。

--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                             |  Path
--------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Apache + PHP < 5.3.12 / < 5.4.2 - cgi-bin Remote Code Execution                                                            | php/remote/29290.c
Apache + PHP < 5.3.12 / < 5.4.2 - Remote Code Execution + Scanner                                                          | php/remote/29316.py
Apache 2.4.17 < 2.4.38 - 'apache2ctl graceful' 'logrotate' Local Privilege Escalation                                      | linux/local/46676.php
Apache < 2.2.34 / < 2.4.27 - OPTIONS Memory Leak                                                                           | linux/webapps/42745.py
Apache CXF < 2.5.10/2.6.7/2.7.4 - Denial of Service                                                                        | multiple/dos/26710.txt
Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuck.c' Remote Buffer Overflow                                                       | unix/remote/21671.c
Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuckV2.c' Remote Buffer Overflow (1)                                                 | unix/remote/764.c
Apache mod_ssl < 2.8.7 OpenSSL - 'OpenFuckV2.c' Remote Buffer Overflow (2)                                                 | unix/remote/47080.c
Apache OpenMeetings 1.9.x < 3.1.0 - '.ZIP' File Directory Traversal                                                        | linux/webapps/39642.txt
Apache Tomcat < 5.5.17 - Remote Directory Listing                                                                          | multiple/remote/2061.txt
Apache Tomcat < 6.0.18 - 'utf8' Directory Traversal                                                                        | unix/remote/14489.c
Apache Tomcat < 6.0.18 - 'utf8' Directory Traversal (PoC)                                                                  | multiple/remote/6229.txt
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote Code Execution (1)               | windows/webapps/42953.txt
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote Code Execution (2)               | jsp/webapps/42966.py
Apache Xerces-C XML Parser < 3.1.2 - Denial of Service (PoC)                                                               | linux/dos/36906.txt
Webfroot Shoutbox < 2.32 (Apache) - Local File Inclusion / Remote Code Execution                                           | linux/remote/34.pl

右の列には実際にその脆弱性を攻撃するようなコードのパスも表示される。ただし、.txtなどは単に脆弱性の内容をまとめただけのことが多い。

一番上の行の脆弱性を攻撃するようなコードを手元にコピーしたければ、

searchsploit -m php/remote/29290.c

を実行する。