Hướng Dẫn Giải Tám Bài CTF Nhập Môn: Từ Phân Tích Mã, Đảo Ngược, Khai Thác Web Đến Truy Cập SSH

Bài 1: Truy Xuất Dữ Liệu Trong Lưu Trữ Nén

Yêu cầu đề bài là tìm chuỗi định dạng cờ nằm ẩn bên trong một tệp tin lưu trữ. Trên môi trường Linux, quy trình chuẩn bao gồm giải nén và tìm kiếm văn bản.

# Giải nén vào thư mục đích cụ thể
tar -xvf challenge_archive.tar.gz -C ./extracted_dir
# Hoặc dùng unzip nếu là định dạng zip

# Tìm kiếm chuỗi mục tiêu trong toàn bộ thư mục đã giải nén
find ./extracted_dir -type f -exec grep -i "flag" {} +
# Phương pháp thay thế dùng ripgrep (nhanh hơn cho tệp lớn)
rg -a -i "flag" ./extracted_dir

Nếu tệp chứa dữ liệu nhị phân, công cụ strings kết hợp với grep sẽ lọc ra các chuỗi ASCII có thể in được. Một số đề thi sử dụng ký tự nhiễu, lúc này biểu thức chính quy grep -Eo "flag\{[^}]+\}" giúp khớp chính xác định dạng tiêu chuẩn. Nếu dữ liệu được nhúng vào hình ảnh hoặc tệp đa phương tiện, công cụ binwalk hoặc foremost sẽ hỗ trợ trích xuất tệp nhúng.

Bài 2: Giải Mã Lớp Encoding NESTED (Base64 & URL)

Dữ liệu ban đầu thường được mã hóa nhiều lần. Nhận diện Base64 qua bộ ký tự A-Za-z0-9+/= và dấu = ở cuối. Sau khi giải mã lần đầu, kết quả thường xuất hiện dạng mã hóa URL (chứa %XX).

import base64
import urllib.parse

raw_data = "ZmxhZ3tUaGlzIGlzX2YxYWd9"  # Giả định dữ liệu đầu vào
step1 = base64.b64decode(raw_data).decode('utf-8')
final_flag = urllib.parse.unquote(step1)
print(final_flag)

Các biến thể Base64 như URL-Safe (thay +/ bằng -_) cần được chuẩn hóa trước khi giải mã. Trong thực tế kiểm thử xâm nhập, việc xếp chồng encoding là kỹ thuật phổ biến để ẩn giấu thông tin nhạy cảm. Người phân tích cần xác định đúng thứ tự giải mã ngược lại quá trình mã hóa.

Bài 3: Phân Tích Tĩnh Mã Thực Thi (Reverse Engineering)

Đề bài cung cấp tệp thực thi Windows PE không được bảo vệ hoặc mã hóa chuỗi. Công cụ giải mã ngược (Decompiler) như Ghidra hoặc IDA Pro sẽ chuyển đổi mã assembly sang mã giả (pseudocode) dễ đọc.

// Cấu trúc giả lập sau khi giải mã
void main(void) {
    char secret_string[64];
    // Dữ liệu flag được hardcode trong segment dữ liệu
    memcpy(secret_string, "qsnctf{hello_world}", 0x16);
    puts("Chúc mừng! Cờ của bạn là:");
    puts(secret_string);
    return;
}

Nếu chuỗi bị dịch chuyển ký tự (ví dụ: Caesar cipher đơn giản), vòng lặp xử lý trong pseudocode sẽ hiện rõ. Ghidra là lựa chọn miễn phí với khả năng hỗ trợ đa kiến trúc x86/x64/ARM. Người phân tích tập trung vào hàm entry hoặc main, theo dõi luồng dữ liệu từ biến đầu vào đến hàm xuất dữ liệu.

Bài 4: Khám Phá Mạng Nội Bộ & Đọc Tệp Cấu Hình

Trong môi trường máy ảo, bước đầu tiên là xác định địa chỉ IP mục tiêu trên cùng mạng NAT.

# Quét phát hiện host sống trong mạng con
nmap -sn 172.16.0.0/24

# Quét chi tiết dịch vụ và phiên bản trên toàn bộ cổng
nmap -sV -p- -T4 172.16.0.50

Sau khi xác định dịch vụ Web đang chạy, truy cập tệp robots.txt để kiểm tra các đường dẫn bị hạn chế. Tệp này không mang tính bảo mật nhưng thường chứa manh mối do người ra đề cố tình hé lộ. Truy cập đường dẫn trong phần Disallow thường dẫn đến tệp chứa cờ. Việc kết hợp quét cổng với phân tích phản hồi HTTP giúp định hình sơ đồ tấn công.

Bài 5: Tìm Kiếm Tệp Nhạy Cảm (Directory Bruteforce)

Khi không tìm thấy thông tin trên giao diện, công cụ dò đường dẫn là cần thiết. Từ điển đóng vai trò then chốt.

# Sử dụng ffuf với từ điển tùy chỉnh
ffuf -u http://10.0.0.50/FUZZ -w /opt/wordlists/custom_web.txt -e .txt,.bak,.zip -fc 404

# Lọc kết quả theo mã trạng thái HTTP
ffuf -u http://10.0.0.50/FUZZ -w common.txt -mc 200

Các tệp như hint.txt, config.bak hoặc .git thường chứa dữ liệu gốc. Việc kết hợp từ điển chuẩn SecLists với các biến thể cụ thể của đề bài sẽ tăng tỷ lệ thành công. Bộ lọc phản hồi giúp loại bỏ nhiễu, tập trung vào tài nguyên thực sự tồn tại trên máy chủ.

Bài 6: Kiểm Tra Nguồn Trang Web & Công Cụ Nhà Phát Triển

Thông tin nhạy cảm thường không nằm trên giao diện trực quan mà ẩn trong mã nguồn hoặc phản hồi mạng.

# Truy xuất trực tiếp và tìm kiếm bình luận HTML
curl -s http://10.0.0.50/hidden_path | grep -E ""

# Kiểm tra tiêu đề phản hồi và cookie
curl -I -v http://10.0.0.50/hidden_path
# Hoặc dùng wget để lưu toàn bộ phản hồi
wget -S -O output.html http://10.0.0.50/hidden_path

Tab Network trong Developer Tools giúp theo dõi các yêu cầu AJAX ẩn. Dữ liệu cờ có thể được trả về trong tiêu đề tùy chỉnh (X-Custom-Flag), cookie phiên, hoặc biến JavaScript toàn cục. Kiểm tra thẻ meta và bình luận HTML cũng thường bỏ sót. Phân tích yêu cầu HTTP/HTTPS cung cấp cái nhìn sâu hơn về logic xử lý phía máy chủ.

Bài 7: Khai Thác Lỗ Hổng Tải Tệp Lên

Quy trình tấn công bao gồm đăng nhập, vượt qua bộ lọc phần mở rộng, tải lên mã độc WebShell và điều khiển máy chủ từ xa.

// Mã WebShell PHP thay thế (sử dụng system() thay vì eval())


# Đặt tên tệp để bypass bộ lọc đuôi
mv payload.php shell.php5

Bộ lọc phía máy khách (JS) dễ dàng bỏ qua bằng cách chặn gói tin. Bộ lọc MIME có thể giả mạo. Bộ lọc phần mở rộng thường bỏ sót .php5, .phtml hoặc .htaccess điều khiển trình xử lý. Sau khi tải lên, công cụ như Weevely hoặc AntSword sẽ kết nối đến đường dẫn tệp đã upload để thực thi lệnh hệ thống. Cơ chế phòng thủ hiệu quả nhất là tách biệt hoàn toàn vùng lưu trữ tệp và vùng thực thi mã lệnh.

Bài 8: Truy Cập Từ Xa Qua SSH

Cổng 22 mở thường yêu cầu xác thực. Thông tin đăng nhập có thể lấy từ cấu hình Web bị lộ, từ điển mật khẩu yếu, hoặc được cung cấp trực tiếp.

# Kết nối SSH với tùy chỉnh timeout và kiểm tra khóa host
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 user@10.0.0.50

# Tìm kiếm cờ sau khi đăng nhập thành công
find /home /var/www /opt -type f -iname "*flag*" 2>/dev/null
cat /tmp/deploy_notes.txt 2>/dev/null

Giao thức SSH phiên bản 2 được khuyến nghị sử dụng do đã khắc phục lỗi kiểm tra CRC32 của SSH-1. Trong môi trường CTF, việc tái sử dụng mật khẩu (password reuse) giữa dịch vụ Web và SSH là kịch bản phổ biến, nhấn mạnh tầm quan trọng của việc quản lý mật khẩu độc lập.

Mô Hình Chuỗi Tấn Công Trong Bài Toán Nhập Môn

Các bài toán này minh họa bốn mô hình khai thác cốt lõi:

  • Xếp chồng mã hóa: Dữ liệu được chuyển đổi liên tiếp qua nhiều thuật toán. Mã hóa không đồng nghĩa với bảo mật; nó chỉ thay đổi biểu diễn dữ liệu.
  • Rò rỉ thông tin tuần tự: Quét cổng → Xác định dịch vụ → Thu thập Web → Khám phá tệp ẩn → Truy xuất dữ liệu. Độ sâu của bước thu thập thông tin quyết định tốc độ giải quyết.
  • Tải lên và thực thi: Mục tiêu không phải là vượt qua bộ lọc tải lên, mà là tìm phần mở rộng nào được dịch vụ Web diễn giải là mã lệnh. Tách biệt vùng lưu trữ và vùng thực thi là biện pháp phòng thủ hiệu quả nhất.
  • Tái sử dụng thông tin xác thực: Dữ liệu đăng nhập thu thập được ở một dịch vụ thường dùng để truy cập dịch vụ khác. Việc bảo vệ cấu hình và tệp sao lưu là yếu tố then chốt để ngăn chặn tấn công lan rộng.

Thẻ: CTF pentesting web_security reverse_engineering ssh_exploitation

Đăng vào ngày 9 tháng 10 lúc 19:40