靶场科普 | ThinkPHP2.x代码执行

发表时间:2022-04-11 14:55

本文由“东塔网络安全学院”总结归纳


靶场介绍:

ThinkPHP2.x代码执行

靶场科普 | ThinkPHP2.x代码执行


今天,给大家介绍一下“东塔攻防世界”其中的一个靶场:“ThinkPHP2.x代码执行”。

一、实验介绍

1.基本概念

ThinkPHP是一个免费开源用户数量非常多的一个PHP开发框架,这个框架曾经爆出各种RCE和SQL注入漏洞。

2.漏洞原理

1)在ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
2)preg_replace,这个函数是个替换函数,而且支持正则,使用方式如下:
preg_replace('正则规则','替换字符','目标字符'),这个函数的3个参数,结合起来的意思是:如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。
3)/e的解释:
e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。

靶场科普 | ThinkPHP2.x代码执行


二、实验目的

1.了解ThinkPHP2.x的基本概念

2.熟悉ThinkPHP2.x的漏洞原理

3.掌握ThinkPHP2.x漏洞修复方式


三、实验步骤

1.启动靶场,查看实验环境

2.进行访问页面,利用payload进行访问漏洞页面;

3.写入一句话使用蚁剑进行连接。


四、修复方式

1.用户可下载官方发布的补丁


http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838。

2.直接修改源码

/ThinkPHP/Lib/Core/Dispatcher.class.php文件中的

$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
修改为:
$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2';', implode($depr,$paths));
将preg_replace第二个参数中的双引号改为单引号,防止其中的php变量语法被解析执行。