Trang chủ trò chơi OverTheWire Bandit với giao diện game công nghệ.
Máy Tính

Khám Phá OverTheWire: Game Học Linux Không Thể Bỏ Qua Cho Mọi Cấp Độ

Là một người hâm mộ cuồng nhiệt của phương pháp học tập được “game hóa”, tôi đã tình cờ thử một trò chơi học Linux rất phổ biến: OverTheWire. Điều bắt đầu như một sự tò mò nhanh chóng đã biến thành hàng giờ giải đố gây nghiện, làm chủ các lệnh terminal, và những khoảnh khắc “à-há!” đặc biệt mà bạn chỉ có được khi tự mình tìm ra điều gì đó thực sự.

Tại Sao OverTheWire Lại Thu Hút Đến Vậy?

Trang chủ trò chơi OverTheWire Bandit với giao diện game công nghệ.Trang chủ trò chơi OverTheWire Bandit với giao diện game công nghệ.

OverTheWire là một bộ sưu tập các wargames (trò chơi chiến tranh). Về cơ bản, wargames là những thách thức theo phong cách CTF (Capture The Flag) nơi bạn cần thực hiện một nhiệm vụ cụ thể để nhận một “token” đặc biệt làm bằng chứng đã hoàn thành cấp độ đó. Trong bối cảnh của OverTheWire Bandit – chủ đề chính mà tôi sẽ nói đến – bạn cần tìm và khám phá một mật khẩu bí mật để tiến lên cấp độ tiếp theo.

Tôi đã khám phá nhiều game dạy Linux cho đến nay. Nhưng OverTheWire thực sự nổi bật nhờ cách môi trường của nó được thiết lập và cách nó thách thức kiến thức của bạn trong các tình huống thực tế. Bạn được “thả” vào các hệ thống Linux thực để khám phá. Dù bạn là người mới làm quen với Linux hay người dùng trung cấp, trò chơi này đều có thứ gì đó dành cho bạn.

Các cấp độ được thiết kế để tăng dần độ khó một cách mượt mà. Một điều tôi rất ngưỡng mộ là một cấp độ cụ thể có thể yêu cầu các lệnh và kỹ thuật từ các cấp độ trước đó. Điều này giúp bạn ghi nhớ kiến thức lâu hơn và củng cố nó.

Điều tôi yêu thích nhất ở OverTheWire là cách nó coi bạn như một người học có năng lực. Nó không cố gắng biến bạn thành một robot chỉ ghi nhớ các lệnh và kỹ thuật. Thay vào đó, nó giúp bạn trở thành một người có khả năng điều tra, giải quyết vấn đề và suy luận trong những lĩnh vực xa lạ. Đây là những kỹ năng vượt ra ngoài giao diện terminal và xuất hiện ở mọi nơi trong lĩnh vực công nghệ.

Kỹ Năng Linux Quan Trọng Nhất Mà OverTheWire Truyền Tải

Giao diện terminal Linux với thanh tìm kiếm và linh vật Tux đang cầm kính lúp, tượng trưng cho kỹ năng tìm hiểu Linux.Giao diện terminal Linux với thanh tìm kiếm và linh vật Tux đang cầm kính lúp, tượng trưng cho kỹ năng tìm hiểu Linux. Lucas Gouveia/How-To Geek

Nếu có một điều mà OverTheWire dạy tốt hơn bất kỳ hướng dẫn hay video YouTube nào, đó chính là khả năng tự mình tìm ra vấn đề.

Khi bạn chơi Bandit, trò chơi không “cầm tay chỉ việc”. Bạn được cho biết mục tiêu của mình là gì, và có thể nhận được một hoặc hai gợi ý về các lệnh có thể hữu ích. Nhưng chỉ có vậy. Không có hướng dẫn chi tiết được nhúng trong cấp độ, không có chú giải công cụ giải thích cách hoạt động của lệnh xyz, và chắc chắn không có cửa sổ bật lên hiển thị cú pháp chính xác để sử dụng. Bạn phải tự mình tìm kiếm nó. Bạn phải thử, thất bại, điều chỉnh phương pháp của mình và thử lại. Và đó chính xác là điều khiến nó trở nên tuyệt vời.

Với tôi, đây là kỹ năng Linux thiết yếu. Sẵn sàng chấp nhận việc không biết điều gì đó, và sau đó tìm ra nó thông qua tìm kiếm, đọc các trang man (manpages), và thử nghiệm. Đó là loại kỹ năng phân biệt giữa một người chỉ sao chép các lệnh từ Stack Overflow với một người hiểu rõ mình đang thực sự làm gì.

Học Được Nhiều Hơn Cả Các Lệnh Linux Cơ Bản

OverTheWire không chỉ đơn thuần là về các lệnh Linux. Mặc dù Bandit về mặt kỹ thuật là về điều đó, nhưng sự thật là bạn sẽ học được nhiều hơn thế, không chỉ là cú pháp.

Ví dụ, bạn sẽ được tiếp xúc với những khái niệm như quyền hạn file, giao thức mạng, công nghệ internet và mã hóa văn bản. Tôi đã phải giải mã chuỗi hex, xem xét bên trong các file nhị phân lạ, kết nối đến các cổng “bí ẩn” và hiểu cách cấu trúc hệ thống file Linux ở mức độ sâu hơn.

Sau khi hoàn thành Bandit, OverTheWire mở ra nhiều điều hơn nữa. Leviathan đi sâu vào leo thang đặc quyền (privilege escalation). Có Narnia, tập trung vào khai thác bộ nhớ và tràn bộ đệm (buffer overflows). Krypton tập trung vào các khái niệm cơ bản về mật mã. Maze chứa các thách thức về kỹ thuật đảo ngược (reverse engineering) và khai thác (exploitation). Mỗi wargame đều xây dựng dựa trên một khía cạnh khác nhau của bảo mật, lập trình hoặc các khái niệm khoa học máy tính khác.

Các Lệnh Linux Đã Học (Và Hiểu Sâu Sắc Hơn)

Thực tế, tôi sẽ không nói rằng OverTheWire là nơi đầu tiên tôi thấy những lệnh này, nhưng đây là lần đầu tiên sau một thời gian dài tôi phải thực sự sử dụng chúng với mục đích. Một số tôi đã quên cách sử dụng một phần, những lệnh khác tôi chỉ từng sử dụng với cú pháp được sao chép và một ý tưởng mơ hồ về những gì đang xảy ra. Chơi Bandit buộc tôi phải chậm lại và tìm hiểu xem mỗi lệnh thực sự làm gì, và cách sử dụng chúng một cách thông minh, có chủ đích hơn. Dưới đây là sáu lệnh đã thực sự nổi bật.

ssh

SSH là viết tắt của Secure Shell. Đây là cách tiêu chuẩn để kết nối từ xa đến terminal của một máy khác, đặc biệt là qua internet. Nó giống như việc dịch chuyển phiên dòng lệnh của bạn sang một máy tính khác, một cách an toàn và với mã hóa, để dữ liệu và mật khẩu của bạn không bị lộ trong quá trình truyền tải. Dưới đây là cú pháp cơ bản nhất của lệnh ssh:

ssh username@hostname

Lệnh ssh là lệnh đầu tiên bạn sẽ sử dụng trong OverTheWire Bandit. Trên thực tế, bạn phải sử dụng nó để bắt đầu trò chơi, vì bạn phải kết nối với máy chủ của họ. Bạn phải sử dụng nó ở mọi cấp độ, vì vậy nó gần như trở thành bản năng thứ hai của bạn. Đây là cách thực hiện:

ssh [email protected] -p 2220

Kết nối đến máy chủ OverTheWire Bandit qua giao thức SSH trên terminal.Kết nối đến máy chủ OverTheWire Bandit qua giao thức SSH trên terminal.

Ở đây, bạn đang kết nối đến máy chủ bandit.labs.overthewire.org với tư cách là người dùng bandit0 qua cổng 2220. Sau khi kết nối, bạn sẽ có một shell trên máy từ xa đó và có quyền truy cập vào hệ thống.

find

find là một công cụ dòng lệnh để tìm kiếm trong các thư mục và định vị các file khớp với các tiêu chí cụ thể như tên, kích thước, quyền hạn, thời gian sửa đổi, và nhiều hơn nữa. Nó giống như phiên bản Linux của chức năng tìm kiếm, nhưng mạnh mẽ hơn rất nhiều. Cú pháp cơ bản:

find [path] [options]

Ví dụ, giả sử bạn muốn tìm kiếm một file có tên ‘password.txt’. Đây là lệnh để thực hiện điều đó:

find . -name "password.txt"

Lệnh này yêu cầu find tìm kiếm trong thư mục hiện tại (.) và tất cả các thư mục con của nó một file có tên chính xác là password.txt. Trong một trong những cấp độ đầu tiên của Bandit, bạn phải tìm kiếm một file có thể đọc được, kích thước 1033 byte và không thực thi được. Lệnh find rất phù hợp cho tình huống này:

find dir_name -type f -size 1033c ! -executable

Lệnh này tìm kiếm các file trong thư mục cụ thể có kích thước chính xác 1033 byte (c là viết tắt của byte) và loại trừ các file không thực thi được.

sort

Tiện ích dòng lệnh sort sắp xếp các dòng văn bản theo một thứ tự cụ thể. Nó có thể là thứ tự chữ cái, số học hoặc dựa trên các quy tắc khác bạn định nghĩa. Nó đơn giản một cách đáng ngạc nhiên, nhưng khi kết hợp với các công cụ khác như uniq, cut, hoặc awk, nó trở thành một công cụ mạnh mẽ để xử lý dữ liệu văn bản. Cú pháp cơ bản như sau:

sort [options] [filename]

Ví dụ:

sort file.txt

Lệnh này sẽ sắp xếp theo thứ tự chữ cái các dòng trong file.txt và in chúng ra terminal của bạn. Trong một trong các cấp độ, bạn gặp một file chứa nhiều mật khẩu. Để nhanh chóng tìm ra mật khẩu chính xác, bạn phải sắp xếp file theo thứ tự chữ cái và lọc các giá trị duy nhất. Lệnh sort rất hữu ích cho việc đó:

​​​​​​sort data.txt | uniq -u

uniq chỉ hoạt động trên các dòng trùng lặp liên tiếp, chúng ta cần sắp xếp nó trước. Giờ đây, nó sẽ chỉ xuất ra các dòng chỉ xuất hiện chính xác một lần.

xxd

Lệnh xxd tạo một bản sao hex (hex dump) của một file hoặc chuyển đổi một bản sao hex trở lại dạng nhị phân gốc của nó. Đây là một tiện ích khá đặc thù, nhưng cực kỳ hữu ích khi bạn xử lý dữ liệu ẩn, các file được mã hóa hoặc cố gắng kiểm tra nội dung thô của thứ gì đó. Ở dạng cơ bản nhất, bạn truyền tên file cho nó.

xxd [filename]

Vậy nếu bạn có một file secret.txt:

xxd secret.txt

Lệnh này sẽ xuất nội dung của secret.txt dưới dạng hệ thập lục phân cùng với biểu diễn ASCII. Bạn cũng có thể truyền cờ -r để chuyển đổi một bản sao hex trở lại thành file nhị phân. Ở một cấp độ, bạn được cung cấp bản sao hex của một file nhị phân. Sử dụng xxd, bạn phải biến nó trở lại thành một file ZIP.

xxd -r data.txt data

Lệnh này chuyển đổi file văn bản trở lại thành file nhị phân, với điều kiện bản sao hex phải ở định dạng chính xác.

strings

strings là một công cụ dòng lệnh trích xuất văn bản có thể in được từ các file nhị phân. Nếu bạn từng mở một file trông kỳ lạ và thấy một “bức tường” toàn những ký tự vô nghĩa, strings sẽ giúp kéo ra các đoạn văn bản có thể đọc được như mật khẩu, manh mối hoặc tin nhắn ẩn. Nó đặc biệt hữu ích khi một file không phải là file văn bản về mặt kỹ thuật, nhưng vẫn chứa văn bản có thể đọc được ở đâu đó bên trong.

strings secret_file

Lệnh này sẽ quét secret_file và in ra bất kỳ chuỗi ký tự có thể in nào mà nó tìm thấy. Trong một trong các cấp độ, có một file chứa văn bản có thể đọc được ẩn giữa một khối lớn các ký tự vô nghĩa. Để lọc ra văn bản thực, bạn phải sử dụng lệnh strings trên file đó.

nc

nc, viết tắt của netcat, là một tiện ích mạng đa năng có thể đọc và ghi dữ liệu qua các kết nối mạng bằng TCP hoặc UDP. Nó thường được gọi là “con dao đa năng Thụy Sĩ” của các công cụ mạng vì nó có thể làm rất nhiều thứ, chẳng hạn như thiết lập một máy chủ đơn giản, gỡ lỗi cổng, hoặc đọc dữ liệu từ một socket.

nc host_ip port_number

Lệnh này kết nối máy của bạn đến cổng 1234 trên localhost, cho phép bạn gửi và nhận văn bản hoặc dữ liệu thô. Ở một cấp độ, bạn được yêu cầu gửi mật khẩu đến cổng 30000 của localhost. Bạn có thể thực hiện điều đó bằng cách sử dụng lệnh nc.

nc localhost 30000
[Nhắc nhập mật khẩu]

Lệnh này gửi mật khẩu của bạn hoặc bất kỳ dữ liệu nào khác đến cổng đã chọn của máy chủ đã chọn.

Cách Chơi OverTheWire Hiệu Quả Nhất Theo Kinh Nghiệm Cá Nhân

Không phải ai cũng học theo cùng một cách. Và điều đó hoàn toàn bình thường. Nếu ai đó hoàn toàn mới với Linux, họ có thể thấy OverTheWire hơi khó khăn lúc đầu. Tuy nhiên, có một cách bạn có thể khiến nó trở nên dễ dàng hơn một chút. Nó cũng sẽ giúp bạn tận dụng tối đa trò chơi này.

Mỗi cấp độ có một danh sách các lệnh và một số khái niệm cơ bản bạn có thể cần để hoàn thành cấp độ đó. Lời khuyên của tôi dành cho bạn là đừng vội vàng ở bất kỳ cấp độ nào chỉ để hoàn thành nó. Thay vào đó, hãy dành thời gian để đọc về từng khái niệm để hiểu rõ ràng. Các cấp độ đã liên kết các tài nguyên. Nếu bạn vẫn còn nghi ngờ, hãy tìm hiểu thêm.

Điều tương tự cũng áp dụng cho các lệnh Linux. Hãy đọc các trang man (man pages) để nắm vững từng lệnh và thử nghiệm với chúng để hiểu hành vi của chúng. Sau đó, hãy bắt đầu cấp độ đầu tiên và bắt đầu hành trình của bạn từ đó.

Dù bạn là người mới làm quen với Linux hay đã yêu thích nó, bạn chắc chắn nên thử OverTheWire. Dù kỹ năng của bạn ở mức nào, bạn chắc chắn cũng sẽ học được điều gì đó mới mẻ. Có rất nhiều tài nguyên tuyệt vời khác để học Linux đáng để khám phá.

Related posts

Chuột Gaming Siêu Nhẹ Pulsar Xlite V3: Lựa Chọn Bất Ngờ Vượt Trội Cho Công Việc Hàng Ngày?

Administrator

git-who: Công Cụ Phân Tích Đóng Góp Git Toàn Diện Vượt Trội Hơn git blame

Administrator

Tự Học Lập Trình Online: 5 Bài Học Giúp Bạn Vượt Qua Thử Thách

Administrator