pop链详细分析、构造(以[NISACTF 2022]babyserialize为例)
目录
[NISACTF 2022]babyserialize
(一)理清pop链(链尾 链头),标注步骤
1. 先找eval、flag这些危险函数和关键字样(这是链尾)
2.往eval()上面看
3.往$bb()上面看
4.往strtolower()上面看
5.往huang上面看
6.往nisa()上面看
发现需要触发__wakeup()函数,此处即为链头
(二) pop链脚本构造
按照已标注步骤进行
(三)过滤与绕过
1.绕过waf
2. 绕过preg_match正则匹配
[NISACTF 2022]babyserialize
学习参考!!![NISACTF 2022]babyserialize(pop链构造与脚本编写详细教学)-CSDN博客
打开链接需要构造pop链

(一)理清pop链(链尾 链头),标注步骤
1. 先找eval、flag这些危险函数和关键字样(这是链尾)
找到eval()函数,可以利用参数txw4ever,调用系统函数system等实现命令执行

传给谁就标注在谁的后面,这里表示第一步:要传给txw4ever

2.往eval()上面看
发现需要触发__invoke()函数
__invoke():把对象当成函数执行时触发 e.g $a()
故在所有类中找,去找类似$a()的对象函数,发现$bb(),它对应的参数是su

第二步:要调用参数su,传入NISA类

3.往$bb()上面看
发现需要触发__toString()函数
__toString():把对象当成字符串输出触发 e.g echo $a
在所有类中找,发现strtolower()函数:将字符串转换成小写。对应参数 a

第三步: 要调用参数a,传入Ilovetxw类

第四步:此处还存在一个条件,fun="sixsixsix",由于fun属性为private,故直接在类里面修改

4.往strtolower()上面看
发现需要触发__set()函数
__set():给不存在的成员属性赋值时触发
在所有类中找,发现huang调用了fun,但在Ilovetxw类里不存在参数 fun

第五步:要调用参数huang,传入four类

5.往huang上面看
发现需要触发__call()函数
__call():调用不存在的方法触发
在所有类中找,发现nisa(),该类中不存在方法

第六步: 要从$ext属性中调用nisa()方法,传入Ilovetxw类

6.往nisa()上面看
发现需要触发__wakeup()函数,此处即为链头
此函数在类TianXiWei中
__wakeup():字符串被反序列化时触发
至此,我们理清了pop链,并进行了传参的相关标注
(二) pop链脚本构造
按照已标注步骤进行
1.实例化类NISA赋值给a,从中调用参数txw4ever执行RCE(ls /查看根目录)

2.实例化类Ilovetxw赋值给b,从中调用参数su传入NISA类

3.实例化类four赋值给c,从中调用参数a传入Ilovetxw类

4.实例化类Ilovetxw赋值给b,从中调用参数huang传入four类

5.实例化类TianXiWei赋值给d,从中调用参数huang传入Ilovetxw类

6.序列化类TianXiWei并输出

最终pop链:
<?php
class NISA{public $fun="show_me_flag";public $txw4ever; //1 system
}
class TianXiWei{public $ext; //6 Ilovetxwpublic $x;
}
class Ilovetxw{public $huang; //5 fourpublic $su; //2 NISA
}
class four{public $a="TXW4EVER"; //3 Ilovetxwprivate $fun="sixsixsix"; //4 fun="sixsixsix"
}
$a=new NISA();
$a->txw4ever='system("ls /");';
$b = new Ilovetxw();
$b->su = $a;
$c=new four();
$c->a = $b;
$b = new Ilovetxw();
$b->huang = $c;
$d=new TianXiWei();
$d->ext = $b;
echo urlencode(serialize($d));
?>

传入发现只有提示flag在根目录,可直接使用system("cat /flag");读取flag,但存在过滤

(三)过滤与绕过
源码提示 存在两处需要绕过

1.绕过waf
有一个hint()函数,触发就会输出一些提示

让if语句判断不成立(fun=="show_me_flag"不成立)即可绕过这个函数
故 可在对象NISA中 调用fun属性 并重新赋值line

再次传入后发现成功绕过了waf,但还存在正则匹配

2. 绕过preg_match正则匹配

暗示存在关键字的过滤:
使用了正则匹配,但没给匹配的内容,用的......
此处system被过滤掉了,使用会返回 something wrong
flag也被过滤掉了,使用时无回显

故 使用大写字母System、f*分别绕过,得到flag。


(1)System大写绕过:php内置函数名不区分大小写
(2)*号通配符:匹配以f开头的所有字符 f*
相关文章:
pop链详细分析、构造(以[NISACTF 2022]babyserialize为例)
目录 [NISACTF 2022]babyserialize (一)理清pop链(链尾 链头),标注步骤 1. 先找eval、flag这些危险函数和关键字样(这是链尾) 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 …...
使用超声波麦克风阵列预测数控机床刀具磨损
预测性维护是使用传感器数据来推断机器状态,并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势,包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…...
怎么控制多个存储设备的访问权限?数据安全存储方案来了
数据安全存储是指将数据以安全的方式存储在存储系统中,以确保数据的机密性、完整性和可用性。要控制数据安全存储的权限以保障安全,可以采取以下措施: 访问控制列表(ACLs):使用ACLs来定义对存储数据的访问权…...
麒麟系统mate_indicators进程占用内存资源高
一、问题现象 故障现象:环境出现内存溢出 操作系统:KYlin10-SP2 二、问题定位 发现mate-indicators进程占用内存资源达到节点总内存40%,导致服务出现内存熔断 临时解决 systemctl restart lightdm.service systemctl set-default multi-u…...
Docker高级篇之轻量化可视化工具Portainer
文章目录 1. 简介2. Portainer安装 1. 简介 Portianer是一款轻量级的应用,它提供了图形化界面,用于方便管理Docker环境,包括单机环境和集成环境。 2. Portainer安装 官网:https://www.portainer.io 这里我们使用docker命令安装&…...
Vue32-挂载流程
一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意: 此时vue没有_data,即:data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意: 因为没有template选项,所以,整个div root都…...
算法金 | 一个强大的算法模型:t-SNE !!
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种用于降维和数据可视化的非线性算法。它被广泛应用于…...
用IAST工具强化“越权检测”能力,提升系统安全性
什么是越权漏洞 越权漏洞是一种常见的逻辑安全漏洞。越权漏洞指的是攻击者利用系统中的漏洞,获得超过其正常权限的访问权限,执行未授权操作。 越权漏洞主要分为两种类型:水平越权(横向越权)和垂直越权(纵…...
VirtualStudio配置QT开发环境
环境 VirtualStudio2022Qt5.12.10 安装msvc工具链(这一步不是必须的) 打开virtual studio,打开Virtual Studio Installer界面选择要安装的msvc版本,点击安装 安装VirtualStudio扩展 在线安装 打开virtual Studio,…...
Nature发文介绍使用ChatGPT帮助学术写作的三种方式
文章链接:https://www.nature.com/articles/d41586-024-01042-3 一、介绍 这篇文章是由Dritjon Gruda撰写的,讨论了生成性人工智能(AI)在学术写作、编辑和同行评审中的三种应用方式。Gruda认为,尽管学术界对聊天机器…...
【网络安全的神秘世界】Kali 自带 Burp Suite 使用指南:字体与CA证书设置详解等
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali 自带 Burp Suite 使用指南目录 Burp Suite的打开方式设置Burp Suite软件的字体大小查看Burp Suite 默认代理在火狐浏览器…...
【Go】爬虫数据解密_使用Go语言实现TripleDES加密和解密
是你多么温馨的目光 教我坚毅望着前路 叮嘱我跌倒不应放弃 没法解释怎可报尽亲恩 爱意宽大是无限 请准我说声真的爱你 🎵 Beyond《真的爱你》 引言 Triple Data Encryption Standard (TripleDES 或 3DES) 是一种对称加密算法,它通…...
【HarmonyOS NEXT】鸿蒙 如何在包含web组件的页面 让默认焦点有效
页面包含web组件Button组件等,把页面的默认焦点放到Button组件上,不起效果。 因为web组件默认会在组件加载完成后获取焦点; 可以在web的网页加载完成时onPageEnd回调中,将设置默认获焦的组件通过focusControl.requestFocus方法主…...
mysql常用参数配置详解my.cnf my.ini
1.关注生产中高频常用参数 # 数据库时区 log_timestamps = system # 刷盘策略 0,1,2 innodb_flush_log_at_trx_commit # 定义了 InnoDB 用于写日志数据的缓冲区大小。当事务发生时,日志首先被写入这个缓冲区,然后再被刷新(flush)到磁盘上的重做日志文件(redo log file…...
GlusterFS企业分布式存储
GlusterFS 分布式文件系统代表-nfs常见分布式存储Gluster存储基础梳理GlusterFS 适合大文件还是小文件存储? 应用场景术语Trusted Storage PoolBrickVolumes Glusterfs整体工作流程-数据访问流程GlusterFS客户端访问流程 GlusterFS常用命令部署 GlusterFS 群集准备环…...
SSH生成SSH密钥(公钥和私钥)
在设置SSH服务时,生成SSH密钥(公钥和私钥)是一个常见的任务。这些密钥用于安全地进行身份验证,无需输入密码。以下是如何生成SSH密钥的步骤: 1. 生成SSH密钥对 首先,您需要在客户端机器上生成一个SSH密钥…...
阶段性总结:如何快速上手一个新的平台或者技术
作为研发一枚,为了实现客户的各种需求,为了避免重复造轮子,通常需要快速调查到哪个轮子(比如各种平台,或者开发包等)好用,然后快速熟悉和上手。在接触到一个新的平台或者技术的时候,…...
kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数
场景: kettle中http post步骤如何发送http请求且传递body参数? 解决方案: http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口,索性用python搭建一个简单的接口,关键代码如下&#…...
第十二章:会话控制
会话控制 文章目录 会话控制一、介绍二、cookie2.1 cookie 是什么2.2 cookie 的特点2.3 cookie 的运行流程2.4 浏览器操作 cookie2.5 cookie 的代码操作(1)设置 cookie(2)读取 cookie(3)删除 cookie 三、se…...
【LeetCode滑动窗口算法】长度最小的子数组 难度:中等
我们先看一下题目描述: 解法一:暴力枚举 时间复杂度:o(n^3) class Solution { public:int minSubArrayLen(int target, vector<int>& nums){int i 0, j 0;vector<int> v;for (;i < nums.size();i){int sum nums[i];fo…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
