CyberClass - OS Homework 1

Hello mọi người lại là mình đây, và như tiêu đề, mình sẽ làm giải toàn bộ challenge liên quan đến OS của CyberClass. Và như thường lệ, những câu nào dễ mình sẽ lướt qua rất nhanh. OK let's go! 

1) Level 1: Giới Thiệu (Intro):

Intro 1: Hãy liệt kê các file trong thư mục cyberclass để thấy flag: 

Rất đơn giản thôi, chỉ cần ls là xong:


Intro 2: Hãy in ra nội dung của file intro2.txt để thấy flag: cat intro2.txt


Intro 3: Hãy di chuyển tới thư mục /tmp và in ra nội dung file intro3.dat để thấy flag: cat /tmp/intro3.dat


Intro 4: Dựa vào file /etc/passwd, cho biết SHELL của người dùng nobody là gì
Đọc file /etc/passwd và nhìn vào user nobody thôi.

2) Level 2: Dễ:

Easy 1: Hãy xem xét các biến môi trường nào: env


Easy 2: Hãy xem xét các file rcshell bash sẽ load khi khởi chạy:
Ở trong Linux chúng ta luôn có 1 file tên là .bashrc ở trong thư mục /home/<user>. Ta chỉ cần đọc file đó là xong


Easy 3: Biến môi trường có thể ở một vài nơi khác nữa. Hãy kiểm tra nốt xem nào:
Ngoài lệnh env ra thì nếu như bạn nào tìm hiểu sâu hơn thì sẽ biết ở trong Linux còn có 1 file nữa cũng chứa thông tin về biến môi trường, đó là file /etc/environment.


3) Level 3: Trung Bình:
OK đã bắt đầu có sự nâng lên về mức độ rồi, hãy cùng xem thứ gì đang chào đón phía trước nha :>

Medium 1: Tìm cách đọc file medium1.txt để lấy flag:
Ta dễ dàng tìm thấy file medium1.txt trong thư mục cyberclass, nhưng mà khoan, có gì đó lạ lắm:


File chúng ta cần đọc không có quyền đọc ? Vậy làm sao để đọc bây giờ ? Hãy nhớ lại chút nào, một file sẽ có ba quyền cơ bản: đọc, ghi và thực thi; vậy làm thế nào để cung cấp quyền cho một file nào đó? Đó chính là lệnh chmod - lệnh giúp chúng ta cung cấp quyền cho một file hoặc một thư mục. Ở đây chúng ta cần đọc nó nên mình sẽ thực thi lệnh chmod 777 medium1.txt. Nếu bạn muốn biết 777 là gì thì các bạn có thể đọc thêm tại đây nha:


Medium 2: File nằm ở một trong các file thuộc thư mục medium2 và có độ dài lớn hơn 200 kí tự:
Yêu cầu của đề bài là muốn ta tìm file; nhắc đến tìm file ta không thể không nhắc đến find - lệnh dùng để tìm file hoặc directory với điều kiện bất kì nào đó. Ta có thể thấy rõ yêu cầu là file có độ dài lớn hơn 200 kí tự, vậy làm sao để tìm được file thỏa mãn điều kiện này? Ta chỉ cần thêm mode -size (+/-)<int>c là xong (giải thích một chút nếu như là -size +200c thì sẽ là trên 200 kí tự, còn nếu là -size -200c thì sẽ là dưới 200 kí tự): find medium2/ -type f -size +200c 2>/dev/null. Kết quả trả về là đường dẫn đến file thỏa mãn điều kiện của đề bài, ta đọc file và nhận flag thôi:


Medium 3: Hãy tìm cách dùng SSH để đăng nhập vào user medium3 và đọc file medium3.txt ở /home/medium3. Private key để đăng nhập nằm ở thư mục /home/cyberclass/.ssh/id_rsa hostname cho máy tính hiện tại là localhost:

Cho những bạn nào chưa biết thì ngoài cách đăng nhập SSH bằng user;pass thì chúng ta còn có thể đăng nhập SSH thông qua private key. Để truy cập vào SSH bằng private key ta dùng lệnh: ssh -i id_rsa medium3@localhost. Sau khi truy cập thành công ta dễ dàng tìm được flag tiếp theo:


Medium 4: Hãy cho biết giá trị trả về khi chạy chương trình medium4
Chương trình medium4 nằm ở thư mực cyberclass nên giờ ta cần quay về người dùng cyberclass. Và khi mình chạy chương trình thì nó không ra gì cả??????? Tại sao vậy, tại sao nó lại không có output. Mình ngồi ngẫm chút và mình nghĩ rằng chương trình này chắc chắn có lỗi gì đó. Việc chạy chương trình không có output đã là 1 điểm bất thường rồi, và ở trong Linux chúng ta có 1 syntax rất đặc biệt là $?. Đây là syntax cho chúng ta biết trạng thái của một chương trình khi đến process cuối cùng, nếu như trả về 0 thì chương trình không có lỗi, và nếu lớn hơn 0 tức là có vấn đề xảy ra. Và mình ngồi search một chút thì thấy giá trị này được gọi là giá trị trả về, nên mình nghĩ đáp án chính là cái này rồi. Đầu tiên ta cần chạy chương trình, sau đó ta sẽ dùng lệnh echo $?: ./medium4; echo $?


3) Level 4: Khó:
Thú vị rồi đây, triển tiếp thôi.
Hard 1: Tìm file thuộc thư mục hard1, nhiều hơn 140 chữ và ít hơn 150 chữ, thuộc user root group medium3, có đủ 3 quyền đọc, ghi và thực thi:
Lại là dùng lệnh find thôi, nhưng nó nhiều option hơn một chút: find hard1/ -type f -size -150c -perm 777 -user root -group medium3 2>/dev/null: (dù đề bài nói là nhiều hơn 140 và ít hơn 150 nhưng thực tế các bạn chỉ cần check 150 thôi là được, nếu ra nhiều file thì các bạn chỉ cần đối chiếu điều kiện, còn không thì cứ thế mà đọc file thôi) 


Hard 2 + Extra Credit: Tìm cách đọc file hard2.txt và tìm flag extra:
Tại sao mình lại ném hai cái này thành một, vì hai bài này mình đều sử dụng chung 1 phương pháp, đó là leo thang đặc quyền, từ user bình thường lên user cao nhất là root. Sau một khoảng thời gian nghịch hệ thống của ban tổ chức thì mình nhận thấy file /etc/passwd đang để quyền ghi với người dùng khác, và điều này là một điều vô cùng cấm kị với bất cứ ai dùng Linux. Nhận thấy lỗ hổng chết người này, mình đã tấn công như sau bằng 2 bước đơn giản:
  • Tạo ra một đoạn hash chính là mật khẩu của mình tạo ra
  • Chèn mật khẩu vào file /etc/passwd
  • su root => get flag
Ở trong Linux để tạo ra 1 mật khẩu ta sẽ sử dụng openssl: openssl passwd <your_passwd>. Sau đó ta tuân theo các bước trên và bùm, look at this, I'm root now:


Ngoài ra mình còn có cách thứ hai để leo thang đặc quyền: các bạn còn nhớ cấu trúc của user trong file /etc/passwd chứ? Hai cái số đằng sau dấu x lần lượt là UID và GID. Vậy việc của ta chỉ cần chỉnh UID và GID của user cyberclass về 0 là ta hoàn toàn có thể lên root (vì root có UID=GID=0):


Đây chính là toàn bộ thử thách trong chuỗi bài tập về nhà của CyberClass, cảm ơn CyberClass vì những challenge vô cùng hay và bổ ích. Hẹn gặp lại mọi người trong những bài viết tiếp theo 








 

















Nhận xét

Bài đăng phổ biến