ค้นหาเว็บไซต์

วิธีใช้สคริปต์ Nmap Script Engine (NSE) ใน Linux


Nmap เป็นเครื่องสแกนความปลอดภัยเครือข่ายบรรทัดคำสั่งและเครื่องมือสำรวจยอดนิยม ทรงพลัง และข้ามแพลตฟอร์ม นอกจากนี้ยังช่วยให้คุณเห็นภาพรวมของระบบที่เชื่อมต่อเครือข่ายของคุณ คุณสามารถใช้มันเพื่อค้นหาที่อยู่ IP ทั้งหมดของโฮสต์สด สแกนพอร์ตที่เปิดและบริการที่ทำงานบนโฮสต์เหล่านั้น และอื่นๆ อีกมากมาย

หนึ่งในคุณลักษณะที่น่าสนใจของ Nmap คือ Nmap Script Engine (NSE) ซึ่งเพิ่มความยืดหยุ่นและประสิทธิภาพมากยิ่งขึ้น ช่วยให้คุณสามารถเขียนสคริปต์ของคุณเองในภาษาการเขียนโปรแกรม Lua และอาจแชร์สคริปต์เหล่านี้กับผู้ใช้ Nmap คนอื่น ๆ

อ่านเพิ่มเติม: 29 ตัวอย่างการใช้งานจริงของคำสั่ง Nmap สำหรับ Linux

สคริปต์ NSE มีสี่ประเภท ได้แก่ :

  • สคริปต์กำหนดล่วงหน้า – เป็นสคริปต์ที่ทำงานก่อนการสแกนของ Nmap โดยจะดำเนินการเมื่อ Nmap ยังไม่ได้รวบรวมข้อมูลใดๆ เกี่ยวกับเป้าหมาย
  • สคริปต์โฮสต์ – คือสคริปต์ที่ดำเนินการหลังจากที่ Nmap ดำเนินการตามปกติ เช่น การค้นหาโฮสต์ การสแกนพอร์ต การตรวจจับเวอร์ชัน และการตรวจจับระบบปฏิบัติการกับโฮสต์เป้าหมาย
  • สคริปต์บริการ – คือสคริปต์ที่ทำงานกับบริการเฉพาะที่รับฟังบนโฮสต์เป้าหมาย
  • สคริปต์ Postrule – คือสคริปต์ที่ทำงานหลังจาก Nmap สแกนโฮสต์เป้าหมายทั้งหมดแล้ว

จากนั้นสคริปต์เหล่านี้จะถูกจัดกลุ่มตามหมวดหมู่ต่างๆ รวมถึงประเภทสำหรับการตรวจสอบสิทธิ์ (การตรวจสอบสิทธิ์), การค้นหาโฮสต์ (การออกอากาศ), การโจมตีแบบ bruteforce เพื่อคาดเดาข้อมูลรับรองการตรวจสอบสิทธิ์ (brute<) การค้นพบเพิ่มเติมเกี่ยวกับเครือข่าย (การค้นพบ) ทำให้เกิดการปฏิเสธการให้บริการ (สิ่งที่ควรทำ) การใช้ประโยชน์จากช่องโหว่บางอย่าง (การหาประโยชน์) ฯลฯ สคริปต์จำนวนหนึ่งอยู่ในหมวดหมู่เริ่มต้น

หมายเหตุ: ก่อนที่เราจะไปไกลกว่านี้ คุณควรทราบประเด็นสำคัญเหล่านี้:

  • อย่ารันสคริปต์จากบุคคลที่สามโดยไม่ได้พิจารณาอย่างมีวิจารณญาณหรือเฉพาะในกรณีที่คุณเชื่อถือผู้เขียนเท่านั้น เนื่องจากสคริปต์เหล่านี้ไม่ได้ทำงานในแซนด์บ็อกซ์และอาจสร้างความเสียหายให้กับระบบของคุณโดยไม่คาดคิดหรือเป็นอันตรายหรือบุกรุกความเป็นส่วนตัวของคุณ
  • ประการที่สอง สคริปต์เหล่านี้จำนวนมากอาจทำงานเป็นสคริปต์ prerule หรือ postrule เมื่อพิจารณาถึงสิ่งนี้ ขอแนะนำให้ใช้กฎเบื้องต้นเพื่อจุดประสงค์ของความสม่ำเสมอ
  • Nmap ใช้ฐานข้อมูล scripts/script.db เพื่อค้นหาสคริปต์และหมวดหมู่เริ่มต้นที่มีอยู่

หากต้องการดูตำแหน่งของสคริปต์ NSE ที่มีอยู่ทั้งหมด ให้เรียกใช้ยูทิลิตีการค้นหาบนเทอร์มินัล ดังนี้:

locate *.nse

/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...

สคริปต์ NSE ถูกโหลดโดยใช้แฟล็ก --script ซึ่งยังช่วยให้คุณเรียกใช้สคริปต์ของคุณเองได้โดยระบุหมวดหมู่ ชื่อไฟล์สคริปต์ หรือชื่อของไดเร็กทอรีที่มีสคริปต์ของคุณอยู่

ไวยากรณ์สำหรับการเปิดใช้งานสคริปต์มีดังนี้:

nmap -sC target     #load default scripts
OR
nmap --script filename|category|directory|expression,...   target    

คุณสามารถดูคำอธิบายของสคริปต์ได้ด้วยตัวเลือก --script-help นอกจากนี้ คุณยังสามารถส่งผ่านอาร์กิวเมนต์ไปยังสคริปต์บางตัวได้ผ่านทางตัวเลือก --script-args และ --script-args-file ซึ่งอันหลังจะใช้เพื่อระบุชื่อไฟล์แทนที่จะใช้ หาเรื่องบรรทัดคำสั่ง

หากต้องการสแกนด้วยสคริปต์เริ่มต้นส่วนใหญ่ ให้ใช้แฟล็ก -sC หรือใช้ --script=default ดังที่แสดง

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
ผลลัพธ์ตัวอย่าง
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!

Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds

หากต้องการใช้สคริปต์เพื่อวัตถุประสงค์ที่เหมาะสม ก่อนอื่น คุณสามารถขอคำอธิบายโดยย่อเกี่ยวกับหน้าที่ของสคริปต์ได้จริง เช่น http-headers

nmap --script-help http-headers scanme.nmap.org
ผลลัพธ์ตัวอย่าง
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST

http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
  Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.

กำลังโหลดสคริปต์ NSE เพื่อทำการสแกน Nmap

คุณสามารถเลือกหรือโหลดสคริปต์เพื่อทำการสแกนด้วยวิธีการต่างๆ ที่อธิบายไว้ด้านล่างนี้

การใช้ชื่อสคริปต์

เมื่อคุณรู้ว่าสคริปต์ทำอะไรได้บ้าง คุณสามารถทำการสแกนโดยใช้สคริปต์นั้นได้ คุณสามารถใช้สคริปต์เดียวหรือป้อนรายการชื่อสคริปต์ที่คั่นด้วยเครื่องหมายจุลภาค คำสั่งด้านล่างจะช่วยให้คุณดูส่วนหัว HTTP ที่กำหนดค่าไว้บนเว็บเซิร์ฟเวอร์ที่โฮสต์เป้าหมายได้

nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
| http-headers: 
|   Date: Wed, 15 Nov 2017 05:10:04 GMT
|   Server: Apache/2.4.7 (Ubuntu)
|   Accept-Ranges: bytes
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
179/tcp   filtered bgp
31337/tcp open     Elite

Nmap done: 1 IP address (1 host up) scanned in 20.96 seconds

การใช้หมวดหมู่

คุณยังสามารถโหลดสคริปต์จากหมวดหมู่เดียวหรือจากรายการหมวดหมู่ที่คั่นด้วยเครื่องหมายจุลภาคได้ ในตัวอย่างนี้ เราใช้สคริปต์ทั้งหมดในหมวดหมู่เริ่มต้นและการออกอากาศเพื่อทำการสแกนบนโฮสต์ 192.168.56.1

nmap --script default,broadcast 192.168.56.1

การใช้ * ไวด์การ์ด

สิ่งนี้มีประโยชน์เมื่อคุณต้องการเลือกสคริปต์ที่มีรูปแบบชื่อที่กำหนด ตัวอย่างเช่น หากต้องการโหลดสคริปต์ทั้งหมดที่มีชื่อขึ้นต้นด้วย ssh ให้รันคำสั่งด้านล่างบนเทอร์มินัล:

nmap --script "ssh-*" 192.168.56.1

การใช้นิพจน์บูลีน

คุณยังสามารถเลือกสคริปต์โดยใช้นิพจน์บูลีนซึ่งคุณสามารถสร้างได้โดยใช้ตัวดำเนินการ และ, หรือ และ ไม่ และชื่อในนิพจน์บูลีนอาจเป็นหมวดหมู่ ชื่อไฟล์จาก script.db หรือทั้งหมด

คำสั่งต่อไปนี้จะโหลดสคริปต์จากหมวดหมู่เริ่มต้นหรือหมวดหมู่การออกอากาศ

nmap --script "default or broadcast" 192.168.56.10

ซึ่งเทียบเท่ากับ:

nmap --script default,broadcast 192.168.56.10

หากต้องการโหลดสคริปต์ทั้งหมดโดยไม่อยู่ในหมวดหมู่ vuln ให้รันคำสั่งนี้บนเทอร์มินัล

nmap --script "not vuln" 192.168.56.10

คำสั่งถัดไปดูซับซ้อนเล็กน้อยแต่เข้าใจง่าย โดยจะเลือกสคริปต์ตามค่าเริ่มต้นหรือหมวดหมู่การออกอากาศ ยกเว้นคำสั่งที่มีชื่อขึ้นต้นด้วย ssh-:

nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10

ที่สำคัญ คุณสามารถรวมหมวดหมู่ ชื่อสคริปต์ ไดเร็กทอรีที่มีสคริปต์ที่คุณกำหนดเอง หรือนิพจน์บูลีนเพื่อโหลดสคริปต์ได้ ดังนี้:

nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10

การส่งผ่านอาร์กิวเมนต์ไปยังสคริปต์ NSE

ด้านล่างนี้คือตัวอย่างที่แสดงวิธีส่งอาร์กิวเมนต์ไปยังสคริปต์ด้วยตัวเลือก –script-args:

nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"

หากต้องการส่งหมายเลขพอร์ต ให้ใช้ตัวเลือก -p nmap:

nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \ 
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"

คำสั่งดังกล่าวจะเรียกใช้การตรวจสอบการกำหนดค่าความปลอดภัยของเซิร์ฟเวอร์ฐานข้อมูล MySQL โดยเทียบกับส่วนต่างๆ ของเกณฑ์มาตรฐาน CIS MySQL v1.0.2 คุณสามารถสร้างไฟล์การตรวจสอบแบบกำหนดเองที่เป็นประโยชน์สำหรับการตรวจสอบ MySQL อื่นๆ ได้เช่นกัน

แค่นั้นแหละสำหรับตอนนี้ คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่หน้า Nmap man หรือตรวจสอบการใช้งาน NSE

หากต้องการเริ่มต้นเขียนสคริปต์ NSE ของคุณเอง โปรดดูคู่มือนี้: https://nmap.org/book/nse-tutorial.html

บทสรุป

Nmap เป็นเครื่องมือที่ทรงพลังและมีประโยชน์จริงๆ ที่ผู้ดูแลระบบหรือเครือข่ายทุกคนต้องการในคลังแสงความปลอดภัยของตน NSE เพียงแค่เพิ่มประสิทธิภาพให้กับมันมากขึ้นเท่านั้น

ในบทความนี้ เราได้แนะนำให้คุณรู้จักกับ Nmap Script Engine และดูวิธีค้นหาและใช้สคริปต์ต่างๆ ที่มีอยู่ภายใต้หมวดหมู่ต่างๆ หากคุณมีคำถามใด ๆ อย่าลังเลที่จะเขียนกลับมาหาเราผ่านแบบฟอร์มความคิดเห็นด้านล่าง