Xin chào,
Trong bài hôm nay chúng ta sẽ thực hành lấy mật khẩu của shiba4, đồng thời chúng ta sẽ học về câu lệnh sudo cũng như các câu lệnh dùng để thêm, bớt account người dùng và group nhé.
1/ Lấy mật khẩu shiba4 (Task 33)
Yêu cầu của của task 33 như sau:
We’ve been through a lot in this section, and the challenge for this binary will reflect that. The first step is actually finding the binary, I’m not heartless though, so I’ll give you the name of the binary. The name of the binary is shiba4.
The actual binary will check for two things, it will be checking that there’s a directory called test in your home directory, how you create that is up to you. It will also be checking that inside the directory there’s a file called test1234.
Yêu cầu của task 33 có thể tóm tắt như sau:
- Tìm file binary shiba4 đang được giấu ở đâu đó trong hệ thống
- Kiểm tra xem trong HOME directory của shiba3 có directory tên test hay chưa
- Nếu directory test có tồn tại, kiểm tra xem bên trong directory test có file test1234 hay không
Lời giải
Chúng ta sẽ giải quyết vấn đề số 2 và 3 trước nhé
B1: Kiểm tra HOME directory của shiba3

Chúng ta thấy bên trong HOME directory của shiba3 đã có directory test. => Vấn đề 2 được giải quyết.
B2: Kiểm tra bên trong directory test

Chúng ta thấy bên trong directory test có file test1234. => Vấn đề 3 được giải quyết.
B3: Tìm file binary shiba4
Chúng ta sẽ sử dụng câu lệnh sau để tìm file binary shiba4.
find / -name "shiba4"
Câu lệnh trên có nghĩa là chúng ta sẽ bắt đầu tìm từ root directory “/”, directory ở vị trí cao nhất trong cấu trúc file của hệ thống Linux. Flag -name dùng để chỉ tên file mà mình muốn tìm. Khi chạy câu lệnh trên, chúng ta sẽ được kết quả như sau:

Các bạn sẽ thấy, rất nhiều kết quả liên quan lẫn không liên quan được xuất ra. Nguyên nhân là do có những directories chúng ta không có phân quyền read để truy cập vào nội dung bên trong, câu lệnh find sẽ liệt kê ra những directories này vì nó nghĩ có thể file chúng ta đang tìm có khả năng nằm trong một trong những directories này.
Để tìm được kết quả mong muốn, chúng ta phải cuộn trang liên tục. Với mình, đây không phải là giải pháp tối ưu. Mình sẽ giới thiệu với các bạn một cách làm khác hiệu quả hơn.
Chúng ta sẽ thay đổi câu lệnh đã sử dụng một tí.
find / -name "shiba4" > result
Mình sẽ lưu lại toàn bộ kết quả của lệnh find vào một file tên result. Sau đó chạy câu lệnh sau:
grep "shiba4" result
Nghĩa là chúng ta sẽ tìm những dòng có chứa từ khóa “shiba4” trong file result. Chúng ta sẽ có kết quả sau

Mình đoán có thể dòng đầu tiên là file binary shiba4, nhưng để chắc chắn, chúng ta sẽ dùng lệnh file kiểm tra từng kết quả một.
file <tên-file>

Đúng như dự đoán, /opt/secret/shiba4 chính là file binary mà chúng ta cần tìm. /home/shiba4 chỉ là HOME directory của shiba4, còn /etc/shiba/shiba4 là một file text bình thường.
B4: Chuyển đến directory /opt/secret/
cd /opt/secret/
Sau đó dùng lệnh
ls
Chúng ta sẽ thấy file shiba4.
B5: Chạy file shiba4
./shiba4
Vậy là chúng ta đã có được mật khẩu của shiba4.
B6: Đăng nhập shiba 4
su shiba4
2/ Những kiến thức sẽ được học trong shiba4
Trong phần cuối của phòng Learn Linux, chúng ta sẽ học các nội dung như:
- Câu lệnh sudo – để thực thi một câu lệnh hay một file nào đó dưới phân quyền của một account user khác (thường là root)
- Câu lệnh adduser, addgroup, usermod, v.v. để thêm hoặc xóa account người dùng, thêm hoặc xóa group
- Nano và Vim – 2 chương trình text editor cơ bản của hệ thống Linux
- Sơ lược về Bash scripting
- Cách cài đặt phần mềm mới trên một hệ thống Debian Linux
- Cách quản lý processes trong hệ thống Linux
- Và cuối cùng, chúng ta sẽ phải vận dụng toàn bộ những kiến thức đã học trong phòng này để thực hiện priv escalation lên account root. Vì phòng Learn Linux chỉ dạy các câu lệnh Linux căn bản, nên chúng ta sẽ không được phép sử dụng những kỹ thuật mà mình đã đề cập ở bài tấn công, xâm nhập server Pickle Rick. Vậy chúng ta sẽ làm việc đó như thế nào? Hãy chờ xem trong những bài tiếp theo nhé
3/ Câu lệnh sudo (Task 35)
Chúng ta đã biết đến câu lệnh sudo một lần khi học bài về câu lệnh su. Hôm nay, chúng ta sẽ đi tìm hiểu sâu hơn về câu lệnh này nhé.
Sudo là viết tắt của từ Super User Do. Khi bạn sử dụng câu lệnh này đi kèm với một câu lệnh khác, ví dụ:
sudo cd
Hoặc
sudo cat
Khi ấy, câu lệnh cd hoặc cat của bạn sẽ không được thực thi với phân quyền của account bạn đang dùng mà là với phần quyền của account cao hơn thậm chí là phân quyền của root.
Hãy giả sử account của bạn bị hạn chế một số quyền như không được xem và truy cập vào nội dung bên trong một số directories được sở hữu bởi root. Khi sử dụng lệnh sudo cat hoặc sudo cd, rất có thể bạn sẽ xem được nội dung bên trong các directories này.
Tóm lại, khi sử dụng lệnh sudo, nó sẽ tạm thời cung cấp cho bạn phân quyền ở cấp cao hơn account của bạn để thực thi câu lệnh mà bạn mong muốn mà không cần phải đăng nhập vào account ở cấp cao hơn đó. Trong nhiều trường hợp, bạn sẽ phải nhập mật khẩu account hiện tại khi sử dụng lệnh sudo.
Cú pháp lệnh sudo như sau:
sudo <câu-lệnh-cần-thực-thi>
3a/ Tính ứng dụng của lệnh sudo và sự khác biệt với câu lệnh su
Bạn nào quên lệnh su thì có thể xem lại tại đây.
Nói một cách vắn tắt, lệnh su cho phép bạn đăng nhập vào một account người dùng khác thông qua giao diện dòng lệnh.
Lệnh sudo có nhiều ứng dụng hơn so với lệnh su. Chúng ta có thể sử dụng câu lệnh sau để đăng nhập account root (Với các hệ điều hành Linux hiện nay, bạn không còn có thể dùng lệnh su để đăng nhập root được nữa):
sudo su
Bạn còn có thể sử dụng lệnh sudo với flag -u để đăng nhập các account người dùng ngoài account root.
sudo -u <account-cần-đăng-nhập>
Ngoài ra, sudo như đã trình bày ở trên, còn cho phép bạn thực thi một câu lệnh với phân quyền cao hơn phân quyền của account hiện tại.
Bạn cũng có thể dùng lệnh sudo với flag -g để thực thi một câu lệnh với phần quyền của một group.
sudo -g <tên-group> <câu-lệnh-cần-thực-thi>
Ngoài ra, còn có một câu lệnh rất hay được sử dụng ở những bước đầu tiên của Linux priv escaltion đó là:
sudo -l
Sudo -l sẽ cho bạn biết được những câu lệnh bạn được phép sử dụng, hoặc bị cấm sử dụng. Thông tin này rất hữu ích trong việc tìm ra giải pháp cho priv escaltion. Trên account shiba4 bạn sử dụng câu lệnh sudo -l sẽ thấy kết quả sau

Qua đó ta biết được account shiba4 không được cấp quyền sử dụng câu lệnh sudo. Và account ở cấp cao hơn của account shiba4 trong hệ thống này có tên là nootnoot.
Các bạn còn nhớ khi pentest server Pickle Rick, chúng ta đã dùng lệnh sudo -l để tìm ra giải pháp cho priv escalation không? Bạn nào quên thì có thể xem lại bên dưới.
$ sudo -l
Matching Defaults entries for www-data on
ip-10-10-81-72.eu-west-1.compute.internal:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on
ip-10-10-81-72.eu-west-1.compute.internal:
(ALL) NOPASSWD: ALL
Dòng “(ALL) NOPASSWD: ALL” là dòng quan trọng nhất, nó cho biết, account www-data có thể sử dụng bất kỳ câu lệnh nào có trong hệ thống kể cả câu lệnh sudo su để đăng nhập account root mà không cần phải cung cấp password của account root hay password của account www-data.
Với những kiến thức trên, các bạn hãy tự trả lời 3 câu hỏi của task 35 nhé.
4/ Tạo account người dùng, tạo group và quản lý group (Task 36)
Lưu ý
Vì chỉ có duy nhất root mới có quyền tạo account người dùng hay tạo group, nên chúng ta sẽ thực tập trên máy Kali Linux của chúng ta nhé. Các bạn vào account root trên hệ thống Kali Linux bằng command sau:
sudo su
Kiến thức về user và group, bạn nào quên có thể xem lại tại đây.
4a/ Lệnh adduser
Lệnh adduser được sử dụng để tạo một account người dùng mới. Cú pháp của câu lệnh adduser như sau:
adduser <tên-account>
Chúng ta sẽ sử dụng câu lệnh trên để tạo một account người dùng tên là user1.
adduser user1

Bạn điền các thông tin hiện ra. Ngoại trừ password, các thông tin như Full Name, Room Number, v.v. đều không bắt buộc. Bạn có thể bỏ qua các thông tin này bằng cách ấn enter. Cuối cùng, hệ thống sẽ yêu cầu bạn xác nhận thông tin bạn nhập đã chính xác chưa? Nếu rồi, bạn điền Y (yes), nếu không thì điền n (no).
Lưu ý:
Vì lí do bảo mật, thông tin mật khẩu bạn điền sẽ không được hiện ra.
Chúng ta sẽ thử kiểm tra xem user1 đã được tạo chưa bằng cách kiểm tra file /etc/passwd
cat /etc/passwd

Nếu tạo thành công, bạn sẽ tìm được giá trị như trên trong file /etc/passwd.
4b/ Lệnh addgroup
Lệnh addgroup được dùng để tạo một group bao gồm nhiều account người dùng chia sẻ chung phân quyền chủ group. Cú pháp câu lệnh như sau:
addgroup <tên-group-cần-tạo>
Chúng ta sẽ dùng lệnh addgroup để tạo ra một group gọi là group1.
addgroup group1
Chúng ta sẽ được kết quả như sau nếu thành công.

Chúng ta sẽ kiểm tra giá trị trong file /etc/group. Nếu ta tạo group thành công, chúng ta sẽ thấy giá trị như sau trong file /etc/group.

4c/ Lệnh usermod
Sau khi tạo group1 xong, group này hiện đang không có user account nào, chúng ta sẽ thêm account user1 vào group1. Chúng ta làm việc đó bằng cách sử dụng câu lệnh usermod với cú pháp như sau:
usermod -a -G <tên-group> <tên-user-account-cần-add-vào-group>
Trong trường hợp của chúng ta, đó sẽ là.
usermod -a -G group1 user1
Nếu bạn muốn add user1 vào nhiều hơn một group, bạn có thể thay đổi câu lệnh trên thành như sau:
usermod -a -G group1, group2 user1
Lúc này khi kiểm tra lại file /etc/group, bạn sẽ thấy user1 được liệt kê là thành viên của group.

4d/ Xóa account người dùng và xóa nhóm
Để xóa một account người dùng, bạn dùng lệnh userdel. Cú pháp như sau:
userdel <tên-account-cần-xóa>
Chúng ta sẽ thực tập xóa account user1.
userdel user1
Nếu thành công khi kiểm tra lại file /etc/passwd, ta sẽ không còn dòng user1 nữa. Chúng ta sẽ kiểm tra nhanh bằng câu lệnh sau:
cat /etc/passwd | grep user1

Để xóa một group, chúng ta sẽ sử dụng lệnh groupdel. Cú pháp như sau:
groupdel <tên-group-cần-xóa>
Chúng ta sẽ thực hành xóa group1.
groupdel group1
Nếu xóa thành công, khi kiểm tra file /etc/group, bạn sẽ không còn tìm thấy dòng group1 nữa.
cat /etc/group | grep group1

Cám ơn các bạn đã theo dõi. Ở bài sau chúng ta sẽ học về các text editor như nano và vim của giao diện dòng lệnh. Đồng thời chúng ta sẽ đi qua sơ lược về bash scripting nhé.
Vincent Nguyễn
Source:
https://phoenixnap.com/kb/linux-sudo-command
https://www.howtogeek.com/111479/htg-explains-whats-the-difference-between-sudo-su/#:~:text=Sudo%20runs%20a%20single%20command%20with%20root%20privileges.&text=This%20is%20a%20key%20difference,a%20separate%20root%20user%20password.