[极客大挑战 2019]PHP 反序列化

2021-03-19 10:25

阅读:713

标签:请求   mic   私有变量   pre   load   select   lag   http   code   

1.  题目主页为一个很鬼畜的猫猫,会跟着鼠标晃头

技术图片

 

题目说猫猫会踩键盘,所以作者每次都会机制的备份文件,所以这里想到了有备份文件。

 一开始使用dirsearch找,发现都是429请求过多,看样子不能自动扫备份文件,根据经验尝试一下 www.tar www.zip等等,运气比较好的是www.zip为备份文件,下载下来看看。

技术图片

 

 

2.  遍历各个文件,flag.php内的flag是假的,较为有用的是index.php和class.php。

其中index.php关键代码:

技术图片

这里可以看出,index.php包含了class.php,接受get传参给select,随后序列化处理。

 

class.php关键代码

技术图片

 class.php中,定义了Name类,有两个私有变量username和password,随后定义了_construct(),_wakeup(),_destruct()函数,分别为,建立对象时会调用的函数,反序列化时首先调用的函数,和析构前调用的函数。

代码审计后发现传入的对象必须为username=admin且password=100才能输出正确的flag,于是构造序列化字符串

 技术图片

 

 由于对象变量为私有变量,序列化后会产生不可见字符%00,将其填入序列化后的字符串中。

 

3.  在提交参数前,需要注意,反序列化后首先会调用_wakeup()函数,所以需要将序列化后{前的数字改大,大于类中的变量数,利用php序列化的特性,即可绕过_wakeup函数,不提前为变量赋值。

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

payload:

?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

 

[极客大挑战 2019]PHP 反序列化

标签:请求   mic   私有变量   pre   load   select   lag   http   code   

原文地址:https://www.cnblogs.com/cmredkulaa/p/14551854.html


评论


亲,登录后才可以留言!