abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-dyndns-cache-path
类别: 文件写入 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
自定义主机跳过了 is_domain()。updatedns 将缓存路径构建为 /conf/dyndns_{if}{type} 加上 escapeshellarg($FQDN) 加上 {id}.cache。引号是文件名字节;/ 仍然会分割路径。内容是 IP|epoch,不是 shell。
| ID | 暂无 CVE |
| 类别 | 文件写入 |
| 可达性 | 远程(除非另有说明,否则为已认证的 WebGUI) |
| CWE | CWE-22 |
| CVSS | 中危:5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N |
| 产品 | pfSense CE |
| 受影响版本 | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| 认证 | 具有 page-services-dynamicdnsclient 的 WebGUI 会话 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我固定了公共 master 9363ac5。该实验环境是固定 sink 的 PHP gadget,在 127.0.0.1:19270 上使用回环 HTTP。
系列文章:https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 方法 | Sink | 权限 |
|---|---|---|
| POST services_dyndns_edit.php 自定义主机名带 / | file_put_contents 缓存路径使用 escapeshellarg($FQDN) | 完整性: 实验证明:带 / 的主机名将 IP |
| 同一遗留问题 | 同一 sink | 侦察: 无。内容是 IP |
| 同一遗留问题 | 同一 sink | 可用性: 推断:覆盖名称与带引号后缀匹配的文件。 |
需要: page-services-dynamicdnsclient。除非另有说明,POST 上有 CSRF-magic。WebGUI PHP-FPM 以 root 运行。
需要: page-services-dynamicdnsclient。除非另有说明,POST 上有 CSRF-magic。WebGUI PHP-FPM 以 root 运行。除非另有说明,POST 上有 CSRF-magic。WebGUI PHP-FPM 以 root 运行。
未认证。FQDN 的 mwexec。*.cache 的 cron/php exec。非 Custom 的 dyndns 会拒绝该主机。
除非该页面也被授予,否则没有 Diagnostics: Command。
cd lab
./run.sh
回环 127.0.0.1:19270。Compose 项目 pfsense-dyndns-cache-path。见证 PFSENSE-DYNDNS-CACHE-PATH-WITNESS。仅回环:127.0.0.1:19270。Compose 项目 pfsense-dyndns-cache-path。见证 PFSENSE-DYNDNS-CACHE-PATH-WITNESS。固定行的 PHP gadget。运行后堆栈会拆除。
最后一行:
SUCCESS PFSENSE-DYNDNS-CACHE-PATH control-under-conf=yes trigger-outside-conf=yes PFSENSE-DYNDNS-CACHE-PATH-WITNESS
不要将 escapeshellarg 用作文件名。对主机使用 basename / is_domain。
9363ac5b8651a1c7a333180425ce7719070f95f9