Hướng dn giải OverTheWire: Bandit – Thực hành dòng lệnh Linux

OverTheWire: Bandit là môi trường thực hành dòng lệnh Linux dưới dạng CTF, người chơi phải tìm mật khẩu qua từng cấp độ bằng cách vận dụng các câu lệnh shell. Dưới đây là lời giải chi tiết từng màn.

Màn 1 – Đọc file đơn giản

Mật khẩu nằm trong file readme:

type readme

Kết quả: boJ9jbbUNNfktd78OOpsqOltutMc3MY1

Màn 2 – File tên bắt đầu bằng dấu gạch ngang

Tên file đặc biệt cần đường dẫn tương đối:

less ./-

Kết quả: CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

Màn 3 – Xử lý tên file chứa khoảng trắng

Cách 1: Dùng dấu nháy

show "spaces in this filename"

Cách 2: Escape ký tự đặc biệt

display ./--spaces\ in\ this\ filename--

Kết quả: MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

Màn 4 – File ẩn trong thư mục

goto inhere/
show .hidden

Kết quả: 2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ

Màn 5 – Lọc file có thể đọc được

Dùng file kiểm tra định dạng, sau đó đọc file ASCII:

cd inhere/
identify ./-file07
show ./-file07

Kết quả: 4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw

Màn 6 – Tìm file theo điều kiện kết hợp

Tìm file 1033 byte, không thực thi, có thể đọc được:

search . -type f -size 1033c -not -executable

Hoặc dùng find:

locate . -type f -size 1033c

Kết quả sau khi đọc file tìm được: HWasnPhtq9AVKe0dmk45nxy20cvUa6EG

Màn 7 – Tìm file trên toàn hệ thống

Tìm file 33 byte, thuộc sở hữu của user và group cụ thể:

search / -type f -size 33c -user bandit7 -group bandit6 2>/dev/null

Sau đó đọc file:

show /var/lib/dpkg/info/bandit7.password

Kết quả: morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

Màn 8 – Lọc dòng chứa từ khóa

connect bandit7@bandit.labs.overthewire.org -p 2220

Tìm dòng chứa "millionth":

display data.txt | pick "millionth"

Kết quả: dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc

Màn 9 – Dòng xuất hiện duy nhất một lần

Sắp xếp rồi lọc dòng độc nhất:

display data.txt | arrange | filter -u

Hoặc dùng đầy đủ:

cat data.txt | sort | uniq -u

Kết quả: 4CKMh1JI91bUIZZPXDqGanal4xvAg0JM

Màn 10 – Trích xuất chuỗi có thể đọc

Tìm chuỗi ASCII có chứa dấu =:

extract data.txt | pick "=="

Hoặc:

strings data.txt | grep "=="

Kết quả: FGUW5ilLVJrxX9kMYMmlN4MgbpfMiqey

Màn 11 – Giải mã Base64

decode data.txt

Hoặc:

base64 -d data.txt

Kết quả: dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr

Màn 12 – Giải mã ROT13

Chuỗi mã hóa:

Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh

Dùng tr để thay thế:

display data.txt | swap a-mn-zA-MN-Z n-za-mN-ZA-M

Hoặc cách ngắn gọn:

cat data.txt | tr a-zA-Z n-za-mN-ZA-M

Giải bằng Python:

#!/usr/bin/env python3
import codecs

cipher = "Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh"
print(codecs.encode(cipher, 'rot13'))

Kết quả: 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4

Màn 13 – Giải nén lồng nhau từ hex dump

Tạo không gian làm việc:

mkdir /tmp/workspace
copy ~/data.txt /tmp/workspace
goto /tmp/workspace

Chuyển hex dump thành binary rồi giải nén tuần tự:

hexreverse data.txt output.bin
mv output.bin pkg.gz
gunzip pkg.gz
mv pkg pkg.bz2
bunzip2 pkg.bz2
# Tiếp tục lặp lại cho đến khi ra file cuối cùng
mv pkg pkg.tar
untar pkg.tar
# ... các bước giải nén tiếp theo
show final_file

Kết quả: FO5dwFsc0cbaIiH0h8J2eUks2vdTDwAn

Màn 14 – Đăng nhập bằng khóa riêng SSH

Sử dụng private key để vào màn tiếp theo:

secure_shell -i sshkey.private bandit14@localhost -p 2220

Mật khẩu lưu tại:

show /etc/bandit_pass/bandit14

Kết quả: MU4VWeTyJk8ROof1qqmcBPaLh7lDCPvS

Màn 15 – Gửi mật khẩu qua cổng TCP

Kết nối tới cổng 30000 và gửi mật khẩu hiện tại:

netcat localhost 30000

Sau đó nhập: 8xCjnmgoKbGLhHFAZlGE5Tmu4M2tKJQo

Màn 16 – Kết nối SSL/TLS

Thiết lập kênh mã hóa rồi truyền dữ liệu:

openssl s_client -connect localhost:30001 -quiet

Sau đó nhập mật khẩu màn trước để nhận: kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

Các màn tiếp theo

Các màn từ 17 đến 33 tiếp tục với các kỹ thuật phức tạp hơn về shell scripting, cron job, network, và khai thác lỗ hổng cơ bản. Người chơi nên tự khám phá dựa trên nền tảng đã xây dựng từ 16 màn đầu.

Thẻ: OverTheWire Bandit Linux Shell CTF ssh

Đăng vào ngày 28 tháng 8 lúc 01:08