原标题:利用Thinkphp 5缓存漏洞实现前台Getshell

*本文原创作者:WindWing,属于FreeBuf原创奖励计划,禁止转载

0×00 背景

网站为了实现加速访问,会将用户访问过的页面存入缓存来减小数据库查询的开销。而Thinkphp5框架的缓存漏洞使得在缓存中注入代码成为可能。(漏洞详情见参考资料)

本文将会详细讲解:

1. 如何判断缓存漏洞存在的可能性

2. 如何利用Thinkphp5的框架漏洞结合网站的一些配置实现前台getshell

希望可以给予读者一些关于漏洞应用的启发。

0×01 环境 测试环境

1.某基于Thinkphp5.0.10搭建的论坛类测试网站

2.apache2

3.php5.6及以上版本,相关php组件

4.mysql工具

1.dirsearch(github上的一个用python编写的网站路径扫描工具)0×02 实现 判断缓存漏洞存在的可能性

1.查看网页的cookie,发现存在thinkphp_show_page_trace字段,确定网页基于thinkphp框架。

2.使用 dirsearch 扫描目标网站。python3 dirsearch.py -u site_ip_here -e php发现可以访问 cache目录,说明可能存在缓存漏洞。

实施攻击

1.考虑到这是一个论坛类网站,尝试发帖注入缓存。

2.这是最困难的一步,猜解缓存中的php文件名。根据框架实现,文件名是一个唯一字符串的md5码(此处的md5要用php的函数计算,测试发现和网上的一些在线平台计算结果不同)。考虑到论坛类网站有大量的帖子,需要用数据库存储,而帖子的索引应该为很有可能为id 。

再结合url的路径名,猜测为article_id

echo(md5(“article_52″));

12a51218427a2df68e54e8f4c8b10109

通过访问缓存成功getshell

0×03 原理分析: 框架

在thinkphp框架中,/thinkphp/library/think/cache/driver/File.php中定义了缓存的实现。其中,getCacheKey($name)函数实现了cache文件路径的计算,为获得缓存文件名称提供了可能。

而set()与get()函数以序列化对象的方式无过滤地实现了缓存数据的写入与读出,为代码注入缓存提供可能。

通过测试,可以发现帖子中的内容可以直接写入缓存文件。

由于缓存文件是一个php文件,可以进行代码注入。在代码前加一个回车,使代码行独立于前面的注释行。再在末尾加上注释符号//,注释剩余内容。

网页实现

在处理帖子的代码中,读取帖子首先查询cache文件,通过调用thinkphp5框架中的cache接口实现。

0×04 防御:

1. 从框架入手,在/thinkphp/library/think/cache/driver/File.php 中的set()函数中对于$value参数进行过滤,去除换行符号。(具体代码见参考资料)缺点: 可能会导致缓存文件在展示时文本布局的改变。

2. 从网页实现入手,读取缓存时的使用的唯一索引可以设置的比较复杂,让攻击者无法猜到。如: 3ae282ad69314d68_article_id

3. 从服务器的配置入手,关闭从外部对于cache文件夹的直接访问。

4. 从php的配置入手,关闭eval等危险函数。0×05 参考资料:

https://paper.seebug.org/374/

*本文原创作者:WindWing(mail),属于FreeBuf原创奖励计划,禁止转载 返回搜狐,查看更多

责任编辑:

php缓存注入,利用Thinkphp 5缓存漏洞实现前台Getshell相关推荐

  1. thinkphp日志泄漏漏洞_ThinkPHP漏洞分析与利用

    一.组件介绍 1.1 基本信息 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和Ta ...

  2. thinkphp mysql缓存_ThinkPhp数据缓存技术

    1.缓存初始化 在 ThinkPHP 中,有一个专门处理缓存的类:Cache.class.php(在Thinkphp/Library/Think/cache.class.php,其他的各种缓存类也在这 ...

  3. 浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)

    系统默认的缓存方式是采用File方式缓存,我们可以在项目配置文件里面定义其他的缓存方式,例如,修改默认的缓存方式为Xcache(当然,你的环境需要支持Xcache) 对于File方式缓存下的缓存目录下 ...

  4. thinkphp htmls.php,ThinkPHP静态缓存简单配置和使用方法详解

    本文实例讲述了ThinkPHP静态缓存简单配置和使用方法.分享给大家供大家参考,具体如下: 根据ThinkPHP官方手册:ThinkPHP内置了静态缓存类,通过静态缓存规则定义来实现了可配置的静态缓存 ...

  5. php %3c0x1a%3e是什么_利用ThinkPHP漏洞扫描攻击

    利用ThinkPHP漏洞扫描攻击 115.238.244.112   119.3.90.139    94.191.10.105 POST /index.php/?s=captcha HTTP/1.1 ...

  6. java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具

    JNDI 注入利用工具 介绍 本项目为 JNDI 注入利用工具,生成 JNDI 连接并启动后端相关服务,可用于 Fastjson.Jackson 等相关漏洞的验证. 本项目是基于 welk1n 的 J ...

  7. java asm jndi_JNDI 注入利用工具

    JNDI 注入利用工具 介绍 本项目为 JNDI 注入利用工具,生成 JNDI 连接并启动后端相关服务,可用于 Fastjson.Jackson 等相关漏洞的验证. 本项目是基于 welk1n 的 J ...

  8. php后台提权,基于ThinkPHP的2个CMS后台GetShell利用

    * 本文作者:Mochazz,本文属FreeBuf原创奖励计划,未经许可禁止转载文章作者:Mochazz 思路作者:szrzvdny 0x00 前言 ThinkPHP是为了简化企业级应用开发和敏捷WE ...

  9. 蜜罐中利用jsonp跨域漏洞和xss漏洞的分析

    一.前言 我们在打红队的时候,经常会碰到蜜罐,而更有一些"主动防御"的蜜罐中利用到了一些网站的跨域漏洞和xss,对此进行简单分析. 二.蜜罐的概念 蜜罐主要是通过布置诱饵,诱使攻击 ...

最新文章

  1. ubuntu 目录结构
  2. 58 Openstack基础、openstack之glance、openstack之keystone
  3. Vss服务端用户存在,但客户端登陆不进去
  4. mach-o hook
  5. groovy 使用java类_深入学习java中的Groovy 和 Scala 类
  6. [AaronYang]C#人爱学不学[2]
  7. Samba服务器配置(2)--认识smb.conf配置文件
  8. 【1024两年祭】溯流光 觅杳杳
  9. 静态类型语言、动态类型语言、强类型定义语言、弱类型定义语言、编译型语言、解释型语言...
  10. 2018年小学计算机面试,2018上半年小学信息技术教师资格证面试试题(精选)第一批...
  11. 神秘电报密码——哈夫曼编码
  12. 计算机毕业设计Java苹果酒店住房管理(源码+系统+mysql数据库+lw文档)
  13. 河南高考成绩位次查询2021,2021年河南高考状元多少分是谁,河南高考状元名单资料...
  14. java中for break的用法_java break语句的使用方法
  15. 支付系统设计五:对账系统设计01-总览
  16. Android 状态栏沉浸式效果
  17. 超级大数据公司即将诞生 全球招募大数据领域人才
  18. SQL2000客户端连接不上
  19. 常见数据结构——完全二叉树(定义、特征、节点个数的判断以及C++简单实现)
  20. 576芯光缆交接箱SMC光交箱详细图文说明光缆交接箱SMC光交箱功能

热门文章

  1. 润乾V4导出TXT时自定义分隔符
  2. 实现自己的BeanFactory、AOP以及声明式事务
  3. SPS用户管理的问题
  4. 高斯金字塔 拉普拉斯金字塔_金字塔学入门指南
  5. 您一直在寻找5+个简单的一线工具来提升Python可视化效果
  6. 重学TCP协议(12)SO_REUSEADDR、SO_REUSEPORT、SO_LINGER
  7. leetcode 1052. 爱生气的书店老板(滑动窗口)
  8. leetcode557. 反转字符串中的单词 III
  9. 回归分析中自变量共线性_具有大特征空间的回归分析中的变量选择
  10. pandas之cut