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ể:

  1. Đọc tập tin /etc/shadow.
  2. 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/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.txtpasswd.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 passwdshadow.

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

  1. Xem thêm Types of permissions.