0x01前言

太菜了,复盘下三道Web,两道都是反序列化,掌握的还是不够牢固。

0x02正文

一.LOL

经过大量尝试发现了,文件上传的路径是由PHPSESSID决定,但是上传什么文件都会被加一个jpg的后缀,然后这里卡了好久,然后发现在download那里有可以源码泄露,然后就是get方法download,然后设置好phpsessid的路径,就能拿到源码。

然后就是读源码了,index.php

包括进来core.php

包含进来config.php和主要功能的func.php,然后spl自动加载函数,在config.php中设置了php session的反序列化方式为php

(这里我注意到了设置php session的疑点但是不知道怎么添加session中的变量,所以最后没想出来),然后我们读到其他的一些类的php,其中最重要的是Cache.class.php这里,因为在其__destruct函数中可以任意文件写,并且他的参数时我们可以控制的。

可以看到我们只要能够触发反序列化就可以写入shell文件来getshell,但是我们反序列化的点在哪呢,以前我总结过php session反序列化这篇文章,但是这里有个小trick我没有了解。

upload_progress的目的是检测一个文件的上传进度,当然这个进度对上传没有什么用,但是可以允许客户端通过API获取当前的上传进度。在session.upload_process.enabled开启时会启用这个功能,在php.ini中会默认启用这个功能。
使用方法大体是这样,在POST一个文件之前,先传一个name为session.upload_progress.name(默认为PHP_SESSION_UPLOAD_PROGRESS),value为用户自定义的一个upload_id。在文件上传的过程中,php会在session中生成一个上传信息,它在session中的键是session.upload_progress.prefix加上用户自定义的upload_id。在上传结束后这个session中的键值对会直接消失

最后Post两个,第一个name设置为PHP_SESSION_UPLOAD_PROGRESS,内容随意,第二就是我们要反序列化的内容,payload是

类似这样

同时url ?l=system(‘cat /flag’);

二.upload

还是一道反序列化的题,不过这里使用phar伪协议进行触发,

首先在file.php?file=那里可以文件泄露,/proc/self/cwd/可以读到源码

然后发现有file_exits函数,可以利用phar伪协议绕过,虽然文件上传会被限制后缀,但是phar协议读的话只要文件头是对的就可以了,然后我们观察到在class.php中可以rop来构造

poc如下

很多时候反序列化都是从__destruct()函数中开始,Sh0w里面str设为S6ow对象,__destruct触发S6ow->show(),但是没有这个函数触发__call,调用call的时候,会调用$name是_show这个变量,但是没有,触发__get(),返回params[‘_show’]的值,那么我们将这个值设置为file_get函数,然后将this->file设置为Show类,就会因为echo触发Show中的__String方法,从而设置this->source就可以任意文件读了。

最后我们要将生成的fuck.phar重命名为fuck.gif文件就可以绕过后缀名限制。

三.admin

二次注入,过滤空格,admin永真就可以了 test’/**/OR/**/name=’admin。

0x03总结

继续学习了。