Merhabalar. Bu yazımda çözerken biraz sinir bozan 40 puanlık Zipper isimli makinenin çözümünü anlatmaya çalışacağım. Daha detaylı ve açıklamalı bir çözüm için bir pdf hazırladım, bilalkan.com/downloads kısmından ulaşabilirsiniz.

Sağ elimi kaldırdım, sol elimi daldırdım ve bir nmap taraması başlattım.

Nmap çıktısında 80 açık görüldüğü üzere. Tarayıcıdan açtığımızda ise karşımıza Apache2 Ubuntu Default Page çıktı. Bu aşamadan sonra ilerlemek için gobuster aracını kullanarak bir dizin taraması başlatıyoruz.

gobuster taraması sonucunda /zabbix isimli bir dizin tespit ettik.

/zabbix dizinini ziyaret ettiğimizde karşımıza Zabbix ağ izleme servisinin login sayfası çıkıyor. Herhangi bir giriş bilgisi elimizde olmadığından sign as guest seçeneğiyle giriş yapıp incelemeye başlıyoruz.

Overview sekmesi altında Triggers bölümüne denk geldik. Burada Zapper’s Backup Script isimli bir bölüm görünce Zapper isimli bir kullanıcı varlığını anladık. Henüz parolasını bulamasak da elimizde bir username bilgisi var şu aşamada.

Yine sekmeler arasında gezinirken Scripts adı altında sunucu üzerinde çalışan ve guest olarak düzenleyemediğimiz komutlara rastladık. Zapper kullanıcısı ile giriş yapabilirsek belki düzenleyebilir ve buradan bir reverse shell alabiliriz.
Başka bir bilgi edinemediğimiz için Zapper kullanıcısının parolasını brute-force yöntemiyle elde etmeye çalıştık.

“Brute-force için rockyou.txt mi versem yoksa daha ufak bir custom wordlist mi baksam” diye düşünürken elle hızlıca birkaç parola denedim. Şanslıydım ki giriş bilgileri Zapper:zapper  çıktı.
Bu sefer de giriş bilgileri yanlış hatası yerine GUI access disabled. hatası aldım.
GUI yoksa CLI vardır diyip gugıllamaya başladım. Bir github sayfasında zabbix-cli isimli bir tool buldum. Bu toolu kullanarak Zapper kullanıcısına GUI yolunu açabiliriz.
https://github.com/usit-gd/zabbix-cli
Kurulumunu ve kullanımını öğrenmek için sağlığımdan vazgeçip kanser olsam da sonunda çalıştırabildim.
Github üzerinden indirdiğimiz paketin içerisinde bulunan setup.py dosyasını sudo python setup.py install  komutuyla çalıştırarak kurulumun kolay aşamasını gerçekleştiriyoruz.

Kurulum bittikten sonra zabbix-cli --help komutuyla nasıl çalıştırmamız gerektiğine göz atıyoruz. Burada ilk kez çalıştırıyorsak kendi zabbix kurulu sunucumuzu tanıtmamız için config ayarlarını sağlayacak zabbix-cli-init -z 'ip_adresi'  komutunu kullanmamız gerektiğini görüyoruz.

Komutu çalıştırıp config dosyasının düzenlendiğini gördüğümüzde zabbix-cli komutuyla aracımızı çalıştırıyoruz. Zapper:zapper  giriş bilgileriyle giriş yaptıktan sonra karşımıza tertemiz bir zabbix terminali çıkıyor.

Kullanabileceğimiz komutlara help ile göz attıktan sonra show_users ve show_usergroups komutlarıyla sistemde kayıtlı bulunan kullanıcı ve gruplara göz atıyoruz.
Zapper kullanıcısının No access to the frontend grubunda bulunduğunu görünce ciğerlerimiz dağlanıyor ve onu bu gruptan kurtarmayı deniyoruz.

Önce GUI erişimi olan bilal isminde bir usergroup oluşturup zapper kullanıcısını bu gruba ekliyoruz. Devamında unutup en çok vakit kaybına uğradığım kısım olan zapper kullanıcısını eski grubundan çıkarma mevzusunu da atlamıyoruz.

Artık GUI erişimi olan bir bir kullanıcımız olduğuna göre yine Zapper:zapper  bilgileriyle giriş yapıyoruz. Bu sefer dashboard erişimi sağlayabildik.

Yazının başında da denk geldiğimiz scripts kısmının bu sefer editleme ekranına erişebildik.

 

Perl ile yazılmış ve bize reverse shell döndürecek olan scripti http://pentestmonkey.net/ sayfasından edindik ve var olan bir scripti editleyerek sistem üzerinden reverse shell alabileceğimiz duruma getirdik.

Netcat aracı ile 1234 numaralı portu dinlerken give_me_shell adını verdiğimiz bu scripti çalıştırdığımızda terminalimize bir reverse shell oturumu düşürmeyi başardık.

python3 -c 'import pty; pty.spawn("/bin/sh")'  komutunu kullanarak python3 aracılığıyla etkileşimli bir shell edindik.

Devamında user.txt okumaya veya karakter sayısını görüntülemeye çalıştığımızda Permission denied hatası aldık. Aldığımız shell oturumu zabbix kullanıcısına ait olduğu için zapper kullanıcısına geçebileceğimiz bir ipucu aramaya başladık.

user.txt dosyasının olduğu dizinde utils isimli bir klasöre denk geldik.
utils klasörünün içerisinde ise zabbix servisini başlatmaya yarayan bir uygulama ve backup.sh isimli bir bash scripti bulduk. Bash scriptinin içeriğini okuduğumuzda bunun bir yedek alma aracı olduğunu anladık. Bu işlemi yaparken de -p parametresiyle verdiği ZippityDoDah stringinin parola olarak kullandığını düşündük.

su zapper  komutu ve ZippityDoDah parolasıyla, Zapper kullanıcısına geçip user.txt okumayı başardık.

Yetki yükseltme aşaması için ilk olarak yine utils klasörü içinde bulunan zabbix-service uygulamasına yöneldik. Zabbix-service uygulamasının yetkilerini incelediğimizde root yetkilerinde çalıştığını da görüyoruz. strings zabbix-service  komutu ile içerisinde geçen stringlere göz atarak incelemeye başladık.

zabbix-service uygulaması çalıştıktan sonra “start or stop?” diye bir soru sorup start cevabını alırsa systemctl komutuyla birlikte zabbix-agent uygulamasını başlatıyor.
systemctl komutu varsayılan olarak /bin klasörü altından çekiliyor. Yani systemctl komutunu manipüle edip kendi komutumuzu çalıştırmak istesek bile PATH değişkeni /bin klasörüne ayarlı olduğundan uygulama çalışırken yine /bin/systemctl dosyasında bulunan komutla zabbix-agent uygulamasını başlatacaktır.
Kısacası yapmamız gereken PATH değişkeniyle oynamak olacak.

export PATH=.  komutu ile PATH değişkenini bulunduğumuz utils klasörüne export ediyoruz. Bundan sonra sistem üzerinde çalıştıracağımız komutları /bin klasörü altından manuel olarak kullanacağız.

PATH değişkeni artık utils klasörü olduğu için zabbix-service uygulaması çalıştığında bize root shell verebilecek bir komutu systemctl içerisine yazarsak zabbix-service uygulamasının çalışmasını durdurup bir root shell alabiliriz.
systemctl isimli bir dosyaya /bin/echo komutuyla /bin/sh -i yazıyoruz.

/bin/chmod +x systmctl  komutuyla systemctl dosyasına çalıştırma yetkisi veriyoruz.

Tüm şartlar oluştuğu için artık ./zabbix-service  komutuyla uygulamayı başlatıyoruz.
start dedikten sonra o mübarek # sembolünü de gördüğümüze göre root shell düşürdük.

Son vuruşu yapıp root.txt okumadan önce /bin dizinine giderek PATH’i yerine oturtuyoruz. Nasıl bulduysak öyle bırakmalıyız.

cat /root/root.txt  komutuyla da root.txt okuduk.

Okuduğunuz için teşekkürler. Sorularınız için bilalkan.com/contact

https://www.linkedin.com/feed/update/urn:li:activity:6505470774004969472

Tags: