[安全] netcat和socat的使用


一、netcat

1.安裝netcat(nc)

yum install nmap-ncat -y

在debian(kali linux)下安裝的話使用:

apt install ncat -y

但安裝nmap時都會自動安裝nc。

2.nc的基本使用

1)使用nc連接端口

nc -vn 104.192.80.196 80
nc -v pop3.163.com 110

其中-v表示顯示詳細信息,-n表示不使用DNS解析(后面跟IP地址)。

2)使用nc發送http請求

root@kali:~# echo -e "GET / HTTP/1.0\r\nHost: 104.192.80.196\r\n\r\n" | nc 104.192.80.196 80                 
HTTP/1.1 200 OK
Date: Fri, 17 Apr 2020 03:53:02 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 14 Apr 2020 23:49:50 GMT
ETag: "11-5a348daf78e58"
Accept-Ranges: bytes
Content-Length: 17
Connection: close
Content-Type: text/html; charset=UTF-8

<h1>Test...</h1>

注意空行,否則會失敗。

請求百度首頁:

echo -e "GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n" | nc www.baidu.com 80      

3)交互式請求

root@kali:~# nc -C -v 104.192.80.196 80
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Connected to 104.192.80.196:80.
GET / HTTP/1.0 Host: 104.192.80.196

HTTP/1.1 200 OK
Date: Fri, 17 Apr 2020 04:46:32 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 14 Apr 2020 23:49:50 GMT
ETag: "11-5a348daf78e58"
Accept-Ranges: bytes
Content-Length: 17
Connection: close
Content-Type: text/html; charset=UTF-8

<h1>Test...</h1>

-C表示換行時使用"\r\n"。

3.使用nc進行socket連接(數據傳輸)

1)實驗

A機器執行:

nc -l -p 4444

創建一個socket服務,監聽4444端口。

B機器執行:

[root@centos7-devel ~]# nc -nv 192.168.4.146 4444
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.4.146:4444.
hello

192.168.4.146是A機器的IP,這里用B機器連接4444端口建立TCP連接,然后發送hello給A機器。

可以看到A機器的結果: 

root@kali:~# nc -l -p 4444
hello

A機器已經接收到了B機器發送的"hello"信息。

反過來,從B機器發送信息給A機器,A機器也能正確接收。相當於AB之間建立了一個socket連接。

2)基於nc的數據傳輸有什么用

可以用於電子取證,我們要進行電子取證的時候,應該盡可能的不要在被審計的機器上保存數據(避免覆蓋硬盤上的證據數據)。

這時,我們可以將取證到的數據通過nc直接發送給遠程服務器。

例如在A機器上監聽了4444端口:

nc -l -p 4444

在B機器上將獲取的數據傳遞給A:

ls -l | nc -nv 192.168.4.146 4444

這里假設ls -l是獲取到的取證數據。

實例:

收集B機器當前的所有進程信息,傳遞給A機器,並保存下來。

# A機器(接收方)
nc -l -p 4444 > ps.txt
# B機器(發送方)
ps -ef | nc -nv 192.168.4.146 4444

收集B機器的lsof信息(已打開文件信息):

# B機器
lsof | nc -nv 192.168.4.146 4444

3)將nc作為文件傳輸工具

# A機器(接收方)
nc -lp 4444 > 1.mp4
# B機器(發送方)
nc -nv 192.168.4.146 4444 < 1.mp4

可以實現類似scp等工具的文件傳輸功能。

或者,反向從A傳輸給B:

# A機器(發送方)
nc -q 1 -lp 4444 < 2.mp4
# B機器(接收方)
nc -nv 192.168.4.146 4444 > 2.mp4

傳遞目錄(通過壓縮包傳輸):

# A機器(發送方),將目錄打包成文件交給nc
tar -cvf - music/ | nc -lp 4444
# B機器(接收方),將接收的文件交給tar解包
nc -nv 192.168.4.146 4444 | tar -xvf -

4)遠程克隆硬盤

# A機器(接收方),將接收的數據全部寫到分區中
nc -lp 4444 | dd of=/dev/sdb1
# B機器(發送方),將某個設備的數據全部發送到A機器
dd if=/dev/sda | nc -nv 192.168.4.146 4444

這樣就可以實現硬盤數據的遠程備份,可以保證電子取證的數據安全。

4.nc進行端口掃描

nc -nvz 104.192.80.196 80

特別注意,這里的-z是只報告連接信息(端口是否開啟)。

注意,這里使用的nc版本如下:

[root@centos7-test ~]# nc --version
Ncat: Version 7.50 ( https://nmap.org/ncat )

這個版本的nc不支持端口范圍掃描,所以可能需要通過shell腳本來實現多端口掃描。

 

二、socat

socat全程為Socket Cat,可以看成是netcat的加強版。

參考資料:https://www.hi-linux.com/posts/61543.html

1.socat進行tcp連接

[root@centos7-test ~]# echo -e "GET / HTTP/1.0\r\nHost: 104.192.80.196\r\n\r\n" | socat - TCP:104.192.80.196:80
HTTP/1.1 200 OK
Date: Fri, 17 Apr 2020 06:37:19 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 14 Apr 2020 23:49:50 GMT
ETag: "11-5a348daf78e58"
Accept-Ranges: bytes
Content-Length: 17
Connection: close
Content-Type: text/html; charset=UTF-8

2.使用socat進行數據傳輸

和nc很類似:

# A機器
root@kali:~# socat TCP-LISTEN:7000 -
# B機器
[root@centos7-test ~]# socat - TCP:192.168.4.146:7000 
hello

B機器發送"hello",A機器可以正確收到hello。

3.通過socat實現NAT,內外網端口映射

假設A機器連接公網和內網。B機器只有內網。

如果我們想將B機器的某個端口映射到公網上,則可以進行如下配置:

# A機器
socat tcp-listen:1234 tcp-listen:3389
# B機器
socat tcp:192.168.4.55:1234 tcp:192.168.1.34:3389

假設A機器內網地址為192.168.4.55,B機器內網地址為192.168.4.34。

這樣配置,相當於如下圖所示:

 

可以看到,A主機的socat監聽了3389和1234兩個端口,而B主機的socat連接了A主機的1234端口和自己的3389端口。訪問A主機的3389端口的數據(公網)會被轉發到B主機的3389端口(內網)。而從B主機3389端口(內網)發出的數據,也會轉發到A主機的3389端口(公網)。

通過以上過程,就實現了一個簡單的端口映射(內網穿透)。但還是推薦使用專業的內網穿透工具FRP(https://mp.weixin.qq.com/s/8HeeDC5x5xozElN8GzQLLw)。

 

 

 

 

 

===

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM