一、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)。
===