小迪
PHP反序列化
未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化的过程,从而导致代码执行,SQL注入,目录遍历登不可控后果。在反序列化的过程中自动触发了某些魔术方法。
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象
无类的情况
案例-无类问题-ctf
题目点登录没有反应
右键查看源代码,有一个admin.css
第一行提示传参?29524
对cookie进行反序列化等于key就可以flag
对key序列化
注意是if elseif,如果GET传参是29524的话就不执行flag了
抓包修改
案例-有类魔术方法触发
__construct()//创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
PHP中的几个特殊的魔术方法。
1.__construct():当对象创建(new)时会自动调用,但在unserialize()时是不会自动调用的(构造函数)
2.__destruct():当对象操作执行完毕后自动执行__destruct()函数的代码。
3.__wakeup():unserialize()时自动调用。
案例-网鼎杯
不是很懂,这里记得在看一遍