题目没有注入,注册完进来张这个样子
图片.png过程1.尝试多种上传之后,发现只有jpg图片里加一句话可以有效上传。上传成功后,在upload文件夹下,文件名变为md5。并且无法再次上传。upload/adeee0c170ad4ffb110df0cde294aecd/f3ccdd27d2000e3f9255a7e3e2c48800.png图片.png2.发现有一个聊天框,感觉可以文件包含。目录扫描,发现/www.tar.gz,下载源码,发现是tp5.1。同时抓包发现cookie是一串base64,解密后是反序列化。图片.png看到Profile这个文件,主要是文件上传在这里插入图片描述发现这部分引用了一个新类,并且这个类在该文件没有找到最终发现在index.php这里
在这里插入图片描述说明上传之前会检查一遍账号信息接着看Profile.php
在这里插入图片描述看到这个函数
在这里插入图片描述会进行一次检查
看到下面有两个魔术方法
在这里插入图片描述关键就在怎么触发这两个魔术方法
当对象调用不可访问属性时,就会自动触发get魔法方法在对象调用不可访问函数时,就会自动触发call魔法方法。
看到register.php 这里
在这里插入图片描述发现有个__destruct()魔术方法,
在这里插入图片描述上面这两输出可控,我们可以让checker这个属性为Profile类然后就会调用Profile类里的index()函数,那么就会触发__call魔术方法
在这里插入图片描述name是不可访问函数的名字arguments是参数,为空而当使用this->index,就是访问一个不可访问的属性,然后触发__get()魔术方法
在这里插入图片描述而except这个参数我们可以控制,并且他访问了索引name,说明他是一个数组
在这里插入图片描述接着就是让except变成啥样我们再回过头来看上传的部分
在这里插入图片描述只要我们第一次上传文件,那么empty($_FILES)就会为1,那么就会绕过下面那个png检查,直接跳过,进入下一个if
在这里插入图片描述我们让ext等于1即可进入filename我们可控,由此可以通过这个来将我们的webshell复制到filename里去要触发这个东西我们需要调用upload_img这个方法而调用upload_img刚好可以通过上面那两个魔术方法调用整个POP链大概是这样
在这里插入图片描述让A类访问一个不可访问的函数,触发__call,在通过call里访问不可访问的属性触发__get,然后调用upload_Img方法接着要找一个反序列化函数,那让POP链成功执行
在这里插入图片描述发现index.php里会反序列化cookie,由此通过这个来进行我们的pop链。exp: