Description
Linux Privilege Escalation - SUID
Sử dụng quyền SUID để đọc password và flag.
Techniques
Như đã biết, các tập tin có thể được đọc, ghi và thực thi dựa trên quyền được cấp cho user1. Tuy nhiên, nếu tập tin có quyền SUID (Set-user indentification) hoặc SGID (Set-group identification) thì ta có thể thực thi tập tin với quyền của chủ sở hữu hoặc nhóm sở hữu mặc dù ta không sở hữu nó.
Câu lệnh sau giúp liệt kê những tập tin có bit s
ở trong tập quyền:
find / -type f -perm -04000 -ls 2>/dev/null
Minh họa:
Giả sử nếu ta có quyền chạy chương trình nano
mà có bit s
, ta có thể:
- Đọc tập tin
/etc/shadow
. - Chỉnh sửa tập tin
/etc/passwd
để thêm vào một user có quyền root.
Reading /etc/shadow
Ta lần lượt đọc hai tập tin /etc/shadow
và /etc/passwd
bằng nano
.
Sau đó sao chép nội dung của hai tập tin này vào hai file shadow.txt
và passwd.txt
.
Dùng chương trình unshadow
để tạo ra file mà có thể crack với John the Ripper:
unshadow passwd.txt shadow.txt > passwords.txt
Sau khi có passwords.txt
thì ta có thể chạy John để crack password:
john passwords.txt
Adding User to /etc/passwd
Tuy nhiên, trước tiên ta cần hash password của user. Có thể dùng tool openssl
như sau:
openssl passwd -1 -salt THM mypassword
Password có thể có dạng:
$1$THM$ZA8YpjdgYHPFudMD9cpqO1
Sau đó dùng nano
mở file /etc/passwd
lên và thêm vào dòng sau:
hacker:$1$THM$ZA8YpjdgYHPFudMD9cpqO1:0:0:root:/root:/bin/bash
Lúc này, ta có thể chuyển sang user vừa tạo để xem có quyền root hay không.
Ta cũng có thể dùng GTFOBins để tìm những câu lệnh của những chương trình mà có thể được khai thác thông qua SUID.
Approach
Finding Password
Ta sẽ áp dụng kỹ thuật đầu tiên để crack password
Trước tiên, ta cần tìm ra các chương trình mà có bit s
. Tìm thấy được chương trình base64
:
1722 44 -rwsr-xr-x 1 root root 43352 Sep 5 2019 /usr/bin/base64
Sử dụng chương trình này để encode và decode hai file passwd
và shadow
.
base64 /etc/passwd | base64 --decode
Ta sao chép nội dung của chúng vào hai file ở trên máy local và tiến hành crack password. Thu được password của user2.
Reading Flag
Sử dụng lệnh sau để đọc nội dung của flag3.txt
và thu được flag.
base64 ./flag3.txt | base64 --decode
Flag
Password of user2
Password1
Flag in
flag3.txt
THM-3847834
Footnotes
-
Xem thêm Types of permissions. ↩