Merhabalar herkese. Uzun zamandır zafiyetli makine çözümü yapmıyordum. Bu yazıda sizlerle beraber hackNos: Os-hackNos-2.1 isimli zafiyetli makinenin çözümünü inceleyeceğiz.
https://www.vulnhub.com/entry/hacknos-os-hacknos-21,403/
Makine ismi: Os-hackNos-2.1
Yayınlanma Tarihi: 29 Kasım 2019
Yapan: Rahul Gehlaut
Boyut/Format: 1.5GB/OVA
Zorluk: Kolay-Orta
İşletim Sistemi: Linux
Seri: hackNos
Açıklama: Makinedeki 2 flag dosyasını bul. (UserFlag-RootFlag)
Not: Başlamadan önce belirtmek isterim. Bu seriyi oluşturan kişisel VirtualBox üzerinde çalışmışlar. İndirdiğiniz zafiyetli makine VMware 'da düzgün çalışmayacaktır. VirtualBox üzerinden CTF'i çözmenizi öneririm.
Makinemizin IP adresini öğrenmek için terminale netdiscover komutunu girelim. Her zaman bunu kullanıyoruz ama tüm ağı taramak için daha iyi. Normalde arp-scan -l komutunu da kullanabilirsiniz.
Şimdi bi nmap taraması yapalım bakalım sistemimizde hangi portlar açık.
Zafiyetli makinemizde ssh (22) ve http (80) portlarımız açıkmış. 80 portu bildiğiniz üzere bir web servisini dolayısıyla web sitesinin olduğunu gösteriyor. Bakalım site nasıl bişi.
Anasayfada bişi yok gibi duruyor. Biz dirb aracımızla sitenin dizinlerinde bişiler var mı bakalım.
tsweb/ adında bi dizin buldu. Onunda altında neler var diye taramaya devam ederken wp... klasörlerini buldu. Buradan anlıyoruzki tsweb/ dizini bir wordpress sayfası. Bakalım anasayfasında ne var belki bişi buluruz.
Anasayfamızda "Bug-find" başlıklı bir sayfa ile karşılaşıyoruz. Buradan anlıyorumki sistemim wordpress bir yerlerde bug var onu bulmam lazım. Hemen wpscan aracımızı kullanalım. Wordpress sistemler için kullanılabilecek en iyi araç denilebilir. Terminale dönüp aşağıdaki komutu girelim.
-e --> enumerate
ap --> all plugins
Taramamız bittikten sonra Plugin(s) Identified altında sadece 1 tane plugin bulmuş. Bunla alakalı bi exploit, bug var mı internette arama yapalım
En üst sırada, bulduğumuz plugin için bir Local File Inclusion (LFI) zafiyeti ile alakalı exploit buldu. Bakalım ne varmış nasıl sömürülüyormuş.
"Vulnerable code:" kısmında anlatmaya çalıştığı şey, ajax_controller.php dosyasında bir $_GET isteği yapan kod parçası var. Bu GET komutu ile alakalı herhangi bir kontrol yok. Kontrolsüz bir GET isteği varsa eğer orada LFI açığından da söz edilebilir. bWapp, DVWA tarzı pentest lab'larında LFI ile alakalı örneklerde bu tarz GET parametresini sömürebiliyorduk. En bilindik ../etc/passwd dosyasını okuyorduk. Hemen aşağıda da bunla alakalı bi URL yapısını bizlere veriyor. Sitemize geri dönüp linkimizi düzenleyelim. Bakalım passwd dosyasını okuyabilecek miyiz?
LFI açığı sayesinde passwd dosyasını okuyabildik ve en altta flag kullanıcısının şifresi hash'li bir şekilde ortada. Bu hash'i kırabilirsek sisteme girebiliriz. Terminale dönüp hash'imizi bir dosyaya yazalım ve john aracıyla kırma işlemine geçelim.
Not: rockyou dosyası normalde arşivlenmiş haldedir. Daha önce kullanmadıysanız, aşağıdaki komutları sırayla yeni bir terminal açıp giriniz.
cd /usr/share/wordlists/
gzip -d rockyou.txt.gz
passwd dosyasından edindiğimiz hash değerini john aracıyla kırabildik. Şifremiz topsecret. Şimdi flag kullanıcısı için şifre elimizde olduğuna göre ssh bağlantısı yapabiliriz. Yeni bir terminal açıp aşağıdaki komutu girelim.
(Uyarı çıkarsa eğer yes+enter yapın)
Bağlantıyı sağladık içerdeyiz şuan. Dizinler arası geçiş yapmak isterken restricted hatası ile karşılaştım. rbash ile alakalı bir durum. Bizde daha rahat çalışabilmek için flag kullanıcısı için bash shell ekleyelim
Makinede iki adet flag dosyamız vardı. İlk'i genellikle home dizini altında bulunur. ilk flagımızı öğrenmek için home dizine gidelim.
Malesef yetki hatası aldık. Rohit dosyasına erişebilmek için ya root olmamız gerekiyor ya da rohit kullanıcısının bilgilerini öğrenmemiz gerekiyor. Bunun için sistemde uzun süren bir araştırmanın sonunda rohit bilgilerini tutan bir kayıt buldum. Log/Kayıt dosyasına ulaşmak için sırayla aşağıdaki komutları giriniz.
flag kullanıcısı için bulduğumuz hash ile yapısı aynı. Flag için yaptığımız şifre kırma işlemlerini rohit hash'i içinde yapalım.
Hash'i kırma işlemi biraz uzun sürse de rohit kullanıcısı için şifreyi öğrendik. Şimdi sisteme girdiğimiz terminale geri dönüp rohit kullanıcısına geçiş yapalım.
User flag dosyamıza ulaştık. Sırada root dizini altındaki flag dosyasına ulaşmak kaldı. Bunun için root haklarına sahip olmamız gerekiyor. Bunun için terminale sudo su yazalım. rohit kullanıcısı için şifre istiyor. !%hack41 yazıp enterladığımızda root'a geçiş yaptık Artık dosyamızı okumak için gerekli komutları girip arkanıza yaslanabilirsiniz
H4ck3njoy
Elimden geldiğince çözümü anlatmaya çalıştım. Umarım faydalı ve doğru anlatabilmişimdir. Bir başka CTF çözümünde buluşmak üzere Allah'a emanet olun
https://www.vulnhub.com/entry/hacknos-os-hacknos-21,403/
Makine ismi: Os-hackNos-2.1
Yayınlanma Tarihi: 29 Kasım 2019
Yapan: Rahul Gehlaut
Boyut/Format: 1.5GB/OVA
Zorluk: Kolay-Orta
İşletim Sistemi: Linux
Seri: hackNos
Açıklama: Makinedeki 2 flag dosyasını bul. (UserFlag-RootFlag)
Not: Başlamadan önce belirtmek isterim. Bu seriyi oluşturan kişisel VirtualBox üzerinde çalışmışlar. İndirdiğiniz zafiyetli makine VMware 'da düzgün çalışmayacaktır. VirtualBox üzerinden CTF'i çözmenizi öneririm.
Makinemizin IP adresini öğrenmek için terminale netdiscover komutunu girelim. Her zaman bunu kullanıyoruz ama tüm ağı taramak için daha iyi. Normalde arp-scan -l komutunu da kullanabilirsiniz.
Şimdi bi nmap taraması yapalım bakalım sistemimizde hangi portlar açık.
Kod:
nmap -sS -sV -O IPADRESI
Zafiyetli makinemizde ssh (22) ve http (80) portlarımız açıkmış. 80 portu bildiğiniz üzere bir web servisini dolayısıyla web sitesinin olduğunu gösteriyor. Bakalım site nasıl bişi.
Anasayfada bişi yok gibi duruyor. Biz dirb aracımızla sitenin dizinlerinde bişiler var mı bakalım.
Kod:
dirb http://IPADRESI
tsweb/ adında bi dizin buldu. Onunda altında neler var diye taramaya devam ederken wp... klasörlerini buldu. Buradan anlıyoruzki tsweb/ dizini bir wordpress sayfası. Bakalım anasayfasında ne var belki bişi buluruz.
Anasayfamızda "Bug-find" başlıklı bir sayfa ile karşılaşıyoruz. Buradan anlıyorumki sistemim wordpress bir yerlerde bug var onu bulmam lazım. Hemen wpscan aracımızı kullanalım. Wordpress sistemler için kullanılabilecek en iyi araç denilebilir. Terminale dönüp aşağıdaki komutu girelim.
Kod:
wpscan --url IPADRESI/tsweb/ -e ap
-e --> enumerate
ap --> all plugins
Taramamız bittikten sonra Plugin(s) Identified altında sadece 1 tane plugin bulmuş. Bunla alakalı bi exploit, bug var mı internette arama yapalım
En üst sırada, bulduğumuz plugin için bir Local File Inclusion (LFI) zafiyeti ile alakalı exploit buldu. Bakalım ne varmış nasıl sömürülüyormuş.
"Vulnerable code:" kısmında anlatmaya çalıştığı şey, ajax_controller.php dosyasında bir $_GET isteği yapan kod parçası var. Bu GET komutu ile alakalı herhangi bir kontrol yok. Kontrolsüz bir GET isteği varsa eğer orada LFI açığından da söz edilebilir. bWapp, DVWA tarzı pentest lab'larında LFI ile alakalı örneklerde bu tarz GET parametresini sömürebiliyorduk. En bilindik ../etc/passwd dosyasını okuyorduk. Hemen aşağıda da bunla alakalı bi URL yapısını bizlere veriyor. Sitemize geri dönüp linkimizi düzenleyelim. Bakalım passwd dosyasını okuyabilecek miyiz?
Kod:
[B][COLOR=green]##[/COLOR][/B]
[B][COLOR=green]##[/COLOR][/B]
[B][COLOR=green]http://IPADRESI/tsweb/wp-content/plugins/gracemedia-media-player/templates/files/ajax_controller.php?ajaxAction=getIds&cfg=../../../../../../../../../../etc/passwd[/COLOR][/B]
[B][COLOR=green]##[/COLOR][/B]
[B][COLOR=green]##
[/COLOR][/B]
LFI açığı sayesinde passwd dosyasını okuyabildik ve en altta flag kullanıcısının şifresi hash'li bir şekilde ortada. Bu hash'i kırabilirsek sisteme girebiliriz. Terminale dönüp hash'imizi bir dosyaya yazalım ve john aracıyla kırma işlemine geçelim.
Kod:
touch test
Kod:
echo 'HASHDEGERI' > test
Not: rockyou dosyası normalde arşivlenmiş haldedir. Daha önce kullanmadıysanız, aşağıdaki komutları sırayla yeni bir terminal açıp giriniz.
cd /usr/share/wordlists/
gzip -d rockyou.txt.gz
Kod:
john --wordlist=/usr/share/wordlists/rockyou.txt --format=md5crypt-long test
Kod:
john --show --format=md5crypt-long test
passwd dosyasından edindiğimiz hash değerini john aracıyla kırabildik. Şifremiz topsecret. Şimdi flag kullanıcısı için şifre elimizde olduğuna göre ssh bağlantısı yapabiliriz. Yeni bir terminal açıp aşağıdaki komutu girelim.
Kod:
ssh flag@IPADRESI
Kod:
topsecret
Bağlantıyı sağladık içerdeyiz şuan. Dizinler arası geçiş yapmak isterken restricted hatası ile karşılaştım. rbash ile alakalı bir durum. Bizde daha rahat çalışabilmek için flag kullanıcısı için bash shell ekleyelim
Kod:
python -c 'import pty;pty.spawn("/bin/bash")'
Makinede iki adet flag dosyamız vardı. İlk'i genellikle home dizini altında bulunur. ilk flagımızı öğrenmek için home dizine gidelim.
Malesef yetki hatası aldık. Rohit dosyasına erişebilmek için ya root olmamız gerekiyor ya da rohit kullanıcısının bilgilerini öğrenmemiz gerekiyor. Bunun için sistemde uzun süren bir araştırmanın sonunda rohit bilgilerini tutan bir kayıt buldum. Log/Kayıt dosyasına ulaşmak için sırayla aşağıdaki komutları giriniz.
Kod:
cd /var/backups/passbkp/
Kod:
cat md5-hash
flag kullanıcısı için bulduğumuz hash ile yapısı aynı. Flag için yaptığımız şifre kırma işlemlerini rohit hash'i içinde yapalım.
Kod:
touch rohit
Kod:
echo 'HASHDEGERI' > rohit
Kod:
john --wordlist=/usr/share/wordlists/rockyou.txt rohit
Kod:
john --show rohit
Hash'i kırma işlemi biraz uzun sürse de rohit kullanıcısı için şifreyi öğrendik. Şimdi sisteme girdiğimiz terminale geri dönüp rohit kullanıcısına geçiş yapalım.
Kod:
su rohit
Kod:
!%hack41
Kod:
cd /home/rohit
Kod:
cat user.txt
User flag dosyamıza ulaştık. Sırada root dizini altındaki flag dosyasına ulaşmak kaldı. Bunun için root haklarına sahip olmamız gerekiyor. Bunun için terminale sudo su yazalım. rohit kullanıcısı için şifre istiyor. !%hack41 yazıp enterladığımızda root'a geçiş yaptık Artık dosyamızı okumak için gerekli komutları girip arkanıza yaslanabilirsiniz
H4ck3njoy
Elimden geldiğince çözümü anlatmaya çalıştım. Umarım faydalı ve doğru anlatabilmişimdir. Bir başka CTF çözümünde buluşmak üzere Allah'a emanet olun
Son düzenleme: