CyberClass - Workshop Operating System

Hello cả nhà, lại là mình đây, sau 1 khoảng thời gian ẩn thân vì nhiều lí do như biến cố cuộc đời hay lười thì tôi đã comeback và nhân dịp này mình sẽ viết writeup về giải CTF gần đây ở bên CyberClass (thực ra nó mới xong chiều nay) đó là như tiêu đề: Workshop Operating System - cụ thể hơn là Linux Operating System. Let's start!!!!!!!!!!!!!!!


Đây là 5 câu hỏi tương ứng với nhiều chủ đề khác nhau ở trong Workshop lần này. Được sắp xếp từ Easy - Medium - Hard, những challenge này hoàn toàn phù hợp với người mới bắt đầu. Trước khi chúng ta giải challenge này thì chúng ta sẽ cần phải truy cập được vào hệ thống của họ. Ban tổ chức đã cho mình một số thông tin sau:
  • Host: 0.tcp.ap.ngrok.io
  • Port: 17576
  • Username: cyberclass
  • Password: omgveryhardpass123
Ở trong Linux khi ta muốn truy cập vào 1 máy chủ nào đó, ta sẽ sử dụng giao thức SSH. SSH (Secure Socket Shell) là một giao thức giúp cho các nhà quản trị mạng hoặc các Developer có thể truy cập hệ thống máy chủ từ xa thông qua mạng Internet. Nhờ có SSH mà ta có thể chỉnh sửa hệ thống hay backup dữ liệu,..... mà không cần phải di chuyển đi lại nhiều. Ở trong Linux, để truy cập vào SSH nào đó, ta sẽ nhập lệnh với form sau: ssh Username@Host -p port. Nói đến đây chắc các bạn cũng hiểu sơ qua SSH là gì rồi đúng không, và bây giờ ta vào vấn đề chính, đó chính là giải những challenge này. Ta sử dụng lệnh ssh cyberclass@0.tcp.ap.ngrok.io -p 17576 và sau đó nhập password như đã cho ở trên để truy cập vào hệ thống.

Easy 1: Có file gì đó bị ẨN ĐI thì phải, hãy tìm và đọc file đó xem sao nhé:
Với câu hỏi này mình đã hiểu ngay rằng là có file nào đó đang ẩn đi ở trong hệ thống, và nó đúng như vậy. Ở trong Linux thì các file có dấu . đằng trước thì sẽ không hiển thị lên trên màn hình trừ khi ta nhập lệnh để liệt kê ra tất cả thì nó mới xuất hiện. Và câu lệnh đó là ls -la:


Ta sẽ thấy có file .can_you_see_me.txt và như bản năng, tôi đọc nó và đã tìm được flag đầu tiên: 


Easy 2: Hãy xem xét MÔI TRƯỜNG xung quanh xem sao bạn nhé:
Một cái mình rất thích ở những challenge như này đó là họ luôn in hoa những keyword quan trọng, điều này sẽ rất phù hợp với người mới bắt đầu - những người mà họ có thể chưa định hướng được hướng làm ngay. Và để xem được môi trường ở trong linux, ta nhập lệnh env hoặc ta có thể nhập lệnh cat /etc/environment, và cứ cách đơn giản nhất mà triển thôi: 


Easy 3: Shell trước chạy khi chạy sẽ load một vài file nữa, cùng xem trong đó có gì vui nào:
Với câu hỏi này thì mình cũng ngồi suy nghĩ một lúc, shell trước khi chạy sẽ load 1 vài file, vậy cái này rất giống với bootstrap trong Windows, tức là trước khi hệ điều hành được mở thì sẽ cần có 1 vài file cần được thực thi. Mình ngồi tra Google thì biết được trong Linux chúng ta có file .bashrc, nơi đây chứa các tập lệnh shell được chạy mỗi khi người dùng mở một shell mới, và lúc này mình dám chắc rằng flag ở trong này, và mình đã nhanh tay nhập lệnh cat .bashrc để đọc file và đã thu được flag tiếp theo:


Medium 1: Sức mạnh càng lớn, trách nhiệm càng cao. Hãy xem các file của bạn có QUYỀN gì nhé:
Chúng ta dễ thấy ban tổ chức đã nhấn mạnh từ QUYỀN. Bất kì hệ điều hành nào cũng vậy, có thể có nhiều người dùng và mỗi người dùng lại có 1 đặc quyền khác nhau, và cũng tùy từng người dùng mà sẽ có những khả năng khác nhau. Nhưng suy cho cùng trong bất cứ hệ điều hành nào, mỗi người dùng đều có ba quyền cơ bản sau: Read, Write and Execute (nếu bạn muốn biết thêm bạn có thể đọc tại đây)

Hãy quay lại ảnh đầu tiên, ta thấy có file just_read_me.txt nhưng ta không có bất cứ quyền gì liên quan đến ba quyền trên, trong khi các file trên đều có r w và x blah blah ...... Vậy làm sao để ta có thể đọc được file này? Rất đơn giản, ta chỉ cần cho file này quyền có thể đọc được, và nhanh nhất là ta sẽ cho file ở mode 777 (vừa có thể đọc, vừa có thể ghi đè, vừa có thể thực thi). Sau khi file đã có thể đọc, ta chỉ cần nhập cat just_read_me.txt để đọc file và ta thu được flag tiếp theo:


Medium 2: Thám tử Sherlock Holmes phát hiện ra gì đó trong home directory của bạn. Hãy kiểm tra xem đó là gì nhé: 
Lại ngửi thấy mùi Forensics rồi đây (Forensics: điều tra số). Mình hiện tại đang làm trong mảng Blue Team và mình đã gặp nhiều trường hợp oái oăm hơn cái này nên yeah, cái này cũng chưa thể làm khó mình. Nhiệm vụ bây giờ của ta là tìm ra một cái gì đó được ẩn giấu giữa những cái file ở trong thư mục home này. Ta có thể để ý còn 1 file nữa ta chưa động vào, đó là file a_flag_is_somewhere_in_here.txt. Ta có thể thấy kích thước của nó: 53417. Vậy làm sao ta có thể tìm ra được thứ mình muốn một cách nhanh nhất, đó chính là sử dụng lệnh grep. Về lí thuyết lệnh grep giống như việc chúng ta tìm 1 quả bóng nhựa giữa hàng tỉ quả bóng cao su vậy, nó sẽ tìm những chuỗi ở trong file mà nó trùng với chuỗi chúng ta đưa vào lệnh grep. Ví dụ mình có file tên là test.txt và mình muốn tìm một chuỗi giả sử như là Đăng đi, thì mình sẽ sử dụng lệnh grep Đăng test.txt. Câu lệnh này sẽ tìm ra những dòng mà có từ Đăng ở trong file test.txt và in nó ra màn hình. Và trong trường hợp này ta sẽ cần tìm chuỗi nào đó có từ CYBERCLASS vì các flag đều có dạng CYBERCLASS{...}. Ta chỉ cần nhập lệnh cat a_flag_is_somewhere_in_here.txt | grep CYBERCLASS và lúc này ta đã tìm được flag tiếp theo: 


Hard 1: Có gì đó cứ chạy đi chạy lại ở trong hệ thống sau một khoảng thời gian, các thám tử tìm coi đó là gì nào: 
Nếu như ai đã tiếp xúc với Linux nhiều thì không còn lạ gì với file crontab. Đây là file cho phép chúng ta có thể setup cho lệnh nào đó thực thi trên máy trong một khoảng thời gian mà ta setup cho nó. Ví dụ mình muốn sau 2 tháng backup hệ thống một lần, thì mình chỉ cần chỉnh file crontab đó để nó tự backup sau hai tháng là xong. File crontab nếu như không setup cẩn thận thì rất dễ trở thành cơ sở để hacker leo thang đặc quyền ở trên máy. Giờ mình sẽ ngồi đọc file crontab xem có gì thú vị không


Ta dễ dàng thấy đường dẫn dẫn đến file get_hard_flag.sh và đang chạy ở dưới quyền root, giờ mình cần đọc source của nó để xem file này hoạt động như nào:


Nguyên lí hoạt động: khi file được thực thi, file hard_flag.txt ở thư mực root sẽ được copy vào file mới có tên .hard_flag.txt ở trong thư mực tmp, đồng thời cấp quyền cho toàn bộ người dùng đều có thể đọc file /tmp/.hard_flag.txt. Cá nhân mình mà nói, nếu như là mình thì mình sẽ không bao giờ set là a+r, vì trên thực tế điều này sẽ vô cùng nguy hiểm, nhưng đây là CTF, CTF luôn mô tả những trường hợp thực tế và xấu nhất có thể xảy ra để từ đó ta biết cách phòng tránh và khắc phục. Và trong trường hợp này, mình đã có hướng làm như sau:
  • Tạo một file có tên .hard_flag.txt ở thư mực tmp
  • Sau đó ta sẽ thực thi file get_hard_flag.sh để flag được copy vào file mình vừa tạo
  • Đợi khoảng vài giây và khi file mình tạo xuất hiện kích thước > 0 thì đọc file
Và với hướng làm này mình đã có được flag cuối cùng (cay vl hết bố nó giải và thành ra không submit được flag cuối cùng :< ):


Đó chính là tất cả các challenge trong buổi Workshop đã diễn ra chiều nay. Và rất may mắn mình đã đứng thứ 2 trong số n người chơi. Cảm ơn CyberClass vì những challenge rất là hay và bổ ích và không kém phần thực tế. Mãi yêu CyberClass :3 













Nhận xét

Bài đăng phổ biến