Merhabalar arkadaşlar, bu yazımda sizlerle InfoSecWarriorCTF – 02 isimli zafiyetli makinenin WriteUp’ını paylaşacağım. Adım adım ekran görüntülerini ekleyerek ve açıklamalar yaparak detaylı bir WriteUp hazırlamaya çalıştım. İyi okumalar dilerim.
Okumanıza başlamadan önce sizlere küçük bir uyarı vermek istiyorum. InfoSecWarriorCTF makinelerinin WriteUp’larını özellikle teknik bilgi gereksinimini en alçak seviyede tutarak hazırlıyorum. Bu sebepten dolayı belirli bir teknik bilgiye sahip kişiler için fazla detay ve açıklama içeren bu InfoSecWarriorCTF WriteUp’ları sıkıcı gelebilir.
O hâlde başlayalım
Step 1 : Öncelikle kendi saldırgan makinemizin IP’sini öğrendik.
Step 2 : “netdiscover” tool’unu kullanarak kurban makinesini tespit ettik.
Step 3 : Kurban makinesi üzerinde çalışan servisleri ve bu servislerin version bilgilerini öğreneceğimiz nmap komutunu çalıştırdık. Nmap çıktısına göre 22. Portta bir SSH servisi çalışıyor ve 56563 portunda ne servisi olduğu nmap tarafından tespit edilemeyen bir servis çalışıyor.
Step 4 : InfoSecWarrior CTF – 01 Makinesi çözümünde SSH ile bağlantı yapmaya çalışırken “isw0” isimli bir kullanıcı hesabı kullanmıştık. Belki bir bağlantısı olabilir diye bu kullanıcıyı kullanarak SSH portuna bağlantı yapmaya çalıştık. Burada bize troll yapılmakla beraber bir ipucu bırakılmış. Makinenin hostname’ine ve Distro(Dağıtım) isimlerine bakın ve bunu “Secure Shell” almak için kullanın diyor.
Step 5 : Makinede 56563. portta çalışan servisi merak ettiğimiz için bir tarayıcı üzerinden gitmeye çalıştık. Saçma bir ekran çıktısı aldık, burada ping atabildiğimiz bir kod parçacığı çalışmakta sanırım. İnternetten 56563 portu ile ilgili biraz araştırma yaptığımızda bir TCP/UDP iletişimi için kullanıldığına dair bir şeyler gördük.
Step 6 : Netcat tool’unu kullanarak ilgili porta erişmek istediğimizde kod parçacığını düzgün şekilde çalıştırabilmiş olduk. Bize kaç adet ping göndermek istediğimizi soruyor.
Step 7 : 3 değerini girdikten sonra 3 adet ping gönderildiğini görüyoruz.
Step 8 : Burada komut çalıştığı için basit “Command Injection” denemeleri yaptık. Fakat her defasında sadece integer(sayısal) değer girmemizi söyleyen bir hata mesajı ile karşılaştık. Ayrıca burada bir terminal değilde “/script.py” isimli bir python dosyasının çalıştığını öğrenmiş olduk.
Step 9 : Python dilinde yazılmış olan scriptlerde input(girdi) zafiyetleri için google üzerinden araştırmalar yaptık ve şu internet sitesine denk geldik.
Step 10 : Input girebileceğimiz kod parçacıklarında RCE(Remote Code Execution) yapmamızı sağlayan örnek bir komut’a denk geldik.
Step 11 : Normalde sayısal bir değer girmemiz gerekirken biz şu komutu yazdık ve gönderdik;
< __import__(“os”).system(“uname -a”) >
Bu komut ile kurban makinesinde “uname -a” komutunu çalıştırmayı denemiş olduk. Ve aynı zamanda çalıştırabildik
Step 12 : Kurban makinesi üzerinde bir bash’e sahip olabilmek için yazdığımız komut şu şekilde;
< __import__(‘os’).system(“bash”) >
Bu komut sayesinde kurban makine üzerinde bir bash’e sahip olduk. Şimdi kurban makinesine sahipmişiz gibi terminal komutları çalıştırabiliriz.
Step 13 : Erişmiş olduğumuz dizinde bir “ls” çalıştırdık ve dizinde var olan dosyaları görüntüledik. “bla2-note” dosyasını görüntülediğimizde “My group password is czNjcjN0. I encoded my gpasswd ” gibi bir çıktı ile karşılaştık.
Step 14 : czNjcjN0 değerini farklı decode türleri ile denedik ve sonunda “Base64” ile decode ettiğimizde “s3cr3t” isimli bir değer elde ettik.
Step 15 : Ayrıca “cat /etc/passwd” komutu ile kullanıcı listesini görüntüledik ve şu kullanıcıları görüntüledik.
Okumanıza başlamadan önce sizlere küçük bir uyarı vermek istiyorum. InfoSecWarriorCTF makinelerinin WriteUp’larını özellikle teknik bilgi gereksinimini en alçak seviyede tutarak hazırlıyorum. Bu sebepten dolayı belirli bir teknik bilgiye sahip kişiler için fazla detay ve açıklama içeren bu InfoSecWarriorCTF WriteUp’ları sıkıcı gelebilir.
O hâlde başlayalım
Step 1 : Öncelikle kendi saldırgan makinemizin IP’sini öğrendik.
Step 2 : “netdiscover” tool’unu kullanarak kurban makinesini tespit ettik.
Step 3 : Kurban makinesi üzerinde çalışan servisleri ve bu servislerin version bilgilerini öğreneceğimiz nmap komutunu çalıştırdık. Nmap çıktısına göre 22. Portta bir SSH servisi çalışıyor ve 56563 portunda ne servisi olduğu nmap tarafından tespit edilemeyen bir servis çalışıyor.
Step 4 : InfoSecWarrior CTF – 01 Makinesi çözümünde SSH ile bağlantı yapmaya çalışırken “isw0” isimli bir kullanıcı hesabı kullanmıştık. Belki bir bağlantısı olabilir diye bu kullanıcıyı kullanarak SSH portuna bağlantı yapmaya çalıştık. Burada bize troll yapılmakla beraber bir ipucu bırakılmış. Makinenin hostname’ine ve Distro(Dağıtım) isimlerine bakın ve bunu “Secure Shell” almak için kullanın diyor.
Step 5 : Makinede 56563. portta çalışan servisi merak ettiğimiz için bir tarayıcı üzerinden gitmeye çalıştık. Saçma bir ekran çıktısı aldık, burada ping atabildiğimiz bir kod parçacığı çalışmakta sanırım. İnternetten 56563 portu ile ilgili biraz araştırma yaptığımızda bir TCP/UDP iletişimi için kullanıldığına dair bir şeyler gördük.
Step 6 : Netcat tool’unu kullanarak ilgili porta erişmek istediğimizde kod parçacığını düzgün şekilde çalıştırabilmiş olduk. Bize kaç adet ping göndermek istediğimizi soruyor.
Step 7 : 3 değerini girdikten sonra 3 adet ping gönderildiğini görüyoruz.
Step 8 : Burada komut çalıştığı için basit “Command Injection” denemeleri yaptık. Fakat her defasında sadece integer(sayısal) değer girmemizi söyleyen bir hata mesajı ile karşılaştık. Ayrıca burada bir terminal değilde “/script.py” isimli bir python dosyasının çalıştığını öğrenmiş olduk.
Step 9 : Python dilinde yazılmış olan scriptlerde input(girdi) zafiyetleri için google üzerinden araştırmalar yaptık ve şu internet sitesine denk geldik.
Step 10 : Input girebileceğimiz kod parçacıklarında RCE(Remote Code Execution) yapmamızı sağlayan örnek bir komut’a denk geldik.
Step 11 : Normalde sayısal bir değer girmemiz gerekirken biz şu komutu yazdık ve gönderdik;
< __import__(“os”).system(“uname -a”) >
Bu komut ile kurban makinesinde “uname -a” komutunu çalıştırmayı denemiş olduk. Ve aynı zamanda çalıştırabildik
Step 12 : Kurban makinesi üzerinde bir bash’e sahip olabilmek için yazdığımız komut şu şekilde;
< __import__(‘os’).system(“bash”) >
Bu komut sayesinde kurban makine üzerinde bir bash’e sahip olduk. Şimdi kurban makinesine sahipmişiz gibi terminal komutları çalıştırabiliriz.
Step 13 : Erişmiş olduğumuz dizinde bir “ls” çalıştırdık ve dizinde var olan dosyaları görüntüledik. “bla2-note” dosyasını görüntülediğimizde “My group password is czNjcjN0. I encoded my gpasswd ” gibi bir çıktı ile karşılaştık.
Step 14 : czNjcjN0 değerini farklı decode türleri ile denedik ve sonunda “Base64” ile decode ettiğimizde “s3cr3t” isimli bir değer elde ettik.
Step 15 : Ayrıca “cat /etc/passwd” komutu ile kullanıcı listesini görüntüledik ve şu kullanıcıları görüntüledik.