内网端口转发利器:Sharp4TranPort使用指南
字数 1003 2025-08-22 12:22:54
Sharp4TranPort 内网端口转发工具使用指南
工具概述
Sharp4TranPort 是一款基于 .NET 开发的高效内网端口转发工具,主要用于在内网渗透测试中绕过防火墙和网络隔离限制。该工具通过创建本地与远程主机之间的隧道,实现服务端口的转发,使攻击者能够访问受保护的内网服务。
核心功能
- 实现本地端口到远程主机端口的 TCP 数据转发
- 支持双向数据传输
- 提供稳定的 TCP 协议转发传输
- 简单易用的命令行界面
基本用法
端口转发命令格式
Sharp4TranPort.exe -a pf -lp [本地端口] -rh [远程主机IP] -rp [远程端口]
参数说明
| 参数 | 全称 | 描述 |
|---|---|---|
| -a pf | action port forwarding | 指定操作类型为端口转发 |
| -lp | local port | 指定本地监听端口 |
| -rh | remote host | 指定远程主机IP地址 |
| -rp | remote port | 指定远程主机端口 |
使用示例
将本地8899端口转发到远程主机192.168.101.86的3389端口(RDP):
Sharp4TranPort.exe -a pf -lp 8899 -rh 192.168.101.86 -rp 3389
执行后,访问本地的8899端口即可连接到远程主机的3389端口。
技术实现原理
核心类与方法
- Start方法
- 初始化转发配置
- 创建Tran对象并设置参数
- 启动端口监听
public static void start(int lport, string rehost, int report) {
Tran tran = new Tran {
inputConn_Port = lport,
outputConn_Host = rehost,
outputConn_Port = report
};
Console.WriteLine(string.Concat(new string[] {
"[*]: ", DateTime.Now.ToString("[HH:mm:ss.fff]"),
"开始监听转发:", lport.ToString(), "-->", rehost, ":", report.ToString()
}));
tran.StartLinstening();
}
- StartLinstening方法
- 在指定端口开始监听
- 使用回调处理连接请求
public void StartLinstening() {
TcpHelp.Listening(this.inputConn_Port, new OnConnected(this.OnInputConnected), null);
}
- OnInputConnected方法
- 处理新连接
- 建立与远程主机的连接
- 创建双向数据桥接
private void OnInputConnected(TcpClient inputClient) {
try {
string RemoteEndPoint = inputClient.Client.RemoteEndPoint.ToString();
TcpClient outputClient = new TcpClient();
outputClient.Connect(this.outputConn_IPAddress, this.outputConn_Port);
bool flag = TcpHelp.Bridge(inputClient, outputClient);
if (flag) {
Console.WriteLine(string.Concat(new string[] {
"[+]: ", DateTime.Now.ToString("[HH:mm:ss.fff]"),
"转发成功:", this.inputConn_Port.ToString(), "-->",
this.outputConn_IPAddress?.ToString(), ":", this.outputConn_Port.ToString()
}));
}
} catch {...}
}
桥接机制实现
工具使用TcpHelp.Bridge方法实现两个TCP连接之间的双向数据传输:
public static bool Bridge(TcpClient clientA, TcpClient clientB) {
// 创建两个独立Task实现双向数据传输
new Task(delegate {
try {
using (NetworkStream reader = clientA.GetStream()) {
using (NetworkStream writer = clientB.GetStream()) {
byte[] buffer = new byte[1024];
while(true) {
int size = reader.Read(buffer, 0, buffer.Length);
if (size > 0) {
writer.Write(buffer, 0, size);
} else if (!TcpHelp.TcpClientIsConnected(clientA, 500)) {
break;
}
}
}
}
} catch {...}
}).Start();
// 反向传输Task
new Task(delegate {
try {
using (NetworkStream reader = clientB.GetStream()) {
using (NetworkStream writer = clientA.GetStream()) {
byte[] buffer = new byte[1024];
while(true) {
int size = reader.Read(buffer, 0, buffer.Length);
if (size > 0) {
writer.Write(buffer, 0, size);
} else if (!TcpHelp.TcpClientIsConnected(clientB, 500)) {
break;
}
}
}
}
} catch {...}
}).Start();
return true;
}
使用场景
- 远程桌面访问:转发内网主机的RDP端口(3389)到本地
- Web服务访问:转发内网Web服务(80/443)到本地
- 数据库访问:转发内网数据库服务(1433,3306等)到本地
- 其他TCP服务:SSH、FTP、SMB等服务的端口转发
注意事项
- 需要足够的权限运行该工具
- 防火墙设置可能会影响转发效果
- 长时间保持连接可能会被网络监控设备检测
- 仅限合法授权测试使用
总结
Sharp4TranPort 通过简洁的代码实现了高效的端口转发功能,其核心在于:
- 本地端口监听
- 远程连接建立
- 双向数据桥接
这种实现方式使得工具体积小、效率高,非常适合在内网渗透测试中使用。理解其工作原理也有助于安全人员更好地防御此类转发攻击。