THINKPHP框架审计-利用链 tp5.1.41
嗯,用户让我总结一下这篇文章的内容,控制在100字以内,而且不需要用“文章内容总结”之类的开头。我先看看文章主要讲什么。 文章看起来是关于PHP反序列化的安全知识。里面提到了反序列化的起点、跳板和终点,还有一些魔术方法。还举了小迪跟链的例子,比如任意文件删除的实例。最后还有免责声明和一些技术声明。 用户的需求是总结内容,所以我要抓住重点:反序列化漏洞、利用条件、魔术方法和实例分析。确保在100字以内,用简洁的语言表达出来。 可能的结构是先点明主题,然后说明涉及的内容和例子,最后提到免责声明。这样既全面又简洁。 </think> 文章介绍了PHP反序列化漏洞的相关知识,包括反序列化的起点、跳板、终点及常用魔术方法,并通过实例分析了如何利用反序列化漏洞实现代码执行或文件操作。文章还提供了相关技术文档和免责声明。 2025-10-19 13:27:9 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

1.框架知识

  • #### 反序列化起点

1、__wakeup 一定会调用*;
2、__destruct 一定会调用;
3、__toString 当一个对象被反序列后又被当字符串使用。
  • #### 反序列化跳板

1、__toString 当一个对象被当做字符串使用;
2、__get 读取不可访问或不存在属性时被调用;
3、__set:当访问不可访问或不存在属性赋值时调用。
  • #### 反序列化终点

1、__call()调用不可访问或不存在的方法时被调用;
2、call_user_func() 一般PHP代码执行会选择这里;
3、call_user_func_array 一般PHP代码执行会选择这里。
  • #### 反序列化一般思路
    1

注意:实际成品源码审计分析中,通过对版本的判断有无反序列化漏洞,确定后需要对利用条件做判断,利用条件主要有2个:
1、可控的文件,文件使用文件判断类函数操作(phar反序列化)
2、可控的变量,变量采用的unserialize去操作(反序列化)
  • #### 常用魔术方法

PHP常用的魔法函数:
__wakeup() //使用unserialize时触发
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发

2.小迪跟链实例

https://paper.seebug.org/1040/
https://blog.csdn.net/qq_63701832/article/details/131406921
  • 入门-任意文件删除

1.自己创建入口
    public function unser()
    {
        //漏洞产生点
        //如果在实际审计中发现类似代码就可以利用tp反序列化触发出rce
        unserialize(base64_decode($_GET['id']));
        return "Welcome!";
    }
2.寻找魔术方法
搜索__wakeup( 关键字方法
   __destruct(


3.开始跟链

1/thinkphp/library/think/process/pipes/Windows.php
    public function __destruct()
    {
        $this->close();
        $this->removeFiles();
    }

    private function removeFiles()
    {
        foreach ($this->files as $filename) {
            if (file_exists($filename))

免责声明

1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。

3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/web/453291.html
如有侵权请联系:admin#unsafe.sh