![](https://img-blog.csdnimg.cn/direct/6b540055d2b5483dadc848aa9050efdb.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
反序列化
文章平均质量分 85
CTF反序列化学习
补天阁
CTF赛事活跃者,信息安全大学生,web安全博主,文章入选CSDN每日看
展开
-
phar反序列化漏洞
基础:Phar是一种PHP文件归档格式,它类似于ZIP或JAR文件格式,可以将多个PHP文件打包成一个单独的文件(即Phar文件)。打包后的Phar文件可以像普通的PHP文件一样执行,可以包含PHP代码、文本文件、图像等各种资源,也可以对Phar文件进行签名、压缩和加密,我们还可以在文件包含中使用phar伪协议,可读取.phar文件。phar文件格式:stub.phar 文件标识,格式为xxx;manifest 压缩文件的属性等信息,以序列化存储;原创 2024-01-27 22:30:24 · 1381 阅读 · 0 评论 -
PHP“引用”漏洞
这道题目其实很容易,其实就构造序列化字符串使enter=secret,但是secret已经写死了,变成*,我貌似只能给enter赋值*才能满足条件,但是 $pass=str_replace('*','\*',$pass);这里我只要写入*就会被替换成\,所以现在问题变成了怎么在不写入*的情况下让enter=secret,这时就要使用引用漏洞。希望本文能够帮助大家。原创 2024-01-24 10:43:44 · 552 阅读 · 0 评论 -
反序列化提升刷题(1)
触发tostring()——魔术方法,然后给$str赋值对象Test,因为Test中不存在成员属性source,所以就能够调用不存在的成员属性,从而触发get()——魔术方法。像这样直接把不必要的fuction删除,输出那些也删除,报错的代码也删除,就只剩下了上面的代码,留下成员属性就好了。原创 2024-01-14 13:21:07 · 1153 阅读 · 1 评论 -
反序列化字符串逃逸(下篇)
吃完"s:4:"pass";s:6",就代表 var $pass = "benben"这里的benben是可控的;我的目标代码是"s:3:"vip";}也就是说我要逃逸这个,所以我要把benben变成"s:4:"pass";s:3:"vip";}这个地方就会反序列化结束,后面的"s:3:"vip";s:4:"pass";即user=flagflagflagflagflagflagflagflagflagflag。//在这里flag被替换成hk,字符串减少,会吃掉后面的结构代码,"s:3:"vip";原创 2024-01-21 23:21:03 · 1227 阅读 · 0 评论 -
反序列化字符串逃逸(上篇)
结果:O:4:"user":3:{s:8:"username";s:3:"BTG";这里BTG从0变成了1,说明你是污染成功了的,因为我的原代码里面写死了BTG是0的,现在变成了1,所以证明反序列化是成功了。其实就到这里就搞定了,如果不放心,那就var——dump,把反序列化输出出来,原创 2024-01-21 11:33:01 · 1165 阅读 · 0 评论 -
反序列化__wakeup()绕过
这里因为flag在flag.php但是我只要进行反序列化就会触发wake()魔术方法,使file=index.php,这不是我们要的,所以必须绕过它,这里直接复制前面代码,把file改为flag.php,进行反序列化,得到正常的pop链,之后再把。后面的数字加个正号,然后把属性加一,接下来URL编码就可以绕过。但是限制很大,5原创 2024-01-24 09:21:44 · 673 阅读 · 0 评论 -
session反序列化
到这里,我们得先明白我们要做什么,我们传参a是以php_serialize格式写进去的,但是读取是php读取的,a=|O:1:"D":1:{s:1:"a";经过php_serialize保存后,变成了:a:1:{s:3:"ben";键名的长度对应的ASCII字符+键名+经过serialize()函数反序列化处理的值。还是老样子,反序列化的很多漏洞开头都是一样的,都要先进行一次正常的反序列化。键名的长度对应的ASCII字符+键名+经过。希望大家能够从文章中收获知识!原创 2024-01-25 14:07:44 · 1314 阅读 · 0 评论 -
五步法带你搞定反序列化难题
实例化对象,必须使得test指向evil对象,test=new evil(),同时构造test2去执行我们所要执行的命令,其实经过上面的分析其实就construct魔术方法以及后面的evil这个有用而已,其他的注释就好了。必须调用evil下面的action()_函数!学习就是把你掌握的方法不断练习达到极限!正常情况下代码怎么运行?(不用搞懂全部,看个大概就好了,不用每个地方都懂!很明显,是evil对象下面的action方法,通过test2去进行执行。必须调用evil下面的action()_函数!原创 2024-01-12 13:52:28 · 1200 阅读 · 0 评论 -
反序列化提升刷题(2)
答:找找有没有return fuction之类的,看看,在哪里突破,这里我找了一会,发现了不对劲,找不到,线索断了。首先是反序列化vip,然后反序列化之前会触发wakeup()——魔术方法,接下来反序列化后又会触发destruct()——魔术方法,然后勒,就结束了。,如果没有学过这个专门应对反序列化难题的方法可以看看我的上一篇文章,既然有了方法,那就得不断训练提升。换句话来说根本就不可能执行eval(),因为invoke()——魔术方法根本不可能触发。问:怎么执行invoke()——魔术方法?原创 2024-01-19 09:58:16 · 1039 阅读 · 0 评论 -
一篇文章带你入门PHP魔术方法
这个魔术方法,但是后面的sleep遇到serialize又会触发魔术方法_sleep(),这里先触发——construct(),(在实例化前触发)并且把username,nickname,password,为别赋值a,b,c。比如这段代码,因为这里的var只能在当前类中使用,因为这是一个私有属性,你出来后调用肯定不可以,这里一定会触发——isset()魔术方法,最终顺利输出var。这里本来应该输出的是三个参数的,但是后面的sleep又触发魔术方法,结果password就不输出。格式不对,输出不了!原创 2023-12-29 22:04:17 · 1193 阅读 · 0 评论