วิธีการใช้งาน Nuclei tool 101

โดย admin

3 นาที
แชร์
Blog Thumbnail

วิธีการใช้งาน Nuclei tool 101

วันนี้เราจะมาแนะนำเครื่องมือที่ใช้เป็นประจำในการทำ Pentest นั่นก็คือ Nuclei ซึ่งเป็นเครื่องมือสำหรับสแกนหาช่องโหว่และการตั้งค่าของระบบ มาดูกันว่า Nuclei คืออะไร และมีคำสั่งพื้นฐานอะไรที่น่าสนใจบ้าง!

Nuclei นั้นคืออะไร

Nuclei เป็นเครื่องมือ Open Source ที่ใช้สำหรับเเสกนตรวจจับและโจมตีช่องโหว่ ในเว็บแอปพลิเคชันและบริการเครือข่ายอื่น ๆ โดยอัตโนมัติ เหมาะสำหรับนักทดสอบเจาะระบบ (Pentester) และนักวิจัยด้านความปลอดภัยใช้งาน

การทำงานของ Nuclei

ใช้ Template ที่กำหนดเอง เพื่อระบุชุดของ HTTP Pequest ที่จะส่งไปยังเป้าหมาย มีกฎจับคู่ (Matching Rules) เพื่อช่วยตรวจจับช่องโหว่หรือการตั้งค่าที่ผิดพลาดของระบบเป้าหมาย

สรุปง่ายๆ คือ Nuclei ช่วยให้สแกนหาช่องโหว่ได้เร็วขึ้น โดยใช้ Template ที่เรากำหนด Payload (ข้อมูลหรือโค้ดที่ถูกส่งไปยังเป้าหมายเพื่อให้เกิดผลบางอย่าง) ที่ออกแบบไว้

วิธีการติดตั้ง Nuclei

git clone https://github.com/projectdiscovery/nuclei.git
cd nuclei/cmd/nuclei
go build
mv nuclei /usr/local/bin/
nuclei -version

Nuclei Cheatsheet รวม command ที่มีการใช้งานบ่อย

การใช้งานพื้นฐาน

สแกนหาช่องโหว่เป้าหมายเดียว

nuclei -u http://example.com

หรือ

nuclei -target http://example.com

สแกนมากกว่า 1 เป้าหมายจากไฟล์ หากมีรายการเป้าหมายในไฟล์ (เช่น targets.txt) สามารถสแกนแต่ละรายการด้วยคำสั่ง

nuclei -l targets.txt

*ซึ่งในการเเสกนหากไม่ได้ระบุ Template จะเป็นการสแกนโดยใช้ Template เริ่มต้นทั้งหมด*

สแกนร่วมกับเครื่องมืออื่น

subfinder -d targetdomain.site -silent | httpx | nuclei

● ใช้ subfinder เพื่อหา List Subdomain (โดเมนย่อย) ของเป้าหมาย และ -silent ทำให้ผลลัพธ์แสดงเฉพาะชื่อ Subdomain โดยไม่มีข้อความอื่น ๆ

● แล้วใช้ httpx เพื่อตรวจสอบดูว่า Subdomain ที่หาได้สามารถเข้าถึงได้จริงหรือไม่

● สุดท้ายนำผลลัพท์ Subdomain ที่ได้มา มาเเสกนหาช่องโหว่ต่อด้วย nuclei

การสแกน Nuclei ร่วมกับ Template

*Path ของ Template จะอยู่ที่ /home//.local/nuclei-templates/ หรือ /home/user/.nuclei-templates*

สแกนด้วยโฟลเดอร์ Template สามารถสแกนโดยใช้ Template ทั้งหมดในโฟลเดอร์ โดยระบุด้วย Flag -t เช่น ใช้ Template ทั้งหมดในโฟลเดอร์ http/exposures/ ในการสแกน:

nuclei -t http/exposures/

สแกนโดยใช้ Template เเบบเฉพาะเจาะจง สามารถระบุได้ด้วยด้วย Flag -t

nuclei -t http/technologies/tech-detect.yaml -t http/technologies/nginx/nginx-version.yaml

สแกนด้วยTag ของ Template ในเเต่ละ Template จะมี Tag เพื่อให้ง่ายต่อการจัดระเบียบและใช้งาน สามารถระบุ Tag เพื่อใช้ Template ที่ตรงกับเกณฑ์ที่เราต้องการได้

nuclei -u https://jira.targetdomain.site -tags jira,generic

สแกนโดยใช้ Template กรองตามความรุนแรง สามารถกรอง Template ตามระดับความรุนแรงของช่องโหว่เพื่อมุ่งเน้นเเสกนหาเฉพาะช่องโหว่ที่สำคัญในระบบได้

nuclei -u https://targetdomain.site -s critical,high,medium

ยกเว้นTemplate เพื่อไม่ให้ใช้ Template ที่ระบุไว้ในการสแกน ใช้ Flag -et

nuclei -et http/fuzzing/

การตั้งค่า Header

ตั้งค่า Header ที่กำหนดเอง สามารถตั้งค่า Header ที่กำหนดเองเพื่อใช้ในการ Request HTTP ระหว่างการสแกน เช่น การตั้งค่า User-Agent header หรือ Authorizes header

nuclei -H ‘User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36’ -l targets.txt

การตั้งค่า Rate limits (การจำกัดอัตราการร้องขอ)

จำกัดจำนวน Request และ Thread ควบคุมอัตราการสแกนโดยกำหนดจำนวน Request ต่อวินาทีใช้ Flag -rl และจำนวน Thread ที่ทำงานพร้อมกันได้โดยใช้ Flag -c

nuclei -l targets.txt -rl 20 -c 5

คำสั่งนี้จำกัดให้ Nuclei ส่ง Request เพียง 20 ครั้งต่อวินาที และใช้ Thread พร้อมกันสูงสุด 5 Thread เพื่อรักษาสมดุลระหว่างความเร็วและโหลดของเซิร์ฟเวอร์

*Thread เป็นหน่วยประมวลผลย่อยภายในโปรแกรมที่ช่วยให้สามารถทำงานแบบขนาน (parallel execution) ได้ โดยแต่ละ Thread จะทำงานแยกกันภายใน Process เดียวกัน*

ตั้งค่า Timeout (ค่าเริ่มต้น คือ 10) ยิ่งตั้งค่าน้อยจะเป็นการลดระยะเวลาการส่ง Request และเพิ่มความเร็วในการสแกน

nuclei -l targets.txt -timeout 3

การตั้งค่า Optimizations (ปรับแต่ง) ต่างๆ

ข้ามการสเเกนเป้าหมายหลังจากเกิดข้อผิดพลาด 5 ครั้ง

nuclei -l targets.txt — max-host-errors 5

ตั้งค่าการลองเเสกนใหม่อีกครั้งสูงสุดเป็น 3 ครั้ง (ค่าเริ่มต้นคือ 1):

nuclei -l targets.txt -retries 3

ตั้งค่า Scan strategy (กลยุทธ์ที่ใช้ในการสแกน) สามารถเลือกกลยุทธ์การสแกนเพื่อปรับสมดุลระหว่างโหลดของระบบและประสิทธิภาพการสแกน

nuclei -l targets.txt -ss host-spray

มีโหมดให้เลือกเป็น

● auto: ใช้กลยุทธ์ template-spray

● host-spray: รันทุกTemplate บนเป้าหมายเดียก่อนย้ายไปเป้าหมายถัดไป

● template-spray:รัน Template เดียวกันบนหลายเป้าหมายเพื่อลดภาระบนเป้าหมายเดียว

การจัดการ Output (ผลลัพธ์)

Nuclei มีตัวเลือกหลากหลายสำหรับการบันทึกและจัดรูปแบบผลลัพธ์การสแกน

บันทึก Output ลงไฟล์

nuclei -l targets.txt -o nuclei.log

คำสั่งนี้บันทึก Output การสแกนลงในไฟล์ nuclei.log

พิมพ์เเสดง Output ในรูปแบบ JSONL

nuclei -l targets.txt -jsonl

คำสั่งนี้พิมพ์ Output เป็นรูปแบบ JSON Lines (JSONL) เพื่อให้ง่ายต่อการนำไปใช้ในเครื่องมืออื่น

แสดง stat (สถิติ) ระหว่างการสแกน แสดง stat ระหว่างการสแกนเพื่อตรวจสอบความคืบหน้าและประสิทธิภาพ

nuclei -l targets.txt -stats

บันทึกผลลัพธ์ในรูปแบบ Markdown

nuclei -l targets.txt -me results/

คำสั่งนี้บันทึก Output เป็นไฟล์ Markdown ในโฟลเดอร์ results/ เพื่อให้ง่ายต่อการสร้างเป็นรายงาน

การทดสอบ Out of Band

การทดสอบ OOB เป็นการทดสอบที่เกิดขึ้นนอกเหนือจากกรอบการ Request-Response แบบปกติ

ปิดการทดสอบ OOB

nuclei -l targets.txt -ni

คำสั่งนี้ปิดการทดสอบ OOB

ใช้เซิร์ฟเวอร์ Interactsh ของตัวเอง

nuclei -l targets.txt -iserver -itoken

คำสั่งนี้กำหนดให้ใช้เซิร์ฟเวอร์ Interactsh แบบ self-hosted พร้อม Token ที่ระบุไป

*Interactsh เป็น Open-Source ที่รวบรวม Open-Source tools ต่าง ๆ เพื่อใช้ในการทดสอบและทำ Security Automation ในรูปแบบต่าง ๆ*

กำหนดเวลารอสำหรับการโต้ตอบ

nuclei -l targets.txt -interactions-eviction 120

คำสั่งกำหนดให้เก็บข้อมูลการโต้ตอบ (interactions) กับเซิร์ฟเวอร์ของเป้าหมายเป็นเวลา 120 วินาที ก่อนจะลบข้อมูลนั้นออกจากหน่วยความจำ

*interactions-eviction มักใช้ในกรณีที่สแกนช่องโหว่ที่ต้องมีการโต้ตอบกับ DNS, HTTP หรือ OOB interactions*

กำหนดระยะเวลาการ polling แบบกำหนดเอง (ค่าเริ่มต้นคือ 5)

nuclei -l targets.txt -interactions-poll-duration 10

คำสั่งกำหนดระยะเวลาการดึงข้อมูลการโต้ตอบ (poll interactions) จากเซิร์ฟเวอร์ของ Nuclei เป็นเวลา 10 วินาที

การตั้งค่าไฟล์ Config

ใช้ไฟล์ Config เพื่อใช้โหลดตั้งค่าจากไฟล์ YAML เพื่อทำให้กระบวนการสแกนเป็นไปตามมีมาตรฐานที่เราตั้งค่าไว้

nuclei -config nuclei.yaml -l targets.txt

*ไฟล์ Config เริ่มต้นของ Nuclei อยู่ที่ ~/.config/nuclei/config.yaml*

ตัวอย่างConfig:

header:
- ‘X-BugBounty-Hacker: h1/nickname’
templates:
- cves/
- vulnerabilities/
- misconfiguration/
tags: exposures,cve
severity: critical,high,medium
include-templates:
- vulnerabilities/xxx
- misconfiguration/xxxx
exclude-tags: info,fuzz
exclude-templates:
- vulnerabilities/xxx
- misconfiguration/xxxx
# การตั้งค่า Rate Limit
rate-limit: 50
bulk-size: 20
concurrency: 20

ไฟล์การตั้งค่านี้จะมีการกำหนด

● Headers ที่กำหนดเอง

● Path ของ Template ที่ใช้เป็นค่าเริ่มต้น

● ระดับความรุนแรงของช่องโหว่ที่ใช้ในการสเเกนเริ่มต้น

● การรวมเอา Template ที่ต้องการใช้ในการเเสกน และการยกเว้น Template ออกจากการสแกน

● การการตั้งค่าจำกัด Rate Limit (อัตราการส่งคำขอ)

การอัปเดต Nuclei

ปิดการตรวจสอบการอัปเดตอัตโนมัติ

nuclei -l targets.txt -duc

อัปเดตTemplate

nuclei -ut

คำสั่งนี้อัปเดตTemplateเป็นเวอร์ชันล่าสุด

อัปเดต Nuclei

nuclei -up

คำสั่งนี้อัปเดต Nuclei เป็นเวอร์ชันล่าสุด

ตัวอย่างวิธีการเขียนโครงสร้าง Template เเบบขั้นต้น

id: example-template # รหัสประจำตัวของTemplate
info:
name: Example Template # ชื่อTemplate
author: Your Name # ชื่อผู้สร้าง
severity: high # ระดับความรุนแรง (low, medium, high, critical)
requests:
- method: GET # ใช้ method HTTP GET
path: “{BaseURL}” # URL เป้าหมาย
headers: # กำหนด Header เพิ่มเติม (ถ้ามี)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
matchers: # กำหนดเงื่อนไขเพื่อตรวจสอบผลลัพธ์
- type: word # ตรวจหาคำ (word matching)
words:
- “Example” # คำที่ต้องการค้นหาใน Response หลังจากที่เราส่ง payload ไป
attacks: # ส่ง payload ทดสอบช่องโหว่
- payload: ”’ OR true - ” # ทดสอบ SQL Injection

คำอธิบายแต่ละส่วน

● id — รหัสประจำตัวของTemplate ใช้เพื่ออ้างอิงในคำสั่ง Nuclei

● info — ข้อมูลเกี่ยวกับTemplate เช่น ชื่อ, ผู้สร้าง, ระดับความรุนแรง

● requests — รายการ HTTP Request ที่จะส่งไปยังเป้าหมาย

● method — ระบุประเภทของ Request เช่น GET, POST

● path — ระบุ Path ของ URL ที่ต้องการทดสอบซึ่งในที่นี่ถ้าใช้เป็น {BaseURL} จะเอาเป็นค่าตามที่เราระบุในเป้าหมายเลย

● headers — กำหนดส่วนของ HTTP headers (เช่น User-Agent)

● matchers — กำหนดเงื่อนไขเพื่อตรวจสอบผลลัพธ์จากเซิร์ฟเวอร์

● type — วิธีการตรวจสอบ เช่น word, regex, status

● words — คำที่ต้องการค้นหาใน Response

● attacks — (ตัวเลือกเพิ่มเติม) ใช้เพื่อทดสอบช่องโหว่

● payload — ค่าที่ใช้โจมตี เช่น SQL Injection, XSS

สรุปได้ว่าTemplateนี้จะทำอะไรบ้าง

● Templateนี้จะส่งคำขอ GET ไปยังเว็บไซต์

● ทดสอบ SQL Injection ด้วย payload “‘ OR true — “

● ตรวจสอบว่ามีคำว่า “Example” อยู่ใน Response หรือไม่หลังจากส่ง payload ไปหรือไม่ ถ้ามีจะผลการสแกนจะเป็นพบช่องโหว่นี้

Nuclei เป็นเครื่องมือที่ทรงพลังในการค้นหาช่องโหว่และการตั้งค่าที่ผิดพลาดของระบบหวังว่าบทความนี้จะช่วยให้คุณเข้าใจพื้นฐานและนำไปใช้งานได้อย่างมีประสิทธิภาพ อย่าลืมทดลองใช้งานและปรับแต่งตามความต้องการ เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด!

อ้างอิง:

แชร์
กลับไปด้านบน

บทความที่เกี่ยวข้อง

อัปเดตข้อมูลด้านไซเบอร์ ทุกสัปดาห์
รับข่าวสารความรู้เชิงลึกเกี่ยวกับความปลอดภัยไซเบอร์จากดาต้าฟาร์มก่อนใคร

ฟีเจอร์นี้จะเปิดให้ใช้งานเร็ว ๆ นี้ โปรดติดตาม

ส่งสัปดาห์ละ 1 ครั้ง ไม่มีสแปม ยกเลิกการรับข่าวสารได้ทุกเมื่อ