练习 17 Web [极客大挑战 2019]PHP

常见的网站源码备份文件名和后缀,反序列化攻击 unserialize():wakeup绕过,private类以及属性序列化后的%00修改

开靶机
提到”备份“
那看看有没有backup.php啥的

在这里插入图片描述

如果网站存在备份文件,常见的备份文件后缀名有:“.git” 、“.svn”、“ .swp”“.~”、“.bak”、“.bash_history”、“.bkf” 尝试在URL后面,依次输入常见的文件备份扩展名。

常见的网站源码备份文件后缀:
tar.gz,zip,rar,tar

常见的网站源码备份文件名:
web,website,backup,back,www,wwwroot,temp

找到 www.zip,里面一堆文件
在这里插入图片描述
其中class提到会收到username和password
符合username=admin,password=100
就调用flag输出

<?php
include 'flag.php';error_reporting(0);class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){$this->username = $username;$this->password = $password;}function __wakeup(){$this->username = 'guest';}function __destruct(){if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die();}}
}
?>

另一个index.php中间也藏了一段和前端看到不一样的代码:
GET传参,参数是select
有个函数unserialize(),没见过
搜索
UNSERIALIZE——反序列化漏洞
PHP反序列化-__wakeup()方法漏洞(CVE-2016-7124)
极客大挑战 2019 PHP 1
BUUCTF__[极客大挑战 2019]PHP_题解
想起来了。。。

unserialize(): 从已存储的表示中创建 PHP 的值列化后的字符串。
若被反序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup()成员函数(如果存在的话)

常见的魔术方法:

__construct():当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。(构造函数)
__destruct():当对象被销毁时会自动调用。(析构函数)
__wakeup() :如前所提,unserialize()时会自动调用。
__tostring():只要调用了echo 来打印对象体,就回自动调用__tostring()

根据以上内容,重新梳理class.php
首先username,password会在对象被new出来自动生成
public function __construct($username,$password)

其次__wakeup方法会导致username变成’guest‘:function __wakeup(){$this->username = 'guest';
而我们已知输出flag的必要条件是username=’admin‘
所以需要绕过__wakeup方法。

当成员属性数目大于实际数目时可绕过wakeup方法

本题中成员属性数目为2(username,password),所以稍后在序列化字符串中需要修改为3或者更大的数字;

最后,__destruct()方法的触发是销毁时自动调用

根据以上内容,梳理index.php中的这段代码
首先new了一个对象select,这个select我们可以控制传入值
然后new了一个对象res,被赋值为反序列化执行后的

    <?phpinclude 'class.php';$select = $_GET['select'];$res=unserialize(@$select);?>

根据以上内容,得出序列化代码

<?php
class Name{private $username = 'admin';private $password = '100';}$select = new Name();$res=serialize(@$select);   echo $res
?>
O:4:"Name":2:
{s:14:"口Name口username";s:5:"admin";s:14:"口Name口password";s:3:"100";}

这串字符的含义:
变量类型;类名长度;类名;属性变量
{属性类型;属性名长度;属性名;属性值类型;属性值长度;属性值内容}
o 表示object对象
4 表示对象名称有4个字符
Name 对象名称
2 表示只有一个值
s 表示 string 字符串
14 表示test 字符串长度

之前在class中看到Name类是private修饰的:需要注意序列化后的变化,例如’口‘这个在类名和属性名前面的无效符号就必须手动替换为%00,否则它在你输入后会消失;public修饰的话则不需要做任何改动

各访问修饰符序列化后的区别:
public:属性被序列化的时候属性名还是原来的属性名,没有任何改变
protected:属性被序列化的时候属性名会变成%00*%00属性名,长度跟随属性名长度而改变
private:属性被序列化的时候属性名会变成%00类名%00属性名,长度跟随属性名长度而改变

然后记得将属性成员数量Name修改为3
修改好后如下:

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

在这里插入图片描述

flag{eba27cdf-1371-469e-9a02-0231d2db8018}

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

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

相关文章

ExpiringMap使用详解

一、ExpiringMap概述 ExpiringMap项目地址&#xff1a;https://github.com/jhalterman/expiringmap 1、ExpiringMap简介 针对一些小体量的项目&#xff0c;存储的数据量也不是很大&#xff08;如校验码&#xff09;的情况下&#xff0c;使用 Redis会增加系统的复杂性和维护难度…

【论文阅读笔记】Customized Segment Anything Model for Medical Image Segmentation

1.论文介绍 Customized Segment Anything Model for Medical Image Segmentation 医学图像分割的自定义分割模型 2023年 arXiv Paper Code 2.摘要 本文提出SAMed&#xff0c;医学图像分割的一般解决方案。与以往的方法不同&#xff0c;SAMed基于大规模图像分割模型Segment A…

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…

【并发编程系列】使用 CompletableFuture 实现并发任务处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

python买铅笔 2024年3月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析

目录 python买铅笔 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python买铅笔 2024年3月 python编程等级考试级编程题 一、题目要求 1、编…

Bigtable [OSDI‘06] 论文阅读笔记

原论文&#xff1a;Bigtable: A Distributed Storage System for Structured Data (OSDI’06) 1. Introduction Bigtable 是一种用于管理结构化数据的分布式存储系统&#xff0c;可扩展到非常大的规模&#xff1a;数千台服务器上的数据量可达 PB 级别&#xff0c;同时保证可靠…

《QT实用小工具·十七》密钥生成工具

1、概述 源码放在文章末尾 该项目主要用于生成密钥&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #pragma execution_character_set("utf-8")#include "frmmain.h" #include "ui_frmmain.h" #include "qmessag…

js计算器实现

文章目录 1. 演示效果2. 分析思路3. 代码实现 1. 演示效果 2. 分析思路 给每个按钮添加点击事件&#xff0c;使用eval()进行计算。 3. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&q…

低代码革新:软件开发的未来潜力与创新路径探索

过去的一年&#xff0c;挑战与机遇并存。人们一边忧虑市场经济下行所带来的新的增长难题、裁员危机&#xff0c;一边惊叹于AIGC、量子技术等领域不断涌现新的创新成果。 时代发生了改变&#xff0c;传统“互联网”的模式已走入尾声&#xff0c;新一轮的科技革命与产业变革正在到…

学习 MongoDB:打开强大的数据库技术大门

一、基本概念 MongoDB 是一个基于分布式文件存储的文档数据库&#xff0c;由 C 语言编写。它旨在为 Web 应用提供可扩展的高性能数据存储解决方案。 相信MySQL我们非常的熟悉&#xff0c;那么MySQL的表结构与MongoDB的文档结构进行类比的话可能更好理解MongoDB。 MySQL的数据…

Windows下Docker安装Kafka3+集群

编写 docker-compose.yaml 主要参照&#xff1a;https://www.cnblogs.com/wangguishe/p/17563274.html version: "3"services:kafka1:image: bitnami/kafka:3.4.1container_name: kafka1environment:- KAFKA_HEAP_OPTS-Xmx1024m -Xms1024m- KAFKA_ENABLE_KRAFTyes- K…

类和对象(上)

目录 类的定义&#xff1a; 类的访问限定符及封装&#xff1a; 访问限定符&#xff1a; 封装&#xff1a; 类的作用域&#xff1a; 类的实例化&#xff1a; ​编辑 类对象模型&#xff1a; 类对象的大小与存储方式&#xff1a; this指针&#xff1a; this指针的引出&…

《债务与国家的崛起》西方民主制度的金融起源 - 三余书屋 3ysw.net

债务与国家的崛起&#xff1a;西方民主制度的金融起源 你好&#xff0c;今天我们来聊聊由英国知名经济与金融历史学家詹姆斯麦克唐纳所著的《债务与国家的崛起》这本书。19世纪世界历史上发生了一次巨变&#xff0c;即“大分流”。当时西方通过工业革命实现了科技和经济的飞速…

vue项目入门——index.html和App.vue

vue项目中的index.html文件 在Vue项目中&#xff0c;index.html文件通常作为项目的入口文件&#xff0c;它包含了Vue应用程序的基础结构和配置。 该文件的主要作用是引入Vue框架和其他必要的库&#xff0c;以及定义Vue应用程序的启动配置。 import Vue from vue import App …

以动态库链接库 .dll 探索结构体参数

Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客 两步之后&#xff0c;尝试加入结构体实现整体数据使用。 注意结构体 Ak 是相同的 代码如下 DLL文件有两个&#xff0c;dll.dll是上面提到…

数据可视化高级技术Echarts(快速上手柱状图进阶操作)

目录 1.Echarts的配置 2.程序的编码 3.柱状图的实现&#xff08;入门实现&#xff09; 相关属性介绍&#xff08;进阶&#xff09;&#xff1a; 1.标记最大值/最小值 2.标记平均值 3.柱的宽度 4. 横向柱状图 5.colorBy series系列&#xff08;需要构造多组数据才能实现…

撸代码时,有哪些习惯一定要坚持?

我从2011年开始做单片机开发&#xff0c;一直保持以下撸代码的习惯。 1.做好代码版本管理 有些人&#xff0c;喜欢一个程序干到底&#xff0c;直到实现全部的产品功能&#xff0c;我以前做51单片机的项目就是这样。 如果功能比较多的产品&#xff0c;我不建议这样做&#xff0…

【Linux】指令

1. 简单指令 whoami 显示当前登入账号名 ls /home 现在有的用户名 adduser 用户名 新加用户&#xff08;必须在root目录下&#xff09; passwd 用户名 给这个用户设置密码 userdel -r 用户名 删除这个用户 pwd 显示当前所处路径 stat 文件名 / 文件夹名 显示文件状…

鸿蒙HarmonyOS 与 Android 的NDK有什么不一样?

1. 序言 就像开发Android要用Android Studio一样&#xff0c;Android Studio&#xff08;简称AS&#xff09;其实是基于IDEAgradle插件android插件开发而来。 鸿蒙系统&#xff0c;你可以认为它和android有点像&#xff0c;但又是超越android的存在&#xff0c;除了手机&…

《C语言深度解剖》(2):详解C语言分支语句和循环

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…