[SUCTF 2019]Upload Labs 2
1 |
|
我们来看代码,在ad类的析构函数中存在一个rce函数,所以我们的目的是能够执行它
想要通过if,我们需要进行ssrf,同时为了到达命令执行的点,我们还需要通过check函数的检查
1 | function check(){ |
在这里通过反射来调用类的方法,我们可以找一个存在单参数方法的原生类,这里用到了SplDoublyLinkedList::unshift
我们在func.php发现下面代码
1 |
|
跟进getMIME,我们进入class.php(文件从github下下来的)
1 |
|
其中的finfo_file可以触发phar反序列化
为了绕过func.php中的正则,我们可以使用php伪协议进行绕过,提示在File类中存在如下wakeup方法
1 | function __wakeup(){ |
在该方法中使用反射可以获取到任意类的实例,在这里自然想到soap反序列化,当执行到$a->check();的时候会触发__call方法,可以造成ssrf,参考如下文章https://blog.csdn.net/qq_38154820/article/details/106330082
在这里可以及构造如下上传phar的代码
1 |
|
我们将得到的phar.phar改为phar.gif
上传后触发phar
1 | php://filter/resource=phar://upload/17ac2685d5d5a6c401e7f5b28a603095/628941e623f5a967093007bf39be805f.jpg |
在vps请求里拿到flag