Directory Enumeration
Directory/content enumeration คือการค้นหา path, ไฟล์ และ endpoint ที่ไม่มีลิงก์ตรงๆ บนหน้าเว็บ ด้วยการเดาจาก wordlist แล้วอ่าน HTTP status/ขนาด response เพื่อแยกของจริงออกจาก noise เทคนิคนี้เปิดเผย admin panel, ไฟล์ backup/source, API ที่ซ่อน, และ path ที่นำไปสู่ช่องโหว่ บทนี้ลงลึกทุกเครื่องมือหลัก (ffuf, feroxbuster, gobuster, dirsearch), การเลือก wordlist, การกรอง false positive, recursion, และการรับมือ WAF/rate limit
1. แนวคิด — ทำไมต้อง brute path
เว็บมักมี path ที่เข้าถึงได้แต่ไม่มีลิงก์บนหน้า (/admin, /backup, /api, /.git) การ enumerate คือยิง request เดา path จาก wordlist แล้วดู HTTP status/ขนาด response — 200/301/302/403/401 บ่งชี้ว่ามีอยู่ (403/401 = มีแต่ห้ามเข้า ก็ยังเป็นเบาะแสว่าอะไรซ่อนอยู่)
| Status | ความหมาย | ทำอะไรต่อ |
|---|---|---|
| 200 OK | มีอยู่และเข้าถึงได้ | เปิดดู, brute ต่อในโฟลเดอร์ |
| 301/302 | redirect (มักคือโฟลเดอร์ที่ต้องมี /) | ตาม redirect, recurse เข้าไป |
| 401 | มีอยู่ ต้อง auth | ลอง default cred / bypass |
| 403 Forbidden | มีอยู่แต่ห้ามเข้า | ลอง path bypass (//, %2e, header) |
| 405 | method ผิด แต่ endpoint มีจริง | เปลี่ยน method (GET↔POST) |
| 404 | ไม่มี (ปกติ) | ข้าม — แต่ระวัง soft-404 |
.php,.phtml,.bak, .NET→.aspx,.asmx,.config, Java→.jsp,.do,.action2. เครื่องมือและคำสั่ง (ทีละตัว)
# directory/file พื้นฐาน
ffuf -u https://target/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt \
-mc 200,301,302,307,401,403 -c
# หา extension เฉพาะ (ตาม stack ที่ fingerprint ได้)
ffuf -u https://target/FUZZ -w wordlist.txt -e .php,.bak,.txt,.zip,.old,.~ -c
# auto-calibrate กัน soft-404 (ffuf หา baseline เอง)
ffuf -u https://target/FUZZ -w wordlist.txt -ac -c
# กรองด้วยขนาด/จำนวนคำ/บรรทัด ตัด false positive
ffuf -u https://target/FUZZ -w wordlist.txt -fc 404 -fs 4242 -fw 12
# recursion อัตโนมัติ (เจอโฟลเดอร์ → ยิงต่อ)
ffuf -u https://target/FUZZ -w wordlist.txt -recursion -recursion-depth 2 -e /
# ปรับความเร็ว: -t threads, -rate req/s, -p delay
ffuf -u https://target/FUZZ -w wordlist.txt -t 40 -rate 100 -p 0.1feroxbuster -u https://target -w wordlist.txt -x php,txt,bak,zip
# ปรับ depth, threads, filter status/size
feroxbuster -u https://target -w wordlist.txt -d 3 -t 50 \
--filter-status 404 --filter-size 0
# ตาม redirect + สแกน link ที่เจอในหน้า (--extract-links)
feroxbuster -u https://target -w wordlist.txt --extract-links --redirects
# เก็บ output ต่อได้ (resume)
feroxbuster -u https://target -w wordlist.txt -o ferox.txt --resume-from ferox.state# gobuster โหมด dir
gobuster dir -u https://target -w wordlist.txt -x php,html,txt \
-s 200,204,301,302,307,401,403 -b '' -t 40
# gobuster โหมด vhost (หา virtual host)
gobuster vhost -u https://target.com -w subdomains.txt --append-domain
# dirsearch — มาพร้อม wordlist + จัดการ extension เอง
dirsearch -u https://target -e php,html,js,bak,zip -x 404,403 -r
# -r recursive, -x exclude status, -e extensions3. Wordlist — เลือกและไล่ระดับ
wordlist ที่ดีสำคัญกว่าเครื่องมือ เริ่มจากเล็ก/เจาะจงก่อน แล้วค่อยขยาย ยิ่งใหญ่ยิ่งช้าและเสี่ยงโดนบล็อก เลือกให้เข้ากับ stack และประเภทเป้าหมาย (API vs เว็บทั่วไป)
| Wordlist (SecLists) | ขนาด | ใช้เมื่อ |
|---|---|---|
| Discovery/Web-Content/common.txt | ~4.7k | รอบแรก เร็ว หาของชัดๆ |
| raft-medium-directories.txt | ~30k | รอบสอง คุ้มค่า/ครอบคลุมดี |
| raft-large-*.txt / big.txt | ~120k+ | เจาะลึกเมื่อรอบแรกไม่พอ |
| Discovery/Web-Content/api/api-endpoints.txt | หลากหลาย | เป้าหมายเป็น API/REST |
| directory-list-2.3-medium.txt (dirbuster) | ~220k | brute หนักตอนมีเวลา |
| raft-*-files.txt | หลากหลาย | เน้นหาไฟล์ (ไม่ใช่โฟลเดอร์) |
| Flag สำคัญ (ffuf) | หน้าที่ |
|---|---|
| -mc / -fc | match / filter ตาม status code |
| -fs / -fw / -fl | filter ตามขนาด / จำนวนคำ / บรรทัด |
| -ac | auto-calibrate หา baseline soft-404 เอง |
| -recursion -recursion-depth N | เจาะโฟลเดอร์ลูกอัตโนมัติ |
| -e / -H / -X | extensions / เพิ่ม header / เปลี่ยน method |
| -t / -rate / -p | threads / req ต่อวินาที / delay |
| -mr / -fr | match / filter ด้วย regex ใน response |
- SecLists อยู่ที่
/usr/share/seclists/Discovery/Web-Content/(ติดตั้ง:apt install seclists) - ไล่ระดับ: common.txt → raft-medium → raft-large/big.txt (เล็กไปใหญ่)
- เจอโฟลเดอร์แล้ว recurse เข้าไปต่อ (feroxbuster/ffuf -recursion ทำเอง)
- หา extension ตาม stack:
.php .aspx .jsp .json .bak .old .zip .tar.gz .swp .~ - backup/source: ลองต่อท้ายไฟล์ที่รู้จักด้วย
.bak .old .orig ~ .save(เช่น index.php.bak) - API: ใช้ wordlist สาย api + ลอง
/api/v1 /api/v2 /swagger.json /openapi.json /graphql
4. เทคนิคขั้นสูง — recursion, bypass 403, vhost
# soft-404: หน้า not-found คืน 200 → หา baseline size ก่อน
curl -s -o /dev/null -w '%{size_download}\n' https://target/thisdoesnotexist_zzz
# ได้ 4242 → ffuf ... -fs 4242
# bypass 403 ด้วยการดัด path (ลองหลายแบบ)
ffuf -u https://target/adminFUZZ -w <(printf '/\n/.\n//\n/..;/\n%%2e/\n?\n#\n') -mc 200
# bypass ด้วย header
ffuf -u https://target/admin -w /dev/null -H "X-Original-URL: /admin" -mc all
curl -s https://target/admin -H "X-Forwarded-For: 127.0.0.1"
curl -s https://target/admin -H "X-Rewrite-URL: /admin"
# vhost fuzzing (เว็บซ่อนหลัง Host header)
ffuf -u http://TARGET_IP/ -H "Host: FUZZ.target.com" \
-w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -ac-fs/-fw หรือปล่อย -ac ให้ ffuf จัดการเอง5. CTF & Pentest Walkthrough
- 1CTF: ffuf รอบแรกด้วย common.txt เจอ /dev (301) → recurse เข้าไปเจอ /dev/backup.zip → unzip ได้ source + flag
- 2CTF: หน้าเว็บโล่ง → ffuf -e .php,.txt,.bak เจอ index.php.bak → ดาวน์โหลดอ่าน source เห็น logic ตรวจ flag
- 3Pentest: fingerprint เป็น .NET → ffuf -e .aspx,.asmx,.config เจอ web.config.bak → เผย connection string ฐานข้อมูล
- 4Pentest: /admin คืน 403 → ลอง header X-Original-URL: /admin ผ่าน → เข้าแผง admin ได้
- 5Pentest: vhost fuzzing บน IP เดียว เจอ dev.target.com (ต่าง size) → เว็บ staging เปิด debug + ไม่มี auth
6. ข้อผิดพลาดที่พบบ่อย & Troubleshooting
| อาการ | สาเหตุ | ทางแก้ |
|---|---|---|
| ผลออกมาเป็น 200 ทุกอัน | soft-404 | หา baseline size → -fs, หรือ -ac |
| ยิงไปสักพักโดนบล็อก/timeout | rate limit / WAF | ลด -t และ -rate, เพิ่ม -p delay, สุ่ม UA |
| ไม่เจออะไรเลยทั้งที่ควรมี | wordlist ไม่ตรง / ไม่ใส่ extension | เปลี่ยน wordlist, เพิ่ม -e ตาม stack |
| 403 เต็มไปหมด | WAF กันหรือ default deny | ลอง bypass path/header, ยืนยันว่ามีจริง |
| เจอซ้ำๆ ขนาดเท่ากันเยอะ | หน้า redirect/error รวม | filter ด้วย -fs/-fw หรือ -fr regex |
| ช้ามาก | wordlist ใหญ่ + recursion ลึก | เริ่ม common.txt, จำกัด depth, แยกรอบ |
-rate/-t ให้เหมาะกับความทนของเซิร์ฟเวอร์7. Quick Reference
ffuf -u https://target/FUZZ -w wordlist -mc 200,301,302,401,403 -ac-e .php,.bak,.zip,.old,~หา backup/sourceferoxbuster -u URL -w wl -x php,bak --extract-links= recursive + ดึงลิงก์- wordlist: common.txt → raft-medium → big.txt (เล็กไปใหญ่)
- soft-404 →
-fs/-fwหรือ-ac - 403/401 ก็เป็นเบาะแส (มีอยู่แต่ห้ามเข้า) → ลอง bypass path/header
- vhost:
ffuf -H 'Host: FUZZ.target' -ac - โดนบล็อก → ลด
-t/-rate, เพิ่ม-pdelay - เจอ path → recurse ต่อ แล้วส่งต่อ Parameter Discovery
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติ fingerprint เว็บเสร็จแล้ว รู้ stack คร่าวๆ แต่ยังไม่รู้ว่ามี path/ไฟล์อะไรซ่อนอยู่บ้าง มีแค่ Kali เปล่าๆ ทำตามนี้ทีละขั้น
- 1ติดตั้ง wordlist ให้ครบก่อน (ถ้ายังไม่มี): sudo apt install seclists
- 2รันรอบแรกด้วย wordlist เล็ก: ffuf -u https://target/FUZZ -w /usr/share/seclists/Discovery/Web-Content/common.txt -mc 200,301,302,401,403
- 3ถ้าทุก path คืน 200 หมด (soft-404) ให้วัด baseline ก่อน: curl -s -o /dev/null -w '%{size_download}\n' https://target/thisdoesnotexist_zzz
- 4เอาขนาดที่ได้ไปกรองออก: ffuf -u https://target/FUZZ -w wordlist.txt -fs <ขนาดที่วัดได้> หรือใช้ -ac ให้ ffuf หาเอง
- 5ขยาย wordlist เป็น raft-medium-directories.txt ถ้ารอบแรกได้น้อยเกินไป
- 6เพิ่ม extension ตาม stack ที่ fingerprint ได้ เช่น ffuf ... -e .php,.bak,.zip,.old (สำหรับ PHP)
- 7เจอโฟลเดอร์ (301) ให้เปิด -recursion -recursion-depth 2 ให้มันเจาะลึกเข้าไปเองต่อ
- 8ถ้าเจอ 403 อย่าข้าม ลอง bypass ด้วย header: curl -s https://target/admin -H 'X-Original-URL: /admin'
- 9ถ้าเป็น IP เดียวหรือสงสัยว่ามีหลายเว็บ ลอง vhost fuzzing: ffuf -u http://TARGET_IP/ -H 'Host: FUZZ.target.com' -w subdomains.txt -ac
- 10รวบรวม path ทั้งหมดที่เจอ แล้วส่งต่อไปทำ Parameter Discovery บน endpoint ที่ดูน่าสนใจ
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| brute path/ไฟล์หลัก | ffuf, gobuster | - | - |
| recursive brute อัตโนมัติ | - | apt install feroxbuster | - |
| wordlist มาตรฐาน | - | apt install seclists | - |
| บันทึกและวิเคราะห์ผล | dirsearch | pipx install dirsearch | - |
| bypass 403 ด้วยมือ | curl + header | - | - |
| vhost fuzzing | ffuf, gobuster | - | - |
| สแกน misconfig เสริม | nikto | - | - |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้