Chào các bạn,
Hôm nay chúng ta sẽ học tiếp chức năng và cách sử dụng các lệnh ln, find, grep. Xuyên suốt các ví dụ trong bài, mình sẽ sử dụng lại các câu lệnh và operators đã được trình bày trong những bài trước, các bạn nào quên thì hãy xem lại bài cũ nhé.
Ở cuối bài sẽ là thử thách lấy mật khẩu shiba4, chúc các bạn chinh phục thử thách thành công.
1/ Câu lệnh ln (Task 30)
Chắc hẳn nhiều bạn sử dụng hệ điều hành Windows đã quen với việc tạo shortcut cho một folder (thư mục) hoặc shortcut cho một ứng dụng. Dành cho bạn nào chưa biết thì shortcut cung cấp cho bạn một giải pháp truy cập gián tiếp vào dữ liệu bạn cần.
Ví dụ: Bạn có một folder A chứa sách học cybersecurity được phân loại theo từng loại với kích thước khoản 20 GB. Bạn thường xuyên truy cập folder này; tuy nhiên, mỗi lần truy cập, bạn lại phải mở File Explorer, bấm vào Documents rồi lại click vào folder A. Cần đến 3 bước để bạn có thể truy cập đến folder A. Bạn không muốn đem folder này ra màn hình Desktop vì màn hình Desktop của bạn chứa quá nhiều các file dữ liệu khác nhau ví dụ như ảnh chụp màn hình, file word, Excell, nhạc v.v. và bạn cũng có thói quen dọn dẹp màn hình Desktop khoản vài tuần một lần dẫn đến rủi ro nếu không chú ý, nhiều khả năng bạn sẽ delete nhầm folder A. Lúc này sử dụng shortcut là giải pháp tốt nhất dành cho bạn.
Shortcut sẽ tạo một icon với tên là tên của folder A, bạn có thể cut/paste icon này ra màn hình Desktop. Mỗi lần bạn muốn truy cập vào folder A, bạn chỉ cần double click vào shortcut icon của folder A là xong. Nếu chẳng may, bạn vô tình xóa shortcut của folder A, folder A cũng không hề bị ảnh hưởng gì cả. Bạn hoàn toàn có thể tạo lại shorcut cho folder A và sử dụng như bình thường.
Trong Linux command line, cũng có một kỹ thuật tạo shortcut được gọi là link bằng cách sử dụng câu lệnh ln. Cách hoạt động của shortcut và link là gần tương đương nhau mặc dù bản chất sẽ có khác biệt đôi chút. Bạn nào có kiến thức về programming có thể tìm hiểu thêm về sự khác biệt của cả hai tại đây.
Sẽ có 2 dạng link trong Linux command line:
- Hard link
- Soft link
1a/ Inode
Để hiểu về hard link và soft link, chúng ta sẽ cần hiểu sơ lược về Inode. Trong hệ thống Linux, dữ liệu được lưu giữ ở hai phần khác nhau ở ổ cứng. Nội dung dữ liệu sẽ được lưu giữ trong các data blocks. Nhưng thông tin về dữ liệu ví dụ như metadata, vị trị lưu trữ, v.v lại được lưu trữ trong Inode.
Inode có thể hiểu đơn giản như là một cơ sở dữ liệu lưu lại các thông tin của dữ liệu ngoại trừ nội dung của dữ liệu. Inode có hình dạng là một dãy số. Dãy số này tương tự như địa chỉ nhà vậy, nghĩa là trong cả một Linux file system sẽ không bao giờ có 2 files/directories hoặc file và directory có giá trị Inode như nhau. Nói một cách đơn giản, Inode có chức năng giống như một mã số định danh một dữ liệu trong cơ sở dữ liệu vậy.
Hệ điều hành Linux sử dụng Inode cho mục đích lấy các thông tin của file hoặc directory như phân quyền và vị trị lưu trữ của file trên ổ cứng, v.v.
Để kiểm tra giá trị Inode, ta sẽ sử dụng lệnh sau:
ls -i

Các bạn có thấy những dãy số như “1179687” ở phía trước của phần phân quyền không? Đó chính là Inode đấy.
1b/ Hard link
Có thể hiểu đơn giản, hard link là một kết nối đến Inode của một file xác định. Hard link và file có Inode mà nó trỏ tới sẽ có cùng giá trị Inode, và bạn có thể sử dụng hard link để truy cập vào file có Inode mà nó trỏ tới. Hard link có những đặc điểm sau:
- Nếu file gốc bị xóa, bạn vẫn có thể truy cập file gốc thông qua hard link. Nguyên nhân là vì trong hệ thống Linux, mọi file bình thường (không bao gồm directories) đều là một hard link. Khi bạn tạo một file hay xóa một file, bạn chỉ đơn giản là đang tạo hay xóa một hard link trỏ tới Inode của file đó. Nó gần tương tự như việc nhà bạn có 2 cửa chính, phá bỏ 1 cái thì vẫn còn 1 cái để ra vào vậy.
- Hard link chỉ có thể trỏ tới Inode của file chứ không thể trỏ tới Inode của directory. Nguyên nhân các bạn có thể tìm hiểu thêm tại đây.
- Phân quyền của hard link tương tự như phân quyền của file có Inode mà nó trỏ tới. Để thay đổi phân quyền của hard link, bạn phải thay đổi phân quyền của file có Inode mà nó trỏ tới.
- Hard link chỉ có thể hoạt động trong cùng Linux file system. Ví dụ: Bạn không thể tạo hard link giữa ext3 và ext4 vì chúng khác file systems.
- Khi dùng ls -l để kiểm tra, bạn sẽ thấy hard link không có ký tự “l” ở đầu biểu thị cho link như soft link
1b-1/ Vậy sự khác biệt giữa hard link và copy là gì?
Khi bạn copy, bạn đang tạo ra dữ liệu mới bằng cách nhân dữ liệu cần copy lên n lần. Mỗi bản dữ liệu đó đều sẽ tốn một số lượng bộ nhớ nhất định trong ổ cứng để lưu trữ. Một bất tiện khác đó là khi bạn thay đổi nội dung của một trong các bản bạn đã copy, nội dung của những bản copy khác không hề bị ảnh hưởng.
Với hard link, điều bạn đang làm là tạo thêm kết nối trỏ tới một file nào đó chứ không phải nhân dữ liệu đã có lên n lần như với copy. Và mỗi khi bạn truy cập file thông qua hard link để thay đổi nội dung file, bạn đang thay đổi nội dung gốc của file. Đồng nghĩa với việc dù bạn truy cập file bằng hard link nào thì nội dung hiện ra vẫn sẽ là nội dung mà bạn đã thay đổi.
1b-2/ Ứng dụng và cách tạo hard link
Ứng dụng lớn nhất của hard link là để backup dữ liệu nhưng không cần phải copy dữ liệu gây lãng phí tài nguyên ổ cứng.
Để tạo hard link, bạn sử dụng lệnh ln theo cú pháp sau
ln <nguồn> <tên-link>
Chúng ta sẽ thực hành tạo hard link theo các bước sau
B1: Tạo một file có tên hello.txt có nội dung Hoc hacking
echo "Hoc hacking" > hello.txt
B2: Tạo một directory có tên tuhoc
mkdir tuhoc
B3: Tạo một hard link trỏ tới file hello.txt tên hello-link và lưu lại bên trong directory tuhoc
ln hello.txt tuhoc/hello-link
B4: Bạn có thể dùng lệnh ls -l kiểm tra bên trong directory tuhoc sẽ thấy hard link hello-link
ls -l tuhoc
B5: Bạn có thể dùng lệnh cat để kiểm tra nội dung bên trong hello-link sẽ thấy nội dung file tương tự như trong file hello.txt
cat tuhoc/hello-link
cat hello.txt
B6: Bạn có thể kiểm tra Inode của hello link và hello.txt file sẽ thấy Inode của cả 2 giống nhau.
ls -li tuhoc
ls -li

1c/ Soft link

Soft link hay còn gọi là Symbolic link. Chức năng của nó tương tự như shortcut trên Windows. Tương tự như hard link, bạn cũng có thể dùng soft link để truy cập file, tuy nhiên soft link trỏ tới tới file chứ không trỏ tới Inode của file như hard link. Soft link có các đặc điểm sau:
- Khi bạn xóa soft link sẽ không ảnh hưởng đến file gốc. Tuy nhiên nếu bạn xóa hay chuyển file mà nó trỏ tới đi nơi khác, soft link sẽ không còn hoạt động được nữa
- Soft link có thể được dùng cho cả file và directory
- Soft link sẽ có Inode khác với file gốc và phân quyền cũng sẽ không thừa kế từ file gốc. Khi bạn thay đổi phân quyền của file gốc, phân quyền của soft link không thay đổi.
- Soft link vẫn có thể hoạt động khi file nó trỏ tới và link nằm khác file system
- Vì bản thân soft link chỉ là một liên kết đến file mà nó trỏ tới, nên khi truy cập nội dung file bằng soft link và thay đổi nội dung bên trong, bạn đang thay đổi nội dung gốc của file mà soft link trỏ tới
- Khi bạn kiểm tra các thông tin của một soft link bằng lệnh ls -l, bạn sẽ thấy chữ “l” ở đầu báo hiệu đây là một link, ngoài ra ở phía cuối còn có tên file mà nó trỏ tới. Ví dụ
lrwxrwxr-x 2 shiba3 shiba3 4096 Feb 22 2020 test4 -> Sample1
Cú pháp tạo soft link như sau
ln -s <nguồn> <tên-link>
Chúng ta sẽ thực hành những ví dụ sau:
Ví dụ 1: Tạo soft link
B1: Tạo directory Sample1
mkdir Sample1
B2: Bên trong Sample1 chứa file hello.txt có nội dung “Xin chao”
echo "Xin chao" > Sample1/hello.txt
B3: Kiểm tra lại nội dung của directory Sample1 và file hello.txt
ls Sample1 && cat Sample1/hello.txt
(Đọc lại cách dùng operator && tại đây)
B4: Tạo một soft link trỏ tới directory Sample1 và lưu nó ở HOME directory của shiba3 với tên hello-soft
ln -s Sample1 hello-soft
B5: Check Inode và phân quyền của soft link hello-soft và Inode của Sample1, bạn sẽ thấy giá trị Inode và phân quyền của soft link và file gốc khác nhau
ls -il

B6: Kiểm tra nội dung bên trong soft link hello-soft
ls -H hello-soft && cat hello-soft/hello.txt

Ví dụ 2: Kiểm tra khả năng truy cập nội dung từ soft link sau khi thay đổi phân quyền Sample1
B1: Thay đổi phân quyền của directory hoàn toàn về 0
chmod 000 Sample1
B2: Kiểm tra lại phân quyền mới của Sample1
ls -l
B3: Kiểm tra khả năng truy cập nội dung từ soft link
ls -H hello-soft && cat hello-soft/hello.txt
Kết quả: Lỗi không được quyền truy cập

Kết luận: Dù soft link có toàn quyền như bạn thấy trong hình H1c.4, nhưng vì file mà nó trỏ tới đã chặn tất cả quyền bao gồm cả truy cập, nên truy cập Sample1 thông qua soft link cũng bị chặn nốt.
Ví dụ 3: Thử truy cập soft-link sau khi xóa directory Sample1
B1: Cấp lại phân quyền cho Sample1 và kiểm tra lại phân quyền
chmod 700 Sample1 && ls -l
B2: Xóa directory Sample1
rm -rf Sample1
B3: Kiểm tra lại xem Sample1 đã bị xóa hay chưa
ls -l
B4: Truy cập vào soft link
ls -H hello-soft

Kết quả: Báo lỗi, file không tồn tại.
Dựa vào kiến thức đã học, các bạn hãy tự trả lời câu hỏi ở task 30 nhé.
2/ Câu lệnh Find
Find là một câu lệnh mạnh mẽ dùng để tìm kiếm file dữ liệu trong Linux. Cú pháp cơ bản của câu lệnh find như sau:
find <flag>(optional) <tên-directory-nơi-bắt-đầu-tìm-kiếm> <nội-dung-cần-tìm>
Chúng ta sẽ thực hành lệnh find qua các ví dụ sau. Từ ví dụ 2 trở đi sẽ là ứng dụng của lệnh find trong khi tìm giải pháp cho priv escalation trong pentest.
Ví dụ 1: Tìm tất cả file trong thư mục /tmp
Chúng ta sẽ sử dụng câu lệnh sau để tìm tất cả những file được chứa bên trong /tmp
find /tmp
Khi không có nội dung cần tìm, lệnh find sẽ tự động liệt kê toàn bộ file chứa bên trong /tmp và chứa cả bên trong những directories con của /tmp

Ví dụ 2: Sử dụng lệnh find để tìm kiếm các file thuộc quyền sở hữu của account root trong
find /tmp -user root
Chúng ta sẽ dùng câu lệnh phía trên để tìm kiếm tất cả các file thuộc sở hữu của account root bên trong directory /tmp.

Ngoài ra, bạn cũng có thể tìm các file thuộc quyền sở hữu của group root bên trong directory /tmp với câu lệnh sau:
find /tmp -dir root

Ví dụ 3: Tìm các tất cả các file trong hệ thống có phân quyền SUID
Để tìm tất cả các file có phân quyền SUID chúng ta sẽ dùng câu lệnh sau
find / -perm -u=s -type f 2>/dev/null
Trong đó
- / : Bắt đầu tìm từ root directory là file có vị trí cao nhất trong sơ đồ cấu trúc file của hệ thống Linux
- -perm: Tìm những file thỏa mãn phân quyền theo sau
- -u=s: Tìm những file binary thuộc sở hữu của root nhưng có phân quyền SUID
- -type: Dạng file cần tìm *
- f: Dạng file bình thường, không phải directory hay các file đặc biệt ví dụ như symbolic link, v.v.
- 2>/dev/null: Chuyển tất cả những cảnh báo lỗi hoặc output lỗi vào /dev/null
* Các dạng file trong lệnh find

Sau khi chạy câu lệnh trên, chúng ta sẽ được trả về những file có phân quyền SUID. Nhiệm vụ của chúng ta lúc này chính là phân tích các kết quả xuất ra để tìm giải pháp khả thi nhất cho priv escaltion. Các bạn có thể thấy trong kết quả bên dưới có cả những câu lệnh ví dụ như ping, su, mount, v.v, mục tiêu của chúng ta chính là tìm một câu lệnh nào đó trong số những cái đã được liệt kê ra cho phép chúng ta thực hiện priv escalation ví dụ như git, python, vim, v.v.

Với những kiến thức mình đã trình bày, các bạn hãy tự trả lời câu hỏi ở task 31 nhé.
3/ Câu lệnh grep
Câu lệnh grep mình đã có dịp giới thiệu với các bạn một lần khi chúng ta học về pipe operator. Cụ thể chúng ta có thể dùng lệnh grep để tìm một kết quả cụ thể nào đó từ input cho trước. Cú pháp của lệnh grep như sau:
grep <nội-dung-cần-tìm> <dữ-liệu-đầu-vào>
Ngoài ra chúng ta còn có thể dùng pipe để dùng output của một câu lệnh nào đó làm input cho grep để tìm nội dung cần tìm.
Ví dụ: Tìm từ khóa “passwd” khi sử dụng lệnh find để tìm SUID binary file
find / -perm -u=s -type f 2>/dev/null | grep passwd
Chúng ta sẽ được output như sau

Các bạn có thể thấy, tất cả các dòng có chứa từ khóa “passwd” trong lệnh find đều được lệnh grep liệt kê ra như hình H3.1 bên trên.
Với những kiến thức mình đã trình bày cộng thêm tra cứu lệnh man grep, các bạn bạn hãy tự trả lời 2 câu hỏi của task 32 nhé.
4/ Thử thách lấy mật khẩu cho account shiba4
Các bạn hãy vận dụng những kiến thức đã học để lấy mật khẩu cho account shiba4 nhé. Nếu thất bại thì hãy cố gắng đọc lại các bài cũ và tra cứu thêm Google. Đáp án sẽ được mình trình bày ở bài tiếp theo.
Cám ơn các bạn,
Vincent Nguyễn
Source:
https://medium.com/@meghamohan/hard-link-and-symbolic-link-3cad74e5b5dc#:~:text=Hard%20link%20is%20the%20exact,’t%200(zero).
https://medium.com/@307/hard-links-and-symbolic-links-a-comparison-7f2b56864cdd