| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> PHP反序列化-字符逃逸 -> 正文阅读 |
|
[PHP知识库]PHP反序列化-字符逃逸 |
写在前面字符逃逸是在反序列化的基础之上进行的,如果你不是很清楚反序列化漏洞,可以点击下方: 反序列化漏洞摘要普通PHP反序列化漏洞是因为用户对反序列化过程可控造成的魔法方法弹出导致的漏洞,字符逃逸不仅可以在普通反序列化漏洞之上触发魔法方法,由于过滤器的存在,还可以对payload进行构造,对反序列化的数据进行修改。 漏洞成因序列化的字符串在经过过滤函数不正确的处理而导致对象注入,主要原因是因为过滤函数放在了serialize函数之后。 反序列化字符串都是以 具体漏洞&举例增长逃逸
上述代码含义大概就是将变量AA序列化后的值中的‘bb’替换为’ccc’,随后再反序列化。
同时将$res 打印出来 假设我们要使用这个逃逸的间隙来修改pass的值,那么我们的payload可以是:
上述payload的长度为25,那么我们添加25个’bb’就能够逃逸25个字符了 缩短逃逸自然,过滤器除了能够增长字符串同时也能缩短字符串。
代码大概意思就是先通过get接收name,sign参数,然后通过黑名单过滤,将敏感字替换为空。 思路为在写name的参数时,本身的长度是较长的,但是由于全部替换为空,急剧缩短后unserialize()会继续向后查找,继续向后就是对sign的序列化语句了,这时,在payload中我们给出一个 payload:
这里的理解有点绕,来看看图吧: 部分例题来源: CTF示例(bugku-web-new php)题目源码:
重点看到的是两个类,在evil类里$this->hint指向文件触发file_get_contents函数读取文件内容,然后提示有个hint.php,肯定要构造触发这个evil类来获得flag。查看接入点,是post进去username和password两个参数。 思路: 这里的write chr(0).’*’.chr(0) 代表 利用脚本写出payload:
strlen()函数获取字符串长度为:
这里是缩短型,通过username的缩短来屏蔽对password字符段的长度定义。 那么payload(post传入):
password的第一个 最后这里要对__wakeup()函数进行绕过(对__wakeup()函数绕过原理见下方),再次修改payload:
进入后得到一个base64编码的字符串:
得到flag: 其他如果你想知道与反序列化漏洞相关的__wakeup()函数绕过,可以下方查看: __wakeup()函数绕过 |
|
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/4 9:00:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |