Post

Wonderland

Wonderland

I. Wonderland

Enter Wonderland and capture the flags.

1. Quá trình Enumeration.

Nmap.

Sau khi dùng Rustscan để quét port với địa chỉ IP từ bài lab ta có được 2 cổng đang được mở là 80 và 22:

Truy cập trang web tại cổng 80 ta được giao diện như sau:

Source code của trang web cũng không có gì nổi bật:

Truy cập vào thư mục /img thì hiển thị danh sách các ảnh trong thư mục:

Trong đó có tấm ảnh sau nhưng cũng chưa có thêm được manh mối gì:

Gobuster.

Thử dùng gobuster để liệt kê các đường dẫn thì ta thu được thông tin như sau:

Truy cập vào /poem thì trang web hiển thị một bài thơ, còn các đường dẫn khác thì chuyển hướng tới thông báo như sau:

Khi truy cập đường dẫn http://10.48.167.141/r/ ta có thêm được gợi ý như sau:

Dựa trên gợi ý trên thì ta đoán được có các đường dẫn ẩn nằm bên trong /r/ nên ta tiếp tục chạy gobuster từ đây và thu được kết quả:

Suy luận.

Dựa trên thông tin thu thập được và những gì hiển thị trong trang web khi mới bắt đầu thử thách thì suy đoán được đường dẫn có thể sẽ liên quan đến rabbit nên tôi thử chúng trong burpsuite và thu được kết quả như sau:

Để ý trong kết quả trả ra có dòng alice:HowDothTheLittleCrocodileImproveHisShiningTail có thể là thông tin đăng nhập vào đâu đó. Để ý thì trong giai đoạn quét port ta thấy cổng 22 cũng được mở nên khả năng thông tin trên chính là thông tin đăng nhập thông qua cổng 22. Kết nối với cổng 22 với thông tin trên ta thu được một shell như sau:

2. Leo thang đặc quyền.

Tìm thông tin các file user.txtroot.txt ta có kết quả như hình bên dưới. Ngoài ra ta không đọc được file do không đủ quyền nên ta cần phải leo thang đặc quyền để tìm cách đọc các file userroot

Leo lên quyền của rabbit.

Dùng lệnh Sudo -l để thử tìm các leo thang đặc quyền ta thu được một file script walrus_and_the_carpenter.py có thể chạy dưới quyền của rabbit như sau:

Đoạn code trong file trên chỉ là 1 script đơn giản để chọn ngẫu nhiên một đoạn thơ trong các đoạn có sẵn, tuy nhiên trong script trên lại import module random, dựa vào đây ta có thể leo thang đặc quyền thông qua lỗ hổng Python Library Hijacking. Chi tiết đọc trong bài viết bên dưới:

Linux Privilege Escalation: Python Library Hijacking

Escalate Linux privileges via Python library hijacking: exploit PYTHONPATH, abuse sudo rights, and secure system paths.

Linux Privilege Escalation: Python Library Hijacking

Để leo thang đặc quyền trong trường hợp này thì ta cần tạo 1 file random.py trong cùng thư mục với file script trên với nội dung như sau:

Sau khi chạy file với quyền của rabbit thì ta thu được shell của rabbit

Leo lên quyền của hatter

Tuy nhiên với user rabbit ta vẫn không tìm thấy được file user.txt và đọc file root.txt. Chính vì vậy ta tiếp tục liệt kê các hướng để leo thang đặc quyền. Do ta không có mật khẩu của rabbit nên không thể dùng lệnh sudo -l. Vì vậy ta chuyển hướng sang tìm các file có quyền SUID và thu được file teaParty nằm tại thư mục home của rabbit được đặt quyền đó

Tuy nhiên file trên là một file đã được biên dịch nên ta không thể biết nội dung file script đó là gì. Ngoài ra máy mục tiêu cũng không cài sẵn gói lệnh strings nên ta không thể trích xuất thông tin file biên dịch trực tiếp trong máy mục tiêu

Do trong máy mục tiêu đã được cài sẵn python3 nên ta mở một server để đưa file ra máy của chúng ta, từ đó dễ dàng trích xuất thông tin từ file thực thi:

Sau khi tải file về và trích xuất, ta có được 1 số thông tin hữu ích sau:

File thực thi trên sử dụng 2 module của hệ thống đó là echodate. Tuy nhiên echo được khai báo bằng đường dẫn tuyệt đối nên ta không thể tận dụng để leo thang mà phải dựa vào date. Ta leo thang bằng cách tạo file date chứa lệnh do ta kiểm soát và thêm chúng và PATH của hệ thống. Tham khảo thêm tại:

Linux Privilege Escalation Using PATH Variable

Exploit PATH variable manipulation for root access: Hijack binaries, abuse relative paths, and bypass security restrictions.

Các câu lệnh khai thác trong bài này như sau:

Sau đó thực thi file teaParty ta thu được shell của hatter

Đi vào thư mục /home của hatter ta nhận được 1 file mật khẩu:

Dùng mật khẩu trên để kết nối với hatter thông qua ssh

Tuy nhiên tài khoản trên vẫn không thể đọc được file rootuser nên vẫn tiếp tục phải leo thang.

Leo thang lên root.

Tiếp tục quá trình tìm kiếm thì thu được kết quả như sau:

Trong các thông tin vừa liệt kê được từ bên trên, thì hướng khả thi nhất để leo thang đặc quyền lên root là thông qua perl. Tham khảo thêm tại:

Linux for Pentester: Perl Privilege Escalation

Exploit Perl scripts for Linux privilege escalation: Learn SUID exploits, script hijacking, and Perl-based post-exploitation.

Linux for Pentester: Perl Privilege Escalation

Chạy câu lệnh như bên dưới và ta sẽ thu được shell root:

1
/usr/bin/perl -e 'use POSIX (setuid); POSIX::setuid(0); exec "/bin/bash";'

3. Hoàn thành thử thách.

Với quyền root ta có thể đọc được các file user.txtroot.txt và hoàn thành thử thách

4. Bonus

Trong quá trình liệt kê các file chứa quyền SUID, chúng ta để ý thấy có file thực thi pkexec có CVE khá nổi tiếng đó là CVE-2021-4034, phần này sẽ tận dụng lỗ hổng này để leo thang trực tiếp lên root.

CVE trên đã có PoC được đăng tải tại https://github.com/berdav/CVE-2021-4034.git và có hướng dẫn cài đặt chi tiết. Tuy nhiên trong máy mục tiêu lại không cài đặt các công cụ để biên dịch mã nguồn nên ta phải build chúng thủ công từ máy chúng ta rồi truyền vào máy mục tiêu.

Vì máy có phiên bản ldd khá thấp nên ta cần build source code trên trong một phiên bản có ldd tương tự hoặc thấp hơn. Ở đây mình dùng CentOS 7 chạy trong docker để compile source code từ github

Chạy lần lượt các lệnh như sau

1
2
3
4
5
6
vagrant@ubuntu-impish:~/CVE-2021-4034$ make
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall    cve-2021-4034.c   -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp /usr/bin/true GCONV_PATH=./pwnkit.so:.

Sau khi chạy xong các lệnh trên là đã hoàn thành xong quá trình build code khai thác. Sau đây chỉ cần nén toàn bộ source code vừa build và đẩy lên máy mục tiêu để bắt đầu quá trình khai thác

Tại máy mục tiêu, download file khai thác về và giải nén rồi chạy:

Chạy các lệnh sau để get shell hoàn chỉnh

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