SharkCTF2021 bbpop题记
一道挺好的web。
做完这一题,感觉php序列化(甚至魔术方法)之类的有点开始玩明白了。
题面很长:




预备知识:
PHP类的方法中,有一部分以下划线开头的“魔术方法”。不同于普通方法的 被调用才会执行,魔术方法在满足某些条件时会自动执行。
__construct()在使用new声明对象时会自动执行;
__destruct()在对象被释放(unset或在程序结束时自动释放)时自动执行;
__wakeup()在对象被成功unserialize时自动执行;
__sleep()在对象被serialize时自动执行;
__toString()在对象被当作字符串使用时自动执行;
这里特别解释一下,“对象被当作字符串使用”是指对象被作为一个函数或方法的参数,而该参数本来限定为字符串类型。
emmmm因为PHP弱类型的原因,我对这个理解也不是特别清楚。直接举例:
echo new 类名(); 会触发__toString(),因为echo可以输出字符串但不能直接输出对象。
addslashes($xxx); 当$xxx是对象时会触发__toString(),因为addslashes本应操作字符串的。
__call()在调用不存在的方法时被调用。本题里,就可以看到经典的__call()触发实例。
addslashes在字符串中的单引号、双引号、反斜杠和NULL之前添加反斜杠。
默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
分析本题,我们的最终目标,是进入Admin::login且相关变量符合条件;
要这样,我们必须借助Admin::__toString()
如何进入呢?Admin自己方法中的addslashes肯定不行;
我们借助Guest中的addslashes,控制它参数其中的一个为Admin类。
如何进入Guest::__call()呢?得让一个Guest类的对象执行一个Guest类没有的方法。
程序中的__construct我们是控制不了的;除此之外调用方法的地方就只有:
User::login中的$this->admin->ban();Guest类没有ban方法。
User有可用的__wakeup(); 搞定了。
最终payload:

SharkCTF2021 bbpop题记的更多相关文章
- SharkCTF2021 fastcalc题记
web --> python脚本编写练习. 直接访问发现全是乱码: 看包发现Content-Type里面没有charset=utf-8. 于是用python访问一下,用.encoding='ut ...
- SharkCTF2021 easy_phpserialize题记
***先说教训: (1)不要看到正则就走不动路:有些正则不一定能绕. (2)__wakeup()漏洞在php5.6以上就被修复了: 本地复现各种题目时要注意环境. -------- 扫描,得到inde ...
- SharkCTF2021 bybypass&baby_phpserialize题记
(国庆褪10天了 先水一篇) bybypass: payload:?anime_is_bae=hehellotherehoomanllotherehooman baby_phpserialize ro ...
- kendo-ui学习笔记——题记
1.Kendo UI基于最新技术HTML5.CSS3和JavaScript标准设计开发.2.官方网址:http://www.kendoui.com/3.API网上查阅英文版网址:http://docs ...
- NOIp 0924 水题记
这场貌似是gcd专场? 第一题很有意思,模拟gcd的过程即可. //0924 candy //by Cydiater //2016.9.24 #include <iostream> #in ...
- 使用Netty收发二进制报文问题记
1.java二进制编解码 byteBuffer.flip() byteBuffer.getInt() 与 byteBuf.getInt(11) 2.粘包拆包问题 LengthFieldBasedFra ...
- 51nod水题记
妈呀51nod已经刷不动了又开始跟bzoj一样总是得看题解了...那么发一下总结吧... 1051:最大子矩阵 #include<cstdio> #include<cstring&g ...
- 把这两天遇到的码(e)农(xin)题记下来
1019: [SHOI2008]汉诺塔 1858: [Scoi2010]序列操作 1058: [ZJOI2007]报表统计
- 2014第一周五开发问题记URL传参乱码等
今天修改了页面中URL传中文参数乱码问题,本来远离通过在tomcat中配置URIEncoder是可以解决所有乱码问题的,但怕以后有人下载一个新的tomcat然后直接把程序放里面运行然后再发现乱码问题而 ...
随机推荐
- spring boot 系列之七:SpringBoot整合Mybatis
springboot已经很流行,但是它仍需要搭配一款ORM框架来实现数据的CRUD,之前已经分享过JdbcTemplete和JPA的整合,本次分享下Mybatis的整合. 对于mybatis的使用,需 ...
- Python - pipupgrade 库
使用 pipupgrade 可以批量更新本地包.系统包 安装库 pip install pipupgrade 批量更新 pipupgrade -V -l -y -V.--verbose 显示详细输出 ...
- 2021 年 9 月 TIOBE 指数 C# 增长突破 1.2%
TIOBE 编程社区指数是编程语言流行程度的指标.该指数每月更新一次.评级基于全球熟练工程师.课程和第三方供应商的数量.谷歌.必应.雅虎.维基百科.亚马逊.YouTube 和百度等流行搜索引擎用于计算 ...
- 在C#中将图像转换为BASE64
本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...
- Element UI:DatePicker的终止日期与起始日期关联
Template // 起始日期 <el-date-picker v-model="queryParams.startTime" :picker-options=" ...
- k8s资源管理(基础操作)
1. 基础 本文实操基于k8s 1.22.1 # 可以查看资源分配情况 kubectl describe node # 全局资源情况查看 kubectl api-resources 1.1 apply ...
- 环形链表II
题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...
- [原创]配置php+nginx 时遇到的”file not found","access denied"奇怪问题的解决过程
在centos 7中按照我的随笔转载文章"[转载]CentOS 下安装LEMP服务(Nginx.MariaDB/MySQL和PHP)"安装好后,结果无法显示phpinfo()信息, ...
- 定要过python二级 第10套
第一部分 第一题 1. int* 字符串 =几个东西 2. 此题的最开始的疑惑 (1)01 02 03 怎么产生 for 循环 (2)<<< 这个怎么产生 (3)<这个&l ...
- P3507-[POI2010]GRA-The Minima Game【dp,博弈论】
正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 \(n\)个数,没人轮流取若干个并获得取走的数中最小数的权值,两人的目标都是自己的权值\(-\) ...