Php
php中常用的几种魔术方法和触发条件
__construct :当一个对象创建时被调用
__destruct :当一个对象销毁时被调用
__toString :当一个类或对象被当作一个字符串被调用
__wakeup :当一个对象使用 unserialize 时触发,反序列化时触发
__sleep :当一个对象使用 serialize 时触发,序列化时触发
__get :当一个对象读取不可访问属性的值时触发
__set :当一个对象在给不可访问属性赋值时
__isset :当一个对象当对不可访问属性调用 isset 或 empty 时触发
__unset :当一个对象对不可访问属性调用 unset 时触发
__invoke :当一个对象尝试以调用函数的方式调用一个对象时触发
__set_state :当一个对象调用 var_export 导出类时,此静态方法会被调用
__call :当一个对象在对象上下文中调用不可访问的方法时触发
__callStatic :当一个对象在静态上下文中调用不可访问的方法时触发
不同属性之间的区别
public 变量(公有)
直接将变量名反序列化出来
protected 变量(受保护)
\x00 + * + \x00 + 变量名
private 变量(私有)
\x00 + 类名 + \x00 + 变量名
文件包含作用函数:
require//包含过程中出现错误直接退出程序
include();//包含过程出现错误,抛出警告,程序继续运行
require_once();//包括require()的功能,但函数只包含一次
include_once();//包括include()的功能,但函数只包含一次
该函数用以加载另一个文件中的php代码,并且当php来执行
而漏洞产生的原因则是因为当函数中的参数未经过严格的过滤,且用户可控时,当用户包含了其它恶意文件代码,就导致执行了非预期操作
先搬一张大佬的图:
2019SUCTF—CheckIn
题目源码:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn