[安全] 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