Merhabalar herkese. Bu yazıda sizlerle beraber hackNos serisinin Os-hackNos-3 isimli zafiyetli makinenin çözümünü inceleyeceğiz.
https://www.vulnhub.com/entry/hacknos-os-hacknos-3,410/
Makine ismi: Os-hackNos-3
Yayınlanma Tarihi: 14 Aralık 2019
Yapan: Rahul Gehlaut
Boyut/Format: 1.8GB/OVA
Zorluk: 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.
İlk olarak makinemizin ip adresini öğrenmek için terminale arp-scan -l yazalım.
IP adresimizi öğrendikten sonra nmap taraması ile makinemizde hangi portlar açıkmış bakalım.
-A ALL demek detaylı arama için kullanılır
-p- tüm portları tarar. (1-65536)
Zafiyetli makinemizde 22 (ssh) ve 80 (http) portları açık. WebSec başlığına sahip web sitesinde bakmak için tarayıcımıza ip adresini yazalım.
Bir resim ve en alttada 2 satır yazı olduğunu görüyoruz. Normal ip adresine dizin taraması (dirb taraması) yaptığımda bişi bulamadım. O yüzden onu burada göstermiyorum. WebSec ile alakalı internette bakınsamda oradan da bişi çıkmadı. Bi yarım saatlik uğraşın ardından dizin olduğunu fark ettim. URL sonuna /websec yazıp enterlayalım
Daha düzenli bir websitesi bulabildik. Şimdi bu dizinle alakalı bi dirb taraması yapalım neler bulucaz bakalım.
Düzenli bir dosya yapısı olduğunu görüyoruz. Hazır bi sistem olabileceğini düşünüyorum. Kontrol etmek için /admin dizinine gidip bakalım.
Gila CMS hazır sistemin login sayfası karşımıza geldi. İlk olarak admin:admin tarzı basit login bilgilerini denemek istiyorum ama e-mail input kısmı .. @... tarzı gerçek bi mail adresi istiyor. Düz metin kabul etmiyor. websec sayfasını incelediğimde One Page bi tema olduğunu fark ediyorum ve contact kısmında gözüme bi email takılıyor. [email protected] bu bilgi ile bi giriş denemesi yapalım.
Login: [email protected]
Pass: test
Bunu yapmamızın sebebi login sayfası bulduğumuz zaman brute force atak yapmak mantıklı oluyor. Bunun için bi hata mesajı alıp almadığımızı öğrenmek bize fayda sağlayacak. Gördüğünüz gibi "Wrong email or password" hatası geri döndü bize. Şimdi elimde bi wordlist eksik. Onu da tamamlamak için cewl aracından yararlanacağız. cewl aracı kısaca websitesi üzerinde bulduğu kelimelerden bir wordlist oluşturmaya yarıyor. Bizde terminale zafiyetli makinemizin web sayfası üzerinden bir wordlist oluşturalım. Aşağıdaki komutu terminale yazalım.
Elimde bir adet email adresi ve site ile alakalı oluşturduğum wordlist var. Şimdi brute force atak yapabilirim. Bunun için login sayfamızda post isteğinin nasıl gönderildiğini öğrenmek için tarayıcımızdan yardım almalıyız. Bunun için F12 Öğeyi incele kısmını açalım. Network sekmesine gelip giriş bilgilerini dolduralım. Login butonuna bastığımda Network sekmemize istekler düşecek. Bu istekler arasından POST methodlu index.php dosyası ile alakalı pakete tıklayınız. Sağ tarafta paket ile alakalı bilgileri göreceksiniz. Headers kısmında ilk kutuda Edit and Resend butonu var ona tıklayıp Request Body kısmında post isteğimizin nasıl gönderildiğini öğreniyoruz. [Bu kısmı biraz karmaşık anlattığım için kusura bakmayın :/]
Şimdi elimde bir tane email bir tane wordlist ve post işlemi için gerekli bilgileri biliyorum. Brute force atak yapmak için hydra aracını kullanacağız burada. Terminale aşağıdaki komutu girdiğimizde hydra bizim için login sayfasına brute force atak yapmaya başlayacak.
-l --> kullanıcı adı bilgisi(-L kullanıcı adı wordlist dosyası)
-P --> password için wordlist
http-post-form --> login sayfası için kullanması gereken method parametresi
:F --> Failed/ Bize geri dönen hata mesajı
Burada hydra ":F=Wrong..." hata mesajı döndürmeyen bişi bulursa bize şifreyi bulduğunu söylüyor. hydra doğru ve detaylı parametreler kullanıldığı zaman çok iyi bruteforce atak yapmamızı sağlıyor. Giriş bilgilerimizi bulduğumuza göre login sayfasına geri dönüp bilgileri girelim.
Panele giriş sağladık. Paneli biraz incelediğimiz zaman Content kısmında File Manager kısmı bulunmakta.
Buraya baktığımız zaman sistemde bulunan dosyaların kodları ile alakalı işlemler yapılabileceğini görebiliyorum.
Sisteme sızabilmem için zafiyetli makineden bana shell dönmesi gerekiyor. Dosyalarda düzenleme de yapabildiğime göre reverse shell kodlarımızı burada çalıştırabilir ve sistemden bize shell döndürebiliriz. Reverse Shell için me-ta-sploit de kullanabilirsiniz ama ben size elle de nasıl yapıldığını göstermek için manuel yolu anlatacağım. Bunun için bize reverse shell yapan php kodu lazım. Bunu temin etmek için pentestmonkey sitesinden yararlanacağız.
Sıkıştırılmış dosyamızı indirdikten sonra yeni bir terminal açıp aşağıdaki komutları sırasıyla girip kodları alalım.
(Mousepad yerine aktif kullandığınız text editörünü yazabilirsiniz.)
.php dosyamızda bulunan kodları kopyalayıp panelimizdeki index.php dosyasına yapıştıralım. Bu kodlarda düzelemeniz gereken 2 tane yer var. $ip ve $port kısımlarını kendinize göre düzenleyiniz. port numarası popüler portlar dışında bişi yazmamızda önem var yoksa hata alma ihtimaliniz bulunuyor. 4444, 1234 tarzı port numaralarını kullanabilirsiniz. Ben örnekte 1526'yı kullandım. ip adresiniz zaten ifconfig
Gerekli değişikleri yaptıktan sonra save diyip kaydedelim. Daha sonra yeni bir terminal açıp aşağıdaki komutu yazalım.
1526 portunu dinlemeye aldık. Şimdi tarayıcımızda yeni bir sekme açıp 192.168.1.41/websec/ yazabilirsiniz veya zaten açık bir sekmede varsa F5 ile sayfayı yenileyiniz. Bu işlemi bir kere yaptıktan sonra site ile işimiz kalmıyor çünkü terminale geri döndüğümüzde (portu dinlemeye aldığımız terminal) zafiyetli makineden bize shell döndürebildik
www-data kullanıcısı (neredeyse 0 hakka sahip kullanıcı yani) ile sisteme girebildik. Sistemi altını üstüne getirdim ama yetki yükseltme işlemini yapabileceğim bişi bulamadım. Bi kaç bulduğum yöntemde çalışmadı. Bende yine website üzerinden bişiler öğrenebilmek için /var dizininde aramalar yaptım. Uzun bi aramanın sonunda garip bir dosya buldum. Bu dosyaya ulaşmak için sırasıyla aşağıdaki komutları girelim.
Google üzerinden biraz araştırma yaptıktan sonra decode edilebilecek bir metin olduğunu buluyorum. Decode edebilmek için google'a search edelim.
Siteye gittiğinizde alt tarafta "Decode fake spreadsheet new" kısmına tıklayalım. Daha sonra zafiyetli makinemizde bulduğumuz metni buraya yapıştıralım ve decode yazalım.
Artık elimde bir şifre var. Daha önce sistemde yetki yükseltme yapılabilecek bişiler denerken /home dizini altında blackdevil isimli bir dizin bulmuştum. Biliyorsunuz ki sistemdeki diğer kullanıcılar /home dizini altında dosyaları olur. blackdevil sistemde kayıtlı bir kullanıcı. home dizini altında başka bir klasör de bulunmamakta. Bir diğer yöntem de zaten /etc/passwd dosyasını okumak. Oradan da kullanıcıları tespit etmek mümkün. Bulduğum şifreyi denemek için sisteme sızdığımız terminale dönüp aşağıdaki komutu yazalım.
Blackdevil kullanıcısına geçebildik ve ilk flag dosyamızı (user.txt) okuduk. Şimdi son olarak /root dizini altındaki flag dosyamıza erişmek kaldı. Bunun için yetki yükseltmemize ihtiyacımız var. Bunun için terminale sudo -l yazalım. Bizden şifre isteyecek blackdevil kullanıcısı için bulduğumuz şifreyi girelim. Görüyoruz ki sudo zafiyeti sistemde bulunmakta terminale sudo su yazalım.
H4ck3njoy
Elimden geldiğince çözümü anlatmaya çalıştım. Umarım faydalı ve doğru anlatabilmişimdir. Biraz karmaşık ve uzun anlatmış olabilirim onun için şimdiden özür dilerim ama takıldığınız yerleri sorun yardımcı olurum. Bir başka CTF çözümünde buluşmak üzere Allah'a emanet olun
https://www.vulnhub.com/entry/hacknos-os-hacknos-3,410/
Makine ismi: Os-hackNos-3
Yayınlanma Tarihi: 14 Aralık 2019
Yapan: Rahul Gehlaut
Boyut/Format: 1.8GB/OVA
Zorluk: 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.
İlk olarak makinemizin ip adresini öğrenmek için terminale arp-scan -l yazalım.
IP adresimizi öğrendikten sonra nmap taraması ile makinemizde hangi portlar açıkmış bakalım.
Kod:
nmap -A -p- 192.168.1.41
-p- tüm portları tarar. (1-65536)
Zafiyetli makinemizde 22 (ssh) ve 80 (http) portları açık. WebSec başlığına sahip web sitesinde bakmak için tarayıcımıza ip adresini yazalım.
Bir resim ve en alttada 2 satır yazı olduğunu görüyoruz. Normal ip adresine dizin taraması (dirb taraması) yaptığımda bişi bulamadım. O yüzden onu burada göstermiyorum. WebSec ile alakalı internette bakınsamda oradan da bişi çıkmadı. Bi yarım saatlik uğraşın ardından dizin olduğunu fark ettim. URL sonuna /websec yazıp enterlayalım
Kod:
http://192.168.1.41/websec
Daha düzenli bir websitesi bulabildik. Şimdi bu dizinle alakalı bi dirb taraması yapalım neler bulucaz bakalım.
Kod:
dirb http://192.168.1.41/websec
Düzenli bir dosya yapısı olduğunu görüyoruz. Hazır bi sistem olabileceğini düşünüyorum. Kontrol etmek için /admin dizinine gidip bakalım.
Gila CMS hazır sistemin login sayfası karşımıza geldi. İlk olarak admin:admin tarzı basit login bilgilerini denemek istiyorum ama e-mail input kısmı .. @... tarzı gerçek bi mail adresi istiyor. Düz metin kabul etmiyor. websec sayfasını incelediğimde One Page bi tema olduğunu fark ediyorum ve contact kısmında gözüme bi email takılıyor. [email protected] bu bilgi ile bi giriş denemesi yapalım.
Login: [email protected]
Pass: test
Bunu yapmamızın sebebi login sayfası bulduğumuz zaman brute force atak yapmak mantıklı oluyor. Bunun için bi hata mesajı alıp almadığımızı öğrenmek bize fayda sağlayacak. Gördüğünüz gibi "Wrong email or password" hatası geri döndü bize. Şimdi elimde bi wordlist eksik. Onu da tamamlamak için cewl aracından yararlanacağız. cewl aracı kısaca websitesi üzerinde bulduğu kelimelerden bir wordlist oluşturmaya yarıyor. Bizde terminale zafiyetli makinemizin web sayfası üzerinden bir wordlist oluşturalım. Aşağıdaki komutu terminale yazalım.
Kod:
cewl http://192.168.1.41/websec/ -d 2 -w wordlist.txt
Elimde bir adet email adresi ve site ile alakalı oluşturduğum wordlist var. Şimdi brute force atak yapabilirim. Bunun için login sayfamızda post isteğinin nasıl gönderildiğini öğrenmek için tarayıcımızdan yardım almalıyız. Bunun için F12 Öğeyi incele kısmını açalım. Network sekmesine gelip giriş bilgilerini dolduralım. Login butonuna bastığımda Network sekmemize istekler düşecek. Bu istekler arasından POST methodlu index.php dosyası ile alakalı pakete tıklayınız. Sağ tarafta paket ile alakalı bilgileri göreceksiniz. Headers kısmında ilk kutuda Edit and Resend butonu var ona tıklayıp Request Body kısmında post isteğimizin nasıl gönderildiğini öğreniyoruz. [Bu kısmı biraz karmaşık anlattığım için kusura bakmayın :/]
Şimdi elimde bir tane email bir tane wordlist ve post işlemi için gerekli bilgileri biliyorum. Brute force atak yapmak için hydra aracını kullanacağız burada. Terminale aşağıdaki komutu girdiğimizde hydra bizim için login sayfasına brute force atak yapmaya başlayacak.
Kod:
[B][COLOR=Cyan]##[/COLOR][/B]
[B][COLOR=Cyan]##[/COLOR][/B]
[B][COLOR=Cyan]hydra -l [email protected] -P wordlist.txt 192.168.1.41 http-post-form "/websec/admin/:username=^USER^&password=^PASS^:F=Wrong email or password"[/COLOR][/B]
[B][COLOR=Cyan]##[/COLOR][/B]
[B][COLOR=Cyan]##[/COLOR][/B]
-l --> kullanıcı adı bilgisi(-L kullanıcı adı wordlist dosyası)
-P --> password için wordlist
http-post-form --> login sayfası için kullanması gereken method parametresi
:F --> Failed/ Bize geri dönen hata mesajı
Burada hydra ":F=Wrong..." hata mesajı döndürmeyen bişi bulursa bize şifreyi bulduğunu söylüyor. hydra doğru ve detaylı parametreler kullanıldığı zaman çok iyi bruteforce atak yapmamızı sağlıyor. Giriş bilgilerimizi bulduğumuza göre login sayfasına geri dönüp bilgileri girelim.
Panele giriş sağladık. Paneli biraz incelediğimiz zaman Content kısmında File Manager kısmı bulunmakta.
Buraya baktığımız zaman sistemde bulunan dosyaların kodları ile alakalı işlemler yapılabileceğini görebiliyorum.
Sisteme sızabilmem için zafiyetli makineden bana shell dönmesi gerekiyor. Dosyalarda düzenleme de yapabildiğime göre reverse shell kodlarımızı burada çalıştırabilir ve sistemden bize shell döndürebiliriz. Reverse Shell için me-ta-sploit de kullanabilirsiniz ama ben size elle de nasıl yapıldığını göstermek için manuel yolu anlatacağım. Bunun için bize reverse shell yapan php kodu lazım. Bunu temin etmek için pentestmonkey sitesinden yararlanacağız.
Kod:
http://pentestmonkey.net/tools/web-shells/php-reverse-shell
Sıkıştırılmış dosyamızı indirdikten sonra yeni bir terminal açıp aşağıdaki komutları sırasıyla girip kodları alalım.
Kod:
cd Downloads/
Kod:
tar -xf php-reverse-shell-1.0.tar.gz
Kod:
cd php-reverse-shell-1.0/
Kod:
mousepad php-reverse-shell.php
.php dosyamızda bulunan kodları kopyalayıp panelimizdeki index.php dosyasına yapıştıralım. Bu kodlarda düzelemeniz gereken 2 tane yer var. $ip ve $port kısımlarını kendinize göre düzenleyiniz. port numarası popüler portlar dışında bişi yazmamızda önem var yoksa hata alma ihtimaliniz bulunuyor. 4444, 1234 tarzı port numaralarını kullanabilirsiniz. Ben örnekte 1526'yı kullandım. ip adresiniz zaten ifconfig
Gerekli değişikleri yaptıktan sonra save diyip kaydedelim. Daha sonra yeni bir terminal açıp aşağıdaki komutu yazalım.
Kod:
nc -lvp 1526
1526 portunu dinlemeye aldık. Şimdi tarayıcımızda yeni bir sekme açıp 192.168.1.41/websec/ yazabilirsiniz veya zaten açık bir sekmede varsa F5 ile sayfayı yenileyiniz. Bu işlemi bir kere yaptıktan sonra site ile işimiz kalmıyor çünkü terminale geri döndüğümüzde (portu dinlemeye aldığımız terminal) zafiyetli makineden bize shell döndürebildik
www-data kullanıcısı (neredeyse 0 hakka sahip kullanıcı yani) ile sisteme girebildik. Sistemi altını üstüne getirdim ama yetki yükseltme işlemini yapabileceğim bişi bulamadım. Bi kaç bulduğum yöntemde çalışmadı. Bende yine website üzerinden bişiler öğrenebilmek için /var dizininde aramalar yaptım. Uzun bi aramanın sonunda garip bir dosya buldum. Bu dosyaya ulaşmak için sırasıyla aşağıdaki komutları girelim.
Kod:
cd /var/local
Kod:
ls -al
Kod:
cat database
Google üzerinden biraz araştırma yaptıktan sonra decode edilebilecek bir metin olduğunu buluyorum. Decode edebilmek için google'a search edelim.
Siteye gittiğinizde alt tarafta "Decode fake spreadsheet new" kısmına tıklayalım. Daha sonra zafiyetli makinemizde bulduğumuz metni buraya yapıştıralım ve decode yazalım.
Artık elimde bir şifre var. Daha önce sistemde yetki yükseltme yapılabilecek bişiler denerken /home dizini altında blackdevil isimli bir dizin bulmuştum. Biliyorsunuz ki sistemdeki diğer kullanıcılar /home dizini altında dosyaları olur. blackdevil sistemde kayıtlı bir kullanıcı. home dizini altında başka bir klasör de bulunmamakta. Bir diğer yöntem de zaten /etc/passwd dosyasını okumak. Oradan da kullanıcıları tespit etmek mümkün. Bulduğum şifreyi denemek için sisteme sızdığımız terminale dönüp aşağıdaki komutu yazalım.
Kod:
su blackdevil
Kod:
Security@x@
Kod:
cd /home/blackdevil
Kod:
cat user.txt
Blackdevil kullanıcısına geçebildik ve ilk flag dosyamızı (user.txt) okuduk. Şimdi son olarak /root dizini altındaki flag dosyamıza erişmek kaldı. Bunun için yetki yükseltmemize ihtiyacımız var. Bunun için terminale sudo -l yazalım. Bizden şifre isteyecek blackdevil kullanıcısı için bulduğumuz şifreyi girelim. Görüyoruz ki sudo zafiyeti sistemde bulunmakta terminale sudo su yazalım.
Kod:
sudo su
Kod:
id
Kod:
cd /root
Kod:
cat root.txt
H4ck3njoy
Elimden geldiğince çözümü anlatmaya çalıştım. Umarım faydalı ve doğru anlatabilmişimdir. Biraz karmaşık ve uzun anlatmış olabilirim onun için şimdiden özür dilerim ama takıldığınız yerleri sorun yardımcı olurum. Bir başka CTF çözümünde buluşmak üzere Allah'a emanet olun
Son düzenleme: