【攻防世界】unseping (反序列化与Linux bash shell)

打开题目环境:

 1、进行PHP代码审计,通过审计得知需要用到PHP反序列化。找到输出flag的位置为 ping()函数。通过使用 exec() 函数来执行 $ip 并将结果保存在 $result 中,最终输出 $result。

2、接着寻找给 $ip 传参的位置,发现通过析构函数 _destruct() 来调用 ping()函数 并给 $ip 传参。

in_array($this->method, array("ping")) 检查 $this->method 的值是否等于 "ping"

若相等则调用 call_user_func_array(array($this, $this->method), $this->args); 它接受两个参数:第一个参数是一个包含类名和方法名的数组,第二个参数是一个包含方法参数的数组。在这个例子中,$this表示当前对象,$this->method表示要调用的方法名,$this->args表示传递给该方法的参数数组。我们只需要让 $this->method = "ping",让 $this->args等于我们想要执行的指令,这个函数就会调用 ping()函数 并将 $this->args 赋值给 $ip。

3、在进行反序列化时会自动调用PHP魔术方法_wakeup()函数。发现_wakeup()函数中调用了 waf()函数对 $ip 中的敏感字符  空格、|、cat、flag、ls等关键查询字符进行了过滤,我们需要考虑绕过的操作。


我们先对 $method 和 $args 进行赋值:

$method = "ping";  //在调用析构函数时调用 ping()函数
$args = array('c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_831b69012c67b35f.p""hp');

注意在 call_user_func_array()函数中的第二个参数 $this->args 的数据类型是一个数组。

在来分析对 $args 中的值的绕过方法:

首先对 $args 赋值:

$args = array('l""s');

通过在 ls 之间插入两个双引号来绕过 对关键字 "ls" 的过滤。

在 HackBar 中用 POST 方法进行提交,得到结果如下图:

使用 ls 查看当前目录下的文件夹和文件,发现文件夹 flag_1s_here 和php文件 index.php。flag很可能在 flag_1s_here中。

对$args重新赋值,查看 flag_1s_here 目录下的子文件:

$args = array('l""s${IFS}f""lag_1s_here');

${IFS} 是一个特殊的变量,用于定义 Bash shell 中字段分隔符的默认值。默认情况下,它的值为空格、制表符、和换行符。

利用 ls flag_1s_here 指令查看flag_1s_here 目录下的子文件,得到结果如下图:

发现了存储flag的文件,现通过再次改变 $args 的值进入 flag_1s_here 对这个文件进行查询。

$args = array('c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_831b69012c67b35f.p""hp');

关于 $(printf${IFS}"/57")的解释如下图:

cat flag_1s_here /flag_831b69012c67b35f.php 查看flag_1s_here目录下的flag_831b69012c67b35f.php文件。

执行结果如下图:

成功拿到 flag。


下图给出序列化脚本:

<?phpclass ease{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}}$test = new ease("ping", array('c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_831b69012c67b35f.p""hp'));//$test = new ease("ping", array('l""s${IFS}f""lag_1s_here'));$new = serialize($test);print(base64_encode($new));echo "\n";print($new);?>

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

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

相关文章

VMware Esxi安装群辉系统

群晖的网络存储产品具有强大的操作系统&#xff0c;提供了各种应用程序和服务&#xff0c;包括文件共享、数据备份、多媒体管理、远程访问等。用户可以通过简单直观的界面来管理他们的存储设备&#xff0c;并且可以根据自己的需求扩展设备的功能。总的来说&#xff0c;群晖的产…

配置vscode用于STM32编译,Debug

配置环境参考&#xff1a; Docs 用cubemx配置工程文件&#xff0c;用VScode打开工程文件。 编译的时候会有如下报错&#xff1a; vscode出现process_begin :CreateProcess failed 系统找不到指定文件 解决方案&#xff1a;在你的makefile中加上SHELLcmd.exe就可以了 参考…

代码随想录算法训练营第三十八天|leetcode377、518题

一、leetcode第518题 该题是完全背包问题&#xff0c;不需要考虑物品放入背包的先后顺序。 具体代码如下&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {vector<int>dp(amount1,0);dp[0]1;for(int i0;i<coins.size(…

云his系统源码 java源码saas模式 二甲医院his系统全套源码 数据库MySQL + MyCat

基层医院云HIS系统源码 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能&#xff0c;还能与公卫、PACS等各类外部系统融合&…

解析企业级验证码的Python实战指南

在本文中&#xff0c;我们将介绍如何使用Python解析企业级验证码&#xff0c;通过分析抓包数据和逆向工程来获取验证参数&#xff0c;并编写实战代码来模拟验证过程。 1. 抓包分析 首先&#xff0c;使用抓包工具&#xff08;例如Fiddler或Wireshark&#xff09;捕获企业级验证…

JavaWeb--JavaScript Part 01

1. JavaScript概述 JavaScript&#xff08;简称JS&#xff09;是一种轻量级的、解释执行的客户端脚本语言&#xff0c;主要用于增强网页的交互性和动态性。它起源于Netscape的LiveScript&#xff0c;并在1995年发布时更名为JavaScript。尽管名称中包含"Java"&#xf…

常用的Linux命令手册

ls - 列出目录内容 用法&#xff1a;ls [options] [location]示例&#xff1a;ls -l /home&#xff08;列出/home目录下的内容&#xff09; cd - 切换目录 用法&#xff1a;cd [directory]示例&#xff1a;cd Documents&#xff08;切换到Documents目录&#xff09; pwd - 显示…

一篇文章让你搞清楚Windows 系统SID;什么是计算机SID,用户SID;查看SID,修改SID!

SID也就是安全标识符(Security Identifiers)&#xff0c;是标识用户、组和计算机帐户的唯一的号码。 在第一次创建该帐户时&#xff0c;将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户&#xff0…

面试算法-143-和为 K 的子数组

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 解 class Solution {public int subarraySum(…

leetcode.707. 设计链表

题目 题意&#xff1a; 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。 addAtHead(val)&#xff1a;在链表的第一个元素之前添加一个值为 val 的节点。插入后&#xff0c;新节点将成为链表的…

CDN撞上云防护:技术视角下的差异与协同作用

引言 随着互联网业务全球化和服务需求的不断增长&#xff0c;内容分发网络&#xff08;CDN&#xff09;和云防护已成为现代企业保障网站性能、安全性和可靠性的关键工具。尽管两者在提升用户体验及确保服务连续性方面都有显著作用&#xff0c;但它们各自的核心技术和应用场景有…

主函数if __name__ == ‘__main__‘:

在Python中&#xff0c;主函数通常指的是脚本的入口点&#xff0c;也就是当你直接运行一个Python脚本时&#xff0c;会首先执行的函数。在大多数Python脚本中&#xff0c;主函数并不是通过main()这样的函数名来定义的&#xff0c;而是通过检查脚本是作为模块导入还是被直接运行…

2024年选择云渲染平台必须注意这5点!看完你就懂了

云渲染平台这么多&#xff0c;你是不是正在为选择哪一家而困惑&#xff1f; 随着云渲染技术的进一步发展&#xff0c;市面上的云渲染平台也越来越多&#xff0c;其中鱼龙混杂的也不在少数。对于设计师和设计公司来说&#xff0c;如何选择一个可靠且适合自己的云渲染平台成为一…

Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置

文章目录 前言相关地址环境配置初始化环境配置文件夹结构代码结构代码运行 资源文件导入像素风格窗口环境设置背景设置,Tileap使用自动TileMap 人物场景动画节点添加站立节点添加移动动画添加 通过依赖注入获取Godot的全局属性项目声明 当前项目逻辑讲解角色下降添加代码位置问…

CTF之GET和POST

学过php都知道就一个简单传参&#xff0c;构造payload:?whatflag得到 flag{3121064b1e9e27280f9f709144222429} 下面是POST那题 使用firefox浏览器的插件Hackbar勾选POST传入whatflag flag{828a91acc006990d74b0cb0c2f62b8d8}

论文阅读AI工具链

文献检索 可以利用智谱清言来生成合适的文献检索式&#xff0c;并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时&#xff0c;您可以使用类似的逻辑来构建您的搜索式&#xff0c;但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索&#xff0c;但是…

vue 动态设置系统在浏览器中的标题title和图标favicon

当系统在浏览器中打开时&#xff0c;浏览器页签会根据主页配置中的title和favicon显示&#xff0c;如何能根据系统配置&#xff0c;动态的更换title和icon呢&#xff1f; vue中的配置 vue项目中默认是在index.html页面上设置的 <!DOCTYPE html> <html lang"en…

[技术闲聊]我对电路设计的理解(十二)-电源纹波测试

一、背景简介 电源测试有多项&#xff0c;譬如负载调整率&#xff0c;电压调整率&#xff0c;纹波测试&#xff0c;瞬态测试等&#xff0c;今天主要想谈谈电源纹波测试。 二、什么是电源纹波&#xff1f; 纹波产生的根源&#xff0c;BUCK电路&#xff0c;DC转DC&#xff0c;高…

用tkinter来实现扫雷游戏

本文使用创作助手。 可以用Tkinter来实现扫雷游戏。下面是一个简单的示例代码&#xff0c;用于展示如何通过Tkinter创建一个基本的扫雷游戏。 import tkinter as tk import random# 创建主窗口 window tk.Tk() window.title("Minesweeper")# 游戏参数 num_rows 1…

分组循环

子数组类问题 子数组&#xff1a; 子数组是指由原数组中连续的一段或多段元素组成的数组。如果有一个数组 A&#xff0c;那么它的子数组 B 是 A 中从某个起始位置 i 到终止位置 j&#xff08;满足 0 < i < j < A.length&#xff09;的所有元素组成的数组&#xff0c;即…