| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> CTF-PHP反序列化 -> 正文阅读 |
|
[PHP知识库]CTF-PHP反序列化 |
CTFSHOW-关卡254到258-原生类&POP构造CTF-254-对象引用执行逻辑username=xxxxxx&password=xxxxxx 解题思路:触发vipOneKeyGetFlag这个方法,同时让方法中的判断为真才能获取flag。 首先分析代码,查看下方判断,用两个GET方法接受账号密码,然后创建ctfShowUser这个类的对象,调用login这个方法,当该方法将isVip赋值为真时才能触发checkVip方法并返回为真,最后触发vipOneKeyGetFlag获取flag。 可以从login方法入手,当$u和$p等于username和password时,isVip将赋值为true。然后执行checkVip方法返回为true时,最后触发vipOneKeyGetFlag获取flag。 通过代码可以发现username和password的值为xxxxxx,那么直接传递账号密码为xxxxxx,底部直接获取flag ? ? ? CTF-255-反序列化变量修改
Get:username=xxxxxx&password=xxxxxx Cookie:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A8%3A%22password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D 该关的源码与上关差距不大,但是在login方法中除了简单比较了一下username和password并没有将isVip改为true,那么在后面的checkVip方法中就无法返回true,无法在vipOneKeyGetFlag方法中获取flag 思路:下方的$user接受的是反序列化,那么可以利用反序列化将isVip的值直接改为true 利用网页工具 菜鸟php工具 将ctfShowUser这个类进行序列化并将isVip的值改为true,获取序列化字符串,使用urlencode编码防止赋值到网页时一些空格或其他数据造成的影响? 查看源代码可知道反序列化是在cookie中的user里面的内容,那么访问页面利用burpsuite进行截断,并添加cookie和其中的user,将user值改为序列化字符串,再在url头部进行username和password的传输 ? 放出截断的代码获取flag。 ? ? CTF-256-反序列化参数修改
GET:username=x&password=y COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A1%3A%22x%22%3Bs%3A8%3A%22password%22%3Bs%3A1%3A%22y%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D 该关的考点非常清楚,在login和vipOneKeyGetFlag两个方法中$u和$p与username和password分别要全等,但是username和password不能全等。 思路:依旧用上一关的办法并且修改掉$username和password$的值即可,然后在x和y中传递与username和password相同的值,那么即可绕过判断。 ? 依旧利用burp截断网页,利用url头传递参数并添加cookie? ? ? CTF-257-反序列化参数修改&对象调用逻辑
GET:username=xxxxxx&password=xxxxxx COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A18%3A%22%00ctfShowUser%00class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A14%3A%22%00backDoor%00code%22%3Bs%3A17%3A%22system%28%22cat+f%2A%22%29%3B%22%3B%7D%7D 思路:该关出现了多个类,难度已经偏中等左右。分析代码可以发现有个eval函数,该函数可以将字符串当做JS代码执行,那么就可以从该函数入手。观察代码可以发现__destruct函数调用getInfo这个方法,但是因为ctfShowUser类中的class为info,所以destruct函数指向的info类里的getInfo,那么第一步就是将construct的实例化对象值改为backDoor,使destruct方法调用backDoor这个类中的getInfo从而触发eval函数。在利用eval函数的特性执行hs代码获取falg。 依旧利用网页工具对类进行序列化,将__construct方法的内容改为创建backDoor类的对象,当利用$a实例化ctfShowUser时就会触发__construct方法。根据源码当对象销毁时会执行destruct方法,调用backDoor中的getInfo方法,然后会执行方便eval函数,然后修改code值为JS代码让eval函数执行。 因为这个知道了路径下有flag.php文件,所以直接写上。正常情况下需要利用ls查看当前目录。 为了代码美观,无关的数据已经删掉,因为起不到作用。 ? 将反序列化字符串的url编码写入到cookie中并在get中传递参数,获取flag ? ? CTF-258-反序列化参数修改&对象调用逻辑?
GET:username=xxxxxx&password=xxxxxx COOKIE:user=O%3A%2B11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27cat+flag.php%27%29%3B%22%3B%7D%7D 该关比上一关多可过滤字符,代表过滤oc开头后面带数字的数据,i代表不区分大小写,那么这个过滤导致序列化字符串生成的url编码无法使用 可以看到右边的数据就是序列化之后的数据,字母O后面带有数字所以被过滤,那么将字母o后面的数字11改为+11,数字8改为+8,不仅数值没有变,因为字母后面跟的不是纯数字,所以可以绕过过滤 ? str_place为php中的替代函数,第一个参数为要替换的数据,第二个参数为替换之后的数据,第三个参数是要替换的字符串。 注意:一定要序列化之后进行替换,在进行url编码,因为源码中过滤的序列化字符串并不是url编码数据 ? ? ? |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/22 19:19:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |