TÌM KIẾM FILE VÀ NỘI DUNG — find, grep, locate


 Mục tiêu: Thành thạo 3 công cụ tìm kiếm mạnh mẽ nhất trong Linux — để tìm file cấu hình, mật khẩu, private key, log, exploit... — kỹ năng sống còn trong pentest


✅ 1. grep — TÌM NỘI DUNG TRONG FILE (CỰC KỲ QUAN TRỌNG!)

🔹 grep là gì?

  • GREP = Global Regular Expression Print
  • Dùng để tìm kiếm văn bản (theo từ khóa, biểu thức chính quy) trong file hoặc output lệnh.

🔹 Cú pháp cơ bản:

bash
grep [tùy_chọn] "từ_khóa" [file]

💡 Ví dụ thực tế trong pentest:

➤ Tìm từ “password” trong file config:

bash
grep -i "password" /var/www/html/config.php

-i = không phân biệt hoa thường.


➤ Tìm trong nhiều file cùng lúc:

bash
grep -r "secret" /var/www/html/

-r = recursive — tìm trong tất cả thư mục con.


➤ Hiển thị số dòng + tên file:

bash
grep -n "admin" /etc/passwd

-n = hiển thị số dòng.


➤ Chỉ hiển thị tên file chứa từ khóa:

bash
grep -l "BEGIN RSA PRIVATE KEY" /home/*/.ssh/*

-l = list file name.


➤ Tìm từ khóa trong output lệnh (kết hợp với pipe |):

bash
ps aux | grep "ssh"
netstat -tuln | grep ":22"

➤ Tìm từ khóa và hiển thị 2 dòng trước/sau:

bash
grep -A 2 -B 2 "error" /var/log/apache2/error.log

-A = After, -B = Before → giúp bạn xem ngữ cảnh.


➤ Tìm từ khóa với regex (biểu thức chính quy):

bash
grep -E "root|admin|user" /etc/passwd

-E = extended regex → tìm 1 trong 3 từ.

✅ 2. find + grep — KẾT HỢP SIÊU MẠNH

🔹 Tìm tất cả file .log chứa từ “password”:

bash
find /var/log -name "*.log" -exec grep -l "password" {} \;

→ Tìm file .log → với mỗi file, chạy grep -l → chỉ in tên file nào chứa từ khóa.


🔹 Tìm file config chứa “DB_PASSWORD”:

bash
find /var/www -type f -exec grep -l "DB_PASSWORD" {} \;

-type f = chỉ tìm file, không tìm thư mục.

🔹 Tìm và xem nội dung luôn:

bash
find /home -name "*.txt" -exec grep -Hn "flag{" {} \;

-H = hiển thị tên file, -n = hiển thị số dòng.

✅ 3. locate — TÌM FILE SIÊU NHANH (NHƯNG CẦN CẬP NHẬT)

🔹 locate là gì?

  • Dùng cơ sở dữ liệu đã được lập chỉ mục → tìm file nhanh như chớp.
  • Không quét trực tiếp → nên có thể không thấy file mới tạo.

🔹 Cú pháp:

bash
locate [tên_file]

💡 Ví dụ:

bash
locate config.php
locate id_rsa
locate .bash_history

🔹 Cập nhật database (cần root):

bash
sudo updatedb

→ Chạy lệnh này nếu bạn vừa tạo file mới mà locate không tìm thấy.

🔹 So sánh với find:

Tốc độ
⚡ Siêu nhanh
🐢 Chậm hơn (quét trực tiếp)
Độ chính xác
Có thể thiếu file mới
Luôn chính xác
Cần cập nhật
Có (sudo updatedb)
Không
Tìm theo nội dung
❌ Không
✅ Có (kết hợpgrep)

Dùng locate để tìm tên file nhanh → dùng find + grep để tìm nội dung sâu.

🧠 Ghi nhớ

 grep "từ" file → tìm từ trong file grep -i → không phân biệt hoa thường grep -r → tìm đệ quy trong thư mục grep -l → chỉ hiện tên file find ... -exec grep ... {} \; → kết hợp mạnh mẽ locate → tìm file nhanh — cần updatedb sudo updatedb → cập nhật database locate

  • Luôn dùng 2>/dev/null khi find hoặc grep trong / → tránh ngập lỗi.
  • Khi tìm flag → dùng grep -r "flag{" / 2>/dev/null
  • Khi tìm mật khẩu → dùng grep -i "pass\|secret\|key\|token" /var/www/ -r 2>/dev/null
  • Khi tìm private key → dùng find / -name "id_rsa" 2>/dev/null
  • Khi tìm file backup → dùng find / -name "*.bak" -o -name "*.old" -o -name "*.swp" 2>/dev/null
  • grep -l "từ_khóa" * → tìm tên file chứa từ khóa (chỉ file, không thư mục) grep -r "từ_khóa" . → tìm đệ quy (gồm cả thư mục con) grep -n "từ_khóa" * → tìm và hiển thị số dòng grep -i "từ_khóa" * → không phân biệt hoa thường grep -l "từ_khóa" . → ❌ Sai — không dùng "." với -l/-n grep -l "từ_khóa" * → ✅ Đúng — dùng "*" thay vì "."

No comments:

Post a Comment