Skip to main content

Cách sử dụng Nmap để scan Port trên Kali Linux

Port là gì ?

Có rất nhiều lớp trong mô hình mạng nói chung, lớp vận chuyển đóng vai trò cung cấp các thông tin liên lạc giữa các ứng dụng hệ thống với nhau, và lớp này thì được kết nối với Port (Cổng).

Một số điều lưu ý mà bạn cần biết về port

- Port là một số hiệu ID cho 1 ứng dụng nào đó.
- Mỗi ứng dụng chỉ có thể chạy trên một hoặc nhiều port và mang tính độc quyền, không có ứng dụng khác được chạy chung.
- Chính vì tính độc quyền nên các ứng dụng có thể chỉnh sửa để cho phép chạy với một port khác.
- Port cũng có phân chia làm Internal và External .
- Số hiệu từ 1->65535.

Một số thuật ngữ mà bạn cần nắm rõ


  • Port: Là một địa chỉ mạng thực hiện bên trong hệ điều hành giúp phân biệt các traffic khác nhau của từng ứng dụng riêng lẻ
  • Internet Sockets: Là một tập tin xác định địa chỉ IP gắn kết với port, nhằm để xử lý dữ liệu như các giao thức.
  • Binding: Là quá trình mà một ứng dụng hoặc dịch vụ (service) sử dụng Internet Sockets để xử lý nhập và xuất các dữ liệu
  • Listen: Ám chỉ việc "lắng nghe" đợi chờ khi bạn thực hiện Binding đến một port / giao thức / IP nào đó. Hiểu nôm na là chờ đời dữ liệu gửi về từ phía bên máy chủ
  • Port Scanning: Port Scanning là quá trình cố gắng để kết nối với một port để có thể thu thập thông tin về các port đang mở và những dịch vụ, ứng dụng, hệ điều hành phía sau nó

Cổng thì được xác định từ số 1 đến số thứ 65535. Trong đó 
  1. Những cổng từ 1->1024 được kết hợp với các dịch vụ của hệ điều hành Linux và Unix, những cổng này bạn cần phải có quyền Root để có thể khởi chạy dịch vụ
  2. Những cổng từ 1024 -> 49151 là những cổng bạn có thể 'đăng kí' đến IANA, việc đăng kí không mấy khó khăn, bạn có thể thoải mái sử dụng những cổng này khi đăng kí hoàn tất
  3. Những cổng từ 49152 -> 65535 là những cổng không thể 'đăng kí', và những cổng này chỉ sử dụng cho mục đích cá nhân mà thôi, không thể kết nối thành mạng lưới được

Một số Port (cổng) thông dụng trong internet:

  1. Cổng 80: Khi một người sử dụng địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80 theo mặc định cho những trang Web.
  2. Cổng 81: Khi một người sử dụng nhập địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80. Nếu Cổng thì bị tắc nghẽn, Cổng 81 được sử dụng như một Cổng xen kẽ cho một website hosting nào đó.
  3. Cổng 20: Dùng để vận chuyển dữ liệu FPT
  4. Cổng 21: Khi người nào đó thử nối tới dịch vụ FTP của các bạn, khách hàng FTP sẽ cố gắng kết nối trên Cổng 21 theo mặc định. Thì cổng 21 mở cho những khách FTP đăng nhập và nối tới server của các bạn
  5. Cổng 22: Nếu bạn chạy một SSH Secure Shell, cổng này được yêu cầu cho Khách hàng SSH để nối tới người phục vụ của các bạn.
  6. Cổng 23 :Nếu bạn Telnet, cổng này được yêu cầu cho Khách hàng Telnet đến server. Telnet có thể được sử dụng cho những cổng khác để kiểm tra những công tác dịch vụ, nhưng để sử dụng telnet cho admin và đăng nhập từ xa thì cổng 23 phải mở.
  7. Cổng 25: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ đi tới server của bạn trên Cổng 25. Đây là tiêu chuẩn SMTP (thủ tục vận chuyển Thư từ)
  8. Cổng 2525: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ để đi vào tới server của các bạn trên Cổng 25. Cổng 2525 xen kẽ được dùng bởi TZO cho những công tác lưu trữ và truyền lại. Đây là một cổng không tiêu chuẩn, nhưng sẻ hữu ích nếu SMTP (thủ tục vận chuyển Thư từ) bị tắc nghẽn
  9. Cổng 43: Dùng để Whois tên miền
  10. Cổng 53: Dùng để DNS
  11. Cổng 67: Cổng của DHCP server
  12. Cổng 68: Cổng của DHCP client
  13. Cổng 110: Khi bạn chạy một máy tính, những người sử dụng sẽ vào theo đường POP3 (Nghi thức cơ quan bưu điện) hay IMAP4 (giao thức truy nhập Thông báo Internet) khôi phục thư từ của họ. POP3 là nghi thức tốt nhất để truy nhập những hòm thư
  14. Cổng 113: Dùng cho các mạng IRC
  15. Cổng 119: Khi bạn chạy một server Tin tức, điển hình những khách hàng Tin tức muốn nối tới người phục vụ. Tin tức của các bạn sẽ nối trên cổng 119. Cái này chuyển những nhu cầu để mở để chạy server tin tức.
  16. Cổng 143 : IMAP4 hay giao thức truy nhập Thông báo Internet đang trở nên phổ biến hơn và được sử dụng để khôi phục Thư Internet từ một server từ xa. Từ đó tất cả các thông báo đều được cất giữ trên server, Nó dùng để sử dụng trực tuyến, ngoại tuyến và offline
  17. Cổng 161: SNMP
  18. Cổng 194: IRC
  19. Cổng 389 : LDAP hay giao thức truy nhập Thư mục Lightweight đang trở nên phổ biến cho sự Truy nhập Thư mục
  20. Cổng 587: Cũng là cổng SMTP
  21. Cổng 631: Cổng CUPS printing daemon
  22. Cổng 666: Cổng riêng và duy nhất của game DOOM
  23. Cổng 443 : Cổng được dùng để kết nối các dịch vụ an toàn HTTPS
  24. Cổng 1503 & 1720 :MS NetMeeting và VOIP cho phép bạn kết nối tới host Internet nhằm phục vụ các cuộc họp trực tuyến. NetMeeting là một sản phẩm tự do mà bạn có thể tìm thấy trên Website Microsoft Tại địa chỉ http://www.microsoft.com/
  25. Cổng 3389: Cổng 3389 được sử dụng cho Windows. Nếu bạn muốn từ xa kết nối tới máy tính của bạn để điều khiển từ xa, thì yêu cầu cổng 3389 phải mở.
  26. Cổng 5590: Khi bạn chạy một Server VNC từ xa để kiểm soát PC của các bạn, nó sẽ sử dụng cổng 5900.
  27. Cổng 5631: Cổng này cũng được dùng để remote các máy tính từ xa

Để kiểm tra xem máy tính của bạn đang mở những port nào thì dùng lệnh sau:

netstat -plunt
 
 

Nmap là gì ?
  • Nmap (Network Mapper) là một công cụ quét, theo dõi và đánh giá bảo mật một hệ thống mạng được phát triển bởi Gordon Lyon.
  • Nmap được công bố lần đầu tiên vào tháng 9 năm 1997.
  • Nmap là phần mềm mã nguồn mở miễn phí, ban đầu chỉ được phát triển trên nền tảng Linux sau đó được phát triển trên nhiều nền tảng khác nhau như Windows, Solari, Mac OS… và phát triển thêm phiên bản giao diện người dùng (zenmap).

Các chức năng của nmap: 
  • Phát hiện host trong mạng.
  • Liệt kê các port đang mở trên một host.
  • Xác định các dịch vụ chạy trên các port đang mở cùng với phần mềm và phiên bản đang dùng.
  • Xác đinh hệ điều hành của thiết bị.
  • Chạy các script đặc biệt.

Hướng dẫn Scan port với NMap

Sử dụng nmap

+ Xác định mục tiêu

Việc đầu tiên khi sử dụng nmap là xác định mục tiêu cần quét, mục tiêu có thể là 1 domain, 1 IP, 1 dải địa chỉ IP, 1 danh sách (file) các IP và domain. Ví dụ:

Quét 1 IPnmap 192.168.0.1
Quét 1 dải IPnmap 192.168.0.1/24
Quét 1 domainnmap facebook.com
Quét 1 danh sách các mục tiêu từ 1 file với tùy chọn -iL: nmap -iL filelist.txt

Các lệnh phổ biến trong Nmap

1, Quét hệ điều hành của Server

nmap -O remote_host

Nếu server báo down , thì bạn sử dụng lệnh sau

nmap -PN remote_host

Sử dụng "-" hoặc "/24" để quét nhiều host / server cùng lúc

nmap -PN xxx.xxx.xxx.xxx-yyy

2, Quét một mạng rộng hơn

nmap -sP network_address_range

3, Quét mà không tra cứu DNS (Điều này sẽ giúp bạn quét nhanh hơn)

nmap -n remote_host

4, Quét một port cụ thể thay vì quét chung các port thông dụng

nmap -p port_number remote_host

5, Quét kết nối TCP, Nmap sẽ thực hiện việc quét bắt tay 3 bước

nmap -sT remote_host

6, Quét kết nối UDP

nmap -sU remote_host

7, Quét TCP và UDP từng port (Khá lâu để hoàn tất)

nmap -n -PN -sT -sU -p- remote_host

8, Quét TCP SYN scan (-sS):

nmap -sS remote_host

9, Quét vời các cờ -sN, -sF, -sX

nmap -PN -p port_number -sN remote_host

10, Quét xác định phiên bản của dịch vụ đang chạy trên host

nmap -PN -p port_number -sV remote_host

Chi tiết về các kĩ thuật quét

TCP SYN scan (-sS): nmap gửi một gói tin TCP-SYN tới 1 port của mục tiêu. Nếu nhận được ACK_SYN thì port đó đang ở trạng thái open, nmap sẽ gửi gói tin RST để đóng kết nối thay vì gửi ACK để hoàn tất quá trình bắt tay 3 bước (vì thế kỹ thuật này còn được gọi là half open scan). Nếu nhận được RST thì port đó ở trạng thái close. Nếu sau 1 số lần gửi mà không nhận được trả lời hoặc nhận được ICMP type 3 (unreachable error) thì port đó ở trạng thái filtered (đã bị firewall chặn).

TCP connect scan (-sT): Kỹ thuật này cho kết quả tương tự như TCP SYN scan, nếu nhận được ACK-SYN nmap sẽ gửi gói tin ACK để hoàn tất quá trình bắt tay 3 bước. TCP connect scan được dùng khi user không có quyền truy cập raw packet để thực hiện SYN scan (thường thì với quyền root trên linux mới có thể sử dụng SYN scan). TCP connect scan sẽ sử dụng TCP stack của hệ điều hành để tạo ra 1 kết nối bình thường với mục tiêu, do thực hiện 1 kết nối đầy đủ nên kỹ thuật này dễ bị phát hiện bởi hệ thống log của mục tiêu do đó SYN scan thường được sử dụng nhiều hơn để tránh bị phát hiện.

UDP scan (-sU): nmap gửi gói tin UDP tới 1 port của mục tiêu nếu nhận được gói tin ICMP port unreachable error (type 3, code 3) thì port đó ở trạng thái close. Nếu nhận được ICMP unreachable errors (type 3, codes 1, 2, 9, 10, or 13) thì port đó ở trạng thái filtered. Nếu không nhận được gì thì port ở trạng thái open|filtered. Nếu nhận được gói tin UDP thì port đó ở trạng thái open

TCP NULL, FIN, and Xmas scans (-sN, -sF, -sX): đây là kỹ thuật sư dụng các gói tin TCP với không có cờ nào được bật cờ FIN được bật cờ FIN, PSH và URG được bật 3 kỹ thuật này được gộp chung vào 1 nhóm vì chúng cho kết quả giống nhau. Khi 3 loại gói tin này được gửi đi nếu nhận được RST thì port ở trạng thái close, nếu nhận được các loại gói tin ICMP (type 3, code 1, 2, 3, 9, 10, or 13) thì port ở trạng thái filtered, còn nếu không nhận được gói tin trả lời thì port ở trạng thái open|filtered

Ngoài ra nmap còn có 1 số tùy chọn với các kỹ thuật khác nâng cao (-sY,-sM, -sO, -sZ, -sI) có thể tham khảo thêm tại http://nmap.org/book/man-port-scanning-techniques.html

+ Lựa chọn port và thứ tự quét. Mặc định nmap sẽ quét 1000 port phổ biến nhất (xem tại file nmap-service) với thứ tụ ngẫu nhiên.

Tùy chọn –p : lựa chọn chính xác các port cần quét, nếu quét đồng thời nhiều giao thức thì thêm các chữ cái đứng trước số port

T: TCP, U: UDP, S: SCTP, or P: IP Protocol.

Trong trường hợp này nmap sẽ quét các port UDP 53 và 4000, quét các port TCP 444, từ 1 đến 100, từ 8000 đến 8010 bằng kỹ thuật SYN scan.

Tùy chon –F (Fast scan): nmap quét 100 port phổ biến nhất thay vì mặc định 1000 port.

Tùy chọn –top-ports : quét n port phổ biến nhất.

Tùy chọn –r: thứ tự quét các port từ thấp lên cao thay vì mặc định là ngẫu nhiên.

+ Xác đinh dịch vụ, phiên bản, hệ điều hành. Mặc định sau khi quét các port, nmap sẽ xác định dịch vụ đang chạy trên các port dựa vào file nmap-services (các port mặc định của từng service) tuy nhiên một số server cấu hình các dịch vụ không chạy trên các cổng mặc định. Để xác định rõ port nào chạy dịch vụ nào nmap sử dụng tùy chọn –sV. Với tùy chọn này nmap sẽ xác định được dịch vụ và phiên bản phần mềm chạy trên từng port dựa vào banner khi kết nối với port đó

+ Nmap hỗ trợ chạy các script đặc biệt:

Nmap Scripting Engine (NSE) là một trong những chức năng linh hoạt và mạnh mẽ nhất của Nmap. Nó cho phép người dùng viêt và chia sẻ những đoạn script đơn giản để thực hiện những công việc khác nhau trong lĩnh vực networking một cách tự động. Những đoạn script có thể sử dụng để phát hiện các lỗ hổng, thậm chí khai thác các lỗ hổng. Các script (.nse file) nằm trong thư mục script khi cài đặt nmap, người dùng có thể tùy biến chỉnh sửa, thêm các scirpt khác. Để thực hiện chức năng này của nmap sử dụng tùy chọn

–script |||[,…]

+ Lưu lại kết quả quét

Cuối cùng Nmap cho phép người dùng có thể lưu lại kết quả quét của mình dưới dạng text hoặc xml (có thể dùng kết quả làm đầu vào cho một số công cụ khác) với các tùy chọn:

-oN (normal output)

-oX (xml output)

Trên đây là những kiến thức cơ bản về việc sử dụng công cụ Nmap trên Kali Linux. 
Mong các bạn thấy bài viết hữu ích !

Comments

Popular posts from this blog

Sử dụng react-bootstrap-table trong ReactJS

Xin chào các bạn ! Hôm nay mình xin giới thiệu các bạn về một library của JS đó chính là react-bootstrap-table. Như cái tên đã nói lên tất cả công việc của nó là gì rồi nhỉ, haha. Về mặt cá nhân mình thì thấy nó khá hay trong việc xây dựng lên 1 hệ thống các table với tốc độ phải nói là "Quá nhanh quá nguy hiểm".  Không nói nhiều nữa bắt đầu thôi nào ! Các bạn có thể xem qua nó tại địa chỉ của nó tại github:  https://github.com/AllenFang/react-bootstrap-table Về cơ bản tài liệu của nó cũng rất dễ để sử dụng, các bạn chỉ cần làm theo hướng dẫn của nó là đã có thể tự mình tạo ra được rồi. :) Để sử dụng library này kết hợp với ReactJS   thì tất nhiên các bạn phải install React trước rồi, sau đó các bạn download library react-bootstrap-table về bằng cách download file zip hoặc sử dụng git như sau: $ git clone https://github.com/AllenFang/react-bootstrap-table.git $ cd react-bootstrap-table $ npm install Sau đó chỉ cần npm start là đã có thể xem được các ví dụ củ...

Google Hacking - Kiến thức cơ bản mà Pentester thường bỏ qua!

Mình để ý thấy có nhiều bạn đang bị lu mờ giữa 2 khái niệm Pentest và Hacking. Thực sự thì cũng sẽ khó có thể phân biệt rõ ràng nhưng "Hacking" là cụ từ bạn sẽ sử dụng khi bạn tìm thấy lổ hổng ( cả về lổ hổng logic và lổ hổng đến từ tech ) và khai thác được lổ hổng đó. Còn Pentest theo mình thì chỉ là kiểm tra đánh giá tính bảo mật của một hệ thống hoặc một server nào đó thôi. OK! Bắt đầu với chủ đề mà mình đề cập tới sau đây. Có nhiều bạn trẻ hỏi mình: "Làm sao để có thể nhanh chóng tìm được lỗi từ ứng dụng web?". Câu trả lời của mình là:"Hãy bắt đầu với Google Hacking." Google Hacking là một thuật ngữ mà gói gọn một loạt các kĩ thuật cho phép truy vấn trên công cụ tìm kiếm Google.com, đôi khi được dùng để xác định các lổ hổng trong các ứng dụng web cụ thể.(Cụ thể như thế nào thì mình sẽ cố gắng giải thích tiếp trong giới hạn kiến thức mà mình biết). Bên cạnh việc truy vấn từ google có thể tiết lộ các lỗ hổng trong các ứng dụng web, Go...