“Mr Robot CTF” — TryHackMe Walkthrough (Medium Level CTF)
Bu odada üç adet gizlenmiş anahtarı bulmamız isteniyor. Haydi başlayalım.
1)Açık Port Keşfi
- nmap -sV -n -vv -T5 komutuyla tarama işlemine başlıyoruz.
- -sV parametresi, açık olan portlarda kullanılan hizmetlerin versiyon bilgilerini getirir.
- -n parametresi; verilen ip nin sahip olduğu domain adresinin çözümlemesi yapmamasını sağlar. DNS çözümlemesi yapılmaması taramayı hızlandırır.
- -vv parametresi, verbose demektir yani taramada gerçekleşen adımları ekrana bastırır. v karakteri en fazla vvv olarak kullanılır. v karakteri ne kadar fazla olursa ekrana bastırılan işlemlerin ayrıntıları o kadar artar. Ayrıca bu parametrenin kullanımında, tarama bitmeden açık olan portları görmemizi sağlar. Bu sayede recon(keşif) işlemimiz hızlanır.
- -T5 parametresi, tarama hızının en hızlı şekilde olmasını sağlar. Herhangi bir -T parametresi girilmediğinde nmap -T3 olarak tarama yapar.
- -p parametresi taratmak istediğimiz portları belirtmemizi sağlar.
- Örneğin -p 80 yazarsak sadece 80 portunu tarar. Biz -p- kullanarak 65535 portun hepsini taratıyoruz.
- 22,80,443 portlarının açık olduğunu görüyoruz.
2)Crawling ve Site İçerisinde Bilgi Toplama
- 80 portunun açık olduğunu artık biliyoruz. İlk önce kullanılabilecek bir site olup olmadığını görmek için ana sayfaya giriş yapalım.
- Site bu şekilde kaynak kodlarına bakalım bir ipucu bulabilecek miyiz?
- Herhangi bir ipucu bulamadık.
- Web tabanlı CTF lerde robots.txt gibi dosyaları deneyebiliriz.
- Evet, denememiz sonucunda 1. Key’e ve bir tane wordlist doyasının ismi verilmiş.
- 10.10.32.214/fsocity.dic yazarak wordlisti indirelim ve 10.10.32.214/key-1-of-3.txt yazarak 1. keyi görüntüleyelim.
- Wordlistimiz /home/kali/Downloads dizinine indirildi.
- Elimizde bir adet wordlist var, bir yerde bu wordlisti kullanabiliriz.
- Daha fazla bilgiye ihtiyacımız var, sitede neler olduğunu henüz keşfedemedik.
- Sitede neler olduğunu öğrenmek için crawling işlemlerine başlayalım.
- İşi hızlandırmak adına iki farklı tool ile crawling işlemi yapıyorum.
Gobuster;
- dir ifadesi dosya ve dizin taranacağını belirtir.
- -u parametresi taranacak URL’ i belirlemede kullanılır.
- -w parametresi tarama işleminde kullanılacak wordlisti belirlemede kullanılır.
Dirbuster;
- -u parametresi taranacak URL’ i belirlemede kullanılır.
- -l parametresi tarama işleminde kullanılacak wordlisti belirlemede kullanılır.
İki farklı tool’un bulduğu sonuçlara baktığımızda login adında bir endpoint olduğunu görüyoruz. Bu endpointi keşfedelim.
- 10.10.32.214/login yazdığımızda bizi 10.10.32.214/wp-login.php ‘e yönlendiriyor.
- Bir yönetim paneli giriş sayfasıyla karşılaşıyoruz.
- Default olan kullanıcı adı şifre denemeleri yapalım.
- admin : password olarak yaptığmız denemede başarısız olduk fakat bir şey dükkatimizi çekiyor. Invalid username uyarısı, kullanıcı adının yanlış olduğunu belirtiyor ve bu uyarı brute force saldırılarını kolaylaştıran bir zafiyettir.
- Doğru kullanıcı adını bulduğumuzda, doğru parolayı bulmak için başka bir brute force saldırısı yapabiliriz.
3)Wordlist İşlemleri
- Hatırlarsak bir wordlist indirmiştik bu wordlisti inceleyelim.
- İlk önce içerisinde kaç adet satır olduğuna bakabiliriz.
- wc komutu ile belirttiğimiz parametreyi sayıp ekrana yazdırabiliriz.
- Burada -l parametresiyle line yani satırları saydırmayı belirttik.
- 858160 adet satır bulunuyor ve bu çok fazla biraz daha detaylı inceleme yapalım.
- Dosyanın içerisinde çok fazla satır olduğundan cat ile içerisine girersek vakit kaybederiz.
- Aynı kelimeler birden fazla kullanılmış olabilir. Bunun için sort komutunu kullanalım.
- sort — help komutunu yazalım ve neler kullanabileceğimize bakalım.
- -u komutu aynı olan ifadeleri silip sadece 1 kez yazdırılmasını sağlar. Komutu kullanalım.
- sort -u fsocity.dic > wordlist komutuyla, fsocity.dic dosyasındaki birden fazla geçen aynı metinleri silip sadece 1 kere yazdırma işlemi yaptık ve bu düzenlenmiş halini wordlist adlı bir dosyaya yazdırdık.
- wc -l wordlist yazarak, wordlist dosyasında kaç satır olduğunu kontrol ettik ve 11451 satıra düştüğünü gördük.
- Artık wordlist dosyasını kullanarak brute force saldırısı yapabiliriz.
4)Brute Force
- Bir siteye Brute Force saldırısı yapmanın birden fazla yolu vardır. Sitenin kullanıcı adı ve parolayı hangi yöntemle gönderdiğine bakıp ona göre saldırımızda kullanacağımız parametreleri girmemiz gerekiyor.
- Bunun için rastgele değerler girip deneyelim. Ben admin password deneyeceğim.
- Giriş yapmayı denedim ve girdiğim bilgiler adres çubuğunda görüntülenmedi yani POST metodu kullanılıyor.
- Brute Force saldırısı için hydra, medusa, Burp Suite vb. araçlar kullanabiliriz. Ben hydra kullanıyorum.
- İlk önce Burp Suite’i açmamız gerek, ardından login sayfasında giriş yapmayı deneyeceğiz ve bu isteği burp ile tutacağız. Tuttuğumuz istekte POST metodunun bodysinin içeriğini görüntüleyebiliriz. Elde edeceğimiz POST isteğinin bodysini kullanarak Brute Force Saldırısı yapacağız.
- Burp açalım.
- Proxy kısmından Intercept is on yapalım. Yani yakalamayı açıyoruz.
- Ardından Burp’ un siteyi yakalayabilmesi için proxy ‘i ayarlamamız gerekiyor. Ben Firefox’ un ayarlarına gitmemek için FoxyProxy adlı uzantıyı kullanıyorum fakat yukarıdaki Open browser ‘e tıkladığınızda Yeni bir Chromium tarayıcısı açılır ve bir siteye girdiğimizde Burp siteyi yakalar. Herhangi bir uzantı vb. kurulması şart değildir.
- Burp ayarlarımız tamam olduğuna göre isteği yakalayalım.
- FoxyProxy kullananlar için aşağıdaki gibi Burp ‘u aktif etmek gerekiyor, bu sayede siteler burp’un üzerinden devam eder.
- Username kısmına admin, password kısmına 1234 yazalım.
- Login e basalım ve Burp’un isteği tutup tutmadığına bakalım.
- İsteğimizi tuttuk ve POST Requestimizin bodysini görebiliyoruz.
- Kali’de terminalimizi açalım ve hydra ile brute force saldırısına başlayalım.
hydra -L wordlist -p 1234 10.10.13.252 http-post-form “/wp-login.php:log=^USER^&pwd=1234&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.13.252%2Fwp-admin%2F&testcookie=1:Invalid username” -V -f
Komutu parçalayarak açıklayalım:
- -L parametresi; kullanıcı adını bilmediğimiz için wordlist kullanacağımızı belirtmek için kullanılır. Eğer bir kullanıcı adı verseydik -l admin şeklinde kullanabilirdik.
- -p parametresi; parola vermek istediğimiz için kullandık. Eğer parola vermek yerine wordlist kullanmasını isteseydik -P wordlist komutunu yazacaktık.
- -p 1234 den sonra hedef makinenin IPsi yazılır.
- Hedef IP den sonra, veri gönderen butonun yapısı POST olduğu için http-post-form metodunu belirttik.
- http-post-formdan sonra çift tırnak açılır ve giriş sayfası hangi endpointte olduğu yazlır. /wp-login.php sayfasında olduğu için “/wp-login.php ile başladık.
- “wp-login.php ifadesinden sonra : yazılır ve POST Requestin Body kısmı yazılır. Burp te tuttuğumuz kısımın “ log=admin&pwd=1234&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.13.252%2Fwp-admin%2F&testcookie=1” kısmı POST Requestin bodysi oluyor.
- Body kısmını kopyalayıp yapıştıracağımız yeri anladık fakat body içerisinde değiştirmemiz gereken bir yer var. Body kısmında log=admin olarak istek gidiyor eğer log=admin kısmını log=^USER^ şeklinde düzeltmezsek username kısmı admin olarak denenecektir veya hydra hata verecektir.
- Post Request body yazıldıktan sonra : koyularak sayfada verilen hata yazılır. log=admin&pwd=1234&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.13.252%2Fwp-admin%2F&testcookie=1:Invalid username
- Çift Tırnak kapatılır.
- Burada hydra Invalid username uyarısı almayana kadar devam edecek -f parametresi verdiğimiz için sayfa farklı bir uyarı verdiğinde duracak yani işlem başarılı olacak ve kullanıcı adını elde edeceğiz.
- 1234 parolası ile deneme yaptık ve Elliot kullanıcısının var olduğunu keşfettik. Aynı saldırıyı parolayı bulmak için yapalım .
- İlk önce login sayfasında Username kısmına elliot yazalım ve Password kısmına rasgele bir değer yazıp sitenin vereceği uyarıya bakalım.
- Yanlış Password girdik ve aldığımız uyarı farklı oldu çünkü kullanıcı adını doğru girdik. Sitedeki Uyarı = The password you entered for the username Elliot is incorrect.
- Saldırı için hydra da komutumuzu yazalım
hydra -l Elliot -P wordlist 10.10.13.252 http-post-form “/wp-login.php:log=Elliot&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.13.252%2Fwp-admin%2F&testcookie=1:The password” -V -f
Bu komutta yaptığımız değişiklikler;
- -L wordlist kısmını -l Elliot yaptık, kullanıcı adı vermek istediğimiz için.
- -p 1234 kısmını -P wordlist yaptık çünkü parolayı wordlist ile bulmak için.
- log=^USER^ kısmını log=Elliot yaptık.
- pwd=1234 kısmını pwd=^PASS yaptık^
- Sitenin verdiği uyarıyı Invalid username yapmıştık bu kısıma The password yazdık. Sayfanın verdiği uyarının yazılacağı yere uyarının tümünü yazmaya gerek yok, içerisindeki bir veya iki kelimeyi yazmak yeterli olacaktır.
- Username = Elliot
- Password = ER28–0652
- Brute Force işlemi tamamlandığına göre yönetim paneline giriş yapabiliriz.
5)Yönetim Paneli İşlemleri
- Bulduğumuz bilgilerle giriş yapalım.
- Bir yönetim paneline giriş yapıldığında Reverse Shell alınarak hedef makinede komut çalıştırılabilir. Bunun için reverse shell kodlarını sitedeki herhangi bir sayfanın kodlarıyla değiştirmemiz gerekiyor.
- Wordpress’ te Appearance>Editor kısmında sayfaların kodları yer alır. Belirttiğimiz yolu izleyelim ve herhangi bir sayfanın kodunu reverse shell kodlarıyla değiştirelim.
- Burada isteğe bağlı bir sayfanın kodunu değiştirelim. Ben 404.phpyi seçtim.
- Sağ kısımda Templates bölümünden 404 Template(404.php) ‘ yi seçelim
- 404.php dosyasının kodlarını görüntüledik. İçerisini reverse shell kodlarıyla değiştirelim.
- Düzenlediğimiz 404.php dosyasına şu şekilde erişebiliriz:
- http://10.10.13.252/wp-content/themes/twentyfifteen/404.php
- Reverse Shell kodları için;
- Google ‘a php reverse shell yazalım ve pentestmonkey’in githubdaki sitesine girelim.
- Linke girdik ve dosyalar karşımıza çıktı. php-reverse-shell.php ye tıklayarak içine girelim ve içindeki komutları kopyalayalım.
- Dosyaya girdik ve kodları görüntüledik.
- Raw ‘a tıklayalım ve kodları kopyalama işlemini kolaylaştıralım.
- Sadece kodların yazdığı sayfayı görüntüledik ve CTRL + A yapıp kodları seçtik ve kopyaladık. (Fareyle basılı tutarak seçme işleminden kurtulduk)
- Reverse Shell kodlarını kopyaladığımıza göre 404.php ‘ nin içerisine yapıştıralım.
- Yapıştırma işlemini tamamladık, ip ve portu değiştirme işlemi kaldı.
- $ip kısmına VPN ipmizi kullanacağız. VPN ipsine şu şekilde ulaşabiliriz.
- $port kısmında 1234 yazıyor isteğe bağlı değiştirilebilir, ben 1234 olarak bırakıyorum.
- Düzenlemeleri yaptıktan sonra Update File seçeneğine basarak değiştirdiğimiz 404.php dosyasını değiştiriyoruz.
- Oluşturduğumuz 404.php dosyasını, kalide netcat ile 1234 portunu dinledikten sonra çalıştıralım ve hedef makineye sızmayı başaralım.
- Kalide netcat ile 1234 portunu dinlemeye alalım.
- Ardından 404.phpnin olduğu yolu adres çubuğuna yazalım ve çalıştıralım.
- Dosyamızı çalıştırdık, kalideki netcat oturumuna bakalım shell alabildik mi?
- Evet, shell aldık ve whoami yazarak daemon kullanıcısı olduk.
6)Yetki Yükseltme (Privilege Escalation)
- export TERM=screen komutunu çalıştıralım ve shellimizi daha kullanışlı hale getirelim.
- /home dizinine gidelim ve sistemdeki kullanıcıları keşfedelim.
- robot kullanıcısını keşfettik. robot dizinine girelim ve keşfe devam edelim.
- İçerisinde 2.Key’in olduğu txt dosyası ve içierisinde md5 formatında parola barındıran bir dosya bulduk.
- key-2-of-3.txt ye bakalım.
- Yetkimiz yok, bu yüzden robot kullanıcısına geçmeliyiz.
- password.raw-md5 dosyasını okuyalım ve içindeki hash’i kıralım.
- c3f ile başlayan kısım robot kullanıcısının parolasının hash’idir.
- Bu hashi kopyalayalım ve md5 Decryptor ler ile çözmeye çalışalım.
- Google’da crackstation ‘ ı aratalım ve ilk siteye girelim.
- Hash’i yapıştıralım ve Crack Hashes diyelim.
- Evet, robot kullanıcısının parolasını öğrendik.
- robot kullanıcısına geçiş yapalım.
- robot kullanıcısına geçmek için su robot komutunu yazdık fakat çalışmadı. Bunun için interaktif shelle geçiş yapmamız gerekiyor.
- Google’da pty shell python ‘ ı aratalım.
- İlk siteye girelim.
- İlk sıradaki komutu kopyalayıp shellimizde yapıştıralım.
- İnteraktif shell olduktan sonra robot kullanıcısına geçtik.
- 2. Keye ulaştık.
- root olabilmek için kullanılabilecek SUID dosyalara bakalım. Bunun için;
- Google’a find suid files privilege escalation yazıp aratalım ve ilk siteye girelim.
- Komutu kopyalayıp shellimize yapıştırıp çalıştıralım.
- /usr/local/bin/nmap dikkatimizi çekiyor. Sıradışı bir dosya ve bu dosyayı kullanarak root olmayı deneyelim.
- Google’da gftobins yazarak aratalım ve ilk siteye girelim.
- Arama çubuğuna nmap yazalım ve binary kısmındaki kırmızı nmap yazısına tıklayalım. Böylece nmap ile kullanılabilecek komutları görüntüleyelim.
- b maddesindeki komutları sırasıyla yazalım.
- Root olduk!
- Flagı bulalım bunun için /root klasörüne gidelim ve ls komutunu çalıştıralım.
- Sonuncu anahtarı da bulduk, dosyayı okuyalım.