OverTheWire - Leviathan Writeups

Leviathan: Level 0 Writeup​

ssh [email protected] -p 2223
password: leviathan0

9096b96f27ce0a17f446cc2ed5d6d3b129ec23b6.png


1


Makinemize giriş yaptık. Hemen bulunduğumuz dizinde neler varmış bir bakalım

2


.backup isimli bir klasör dikkatimizi çekiyor ve içerisine baktığımız zaman bookmarks.html isimli bir dosya olduğunu görüyoruz.

Bunun içerisinde ne varmış bir bakalım…

3


Uzun bir çıktı olduğu için incelemesi zor olacaktı. Bu yüzden leviathan1 kullanıcısı ile herhangi bir bilgi var mı diye grep aracından yardım alıyoruz. Ve leviathan1 kullanıcısına ait parolayı elde ediyoruz.

leviathan1:rioGegei8m

Leviathan: Level 1 Writeup​

ssh [email protected] -p 2223
password: rioGegei8m

İlk yazıda leviathan1 kullanıcısının parolasını elde etmiştik. Şimdi bu kullanıcı ile sisteme girerek leviathan2 kullanıcısına ait parola bilgisini bulmaya çalışacağız
:joy:
ve böyle devam edip gidecek.

1


check isimli bir dosyamız olduğunu görüyoruz. Çalıştıralım bakalım ne işe yarıyormuş

2


Bizden bir password istiyormuş. Burda bizden istediği parolayı öğrenmek için ltrace aracından yardım alacağız. Peki ltrace nedir ?

3


Evet kısaca ltrace şöyle bişiler. İsterseniz daha detaylı araştırabilirsiniz.

ltrace ./check komutunu giriyoruz ve daha sonra rastgele bir parola giriyoruz.

4


Gördüğünüz üzere aslında 3 karakterlik bir passworde ihtiyacımız varmış. Ve bu parolayıda strcmp fonksiyonu ile karşılaştırarak kontrol ediyor. Eee haliyle kontrol ettiği şey bizim parolamız oluyor.

Programımızı normal bir şekilde çalıştırıp bizden istediği parolayı girelim

5


Ve gördüğünüz üzere leviathan2 kullanıcısına geçiş yapmış olduk. Kullanıcılara ait parola bilgileri /etc/leviathan_pass/ dizini altında tutulmakta. İlgili dizinde ilgili dosyamızı okuduğumuz zaman leviathan2 kullanıcısının da parolasını öğrenmiş oluyoruz.

leviathan2:eek:ugahZi8Ta

Leviathan: Level 2 Writeup​

ssh [email protected] -p 2223
password: ougahZi8Ta

8a9c15687f8cb44fd265640c7b83bd4ea2dc801c.png


Elimizde gene 32 bit çalıştırılabilir bir linux dosyası mevcut. Hızlıca bakalım ne işe yarıyormuş

1


Bizden argüman olarak bir dosya istiyor ve daha sonra o dosyanın içerisinde yazan şeyi ekrana basıyor. Eee durum böyle olunca tabi aklımıza ilk olarak leviathan3 kullanıcısının parolasının olduğu dosyayı okutmak geliyor.

2


Ancak o kadar da basit değil
:joy:
Gerçi buraya kadar gelmişiz biraz zor olsun tabi

ltrace ile bi göz gezdirelim arkada ne olaylar dönüyormuş

3


İlk önce okumak istediğimiz dosyanın ne olduğuna bakıyor. Daha sonra bu dosyada yetkimiz var mı yok mu bunu kontrol ediyor. Eğer yetkimiz yok ise içeriğini bize göstermiyor
:thinking:


NOT : Burda yetkimizin olup olmadığını ilk başta bulunan access fonksiyonu ile tespit ediyor. Dosya leviathan3’e ait iken biz leviathan2 kullanıcısı olarak bakmaya çalıştığımızda da haliyle bize göstermiyor

Pekala o zaman biz bunu nasıl okuyacaz ? Yok mudur bunun bir yolu yordamı ? Eh soru olarak böyle bişi koydularsa vardır bişiler heralde
:grin:


Bunu isterseniz uygulamalı olarak gösterelim

#include <stdio.h>
#include <stdlib.h>

int main(void) {
system("/bin/cat 1 2 '1 2'");
}

test-code


Şimdi /bin/cat işlemine 3 tane argüman verdik ve 3 argümanıda ekrana bastı. Burda dikkatimizi çeken birşey var. ‘1 2’ olarak yazdığımız zaman bizim '1 2' isimli dosyamızın içeriğini ekrana basıyor öyle değil mi ? Ancak tırnak ifadeleri olmadan direk 1 2 yazarsam önce 1 isimli dosyanın sonra 2 numaralı dosyayın içeriğini ekrana basıyor.

Yukarda bakmış olduğumuz ltrace çıktısına bakacak olursak eğer girmiş olduğumuz dizini ' ' (tek tırnaklar) arasına almadan direk argüman olarak kullanıyor. Yani ben /etc/leviathan_pass/leviathan3 dosyasını ln komutu yardımıyla bir dosya üzerine linklendirme/bağlantı kurma işlemi gerçekleştirsem ve daha sonra sembolik bağlantı dosyasının adında bir dosya daha oluşturup arasında boşluk bırakarak yanına rastgele bir kelime daha eklesem nasıl olur ?

Örnek verecek olacak olursak eğer;

ln -s /etc/leviathan_pass/leviathan3 leviathan3password
touch leviathan3password\ falanfilan

Artık iki tane dosyam var. Biri direk leviathan3password->/etc/leviathan_pass/leviathan3 diğeri ise 'leviathan3password falanfilan'

Ben eğer argüman olarak leviathan3password falanfilan dosyasını verirsem bu dosyanın izinlere bana ait olduğu için access kontrolünden geçecektir. Daha sonra system fonksiyonu içerisinde gelecektir. Dosyanın yolunu tırnak içerisinde almadığı içinde leviathan3password ve falanfilan isimli iki ayrı dosyayı okuyup ekrana basmaya çalışacaktır.

Sanırım bu kısmı anlatabildim. Eğer kafalarda soru işareti kalmadıysa devam edelim ve bunu uygulayalım

4


Ve gördüğünüz gibi yaptığımız işlem işe yaradı ve leviathan3 kullanıcısının parolasını elde ettik.

leviathan3:Ahdiemoo1j

NOT: Bu şekilde argüman verdiğimiz zaman arkada dönen olayı görmek isteyenler için şunuda şuraya bırakayım

5


Leviathan: Level 3 Writeup​

ssh [email protected] -p 2223
password: Ahdiemoo1j

81d0dbe3a9abea409b2665a947b40c73bb3ddf7c.png


Bu bölümde aslında daha önce yapmış olduğumuz Level 1 çözümünün aynısı. Parolayı girmemizi istediği kısma gelmeden önce şaşırtma amaçlı bir tane daha strcmp fonksiyonu eklenmiş sadece

1


leviathan4:vuH0coox6m

Leviathan: Level 4 Writeup​

ssh [email protected] -p 2223
password: vuH0coox6m

b05cfe6ad40f691e2814edfb1b2b9c2c988a3b44.png


Bize binary olarak bir çıktı veriyor. Bu çıktıyı anlamlandırdığımız zaman büyük ihtimalle bize leviathan5 kullanıcısının parolasını verecektir.

Bunun için ufak bir script işimizi çözecektir

bin = "01010100 01101001 01110100 01101000 00110100 01100011 01101111 01101011 01100101 01101001 00001010"

yeni = bin.split()
decimal = ""

for i in yeni:
decimal += str(int(i, 2))
decimal += " "

password = bytes(map(int, decimal.split())).decode()

print("leviathan5 kullanıcısının parolası : ", password)

1


leviathan5:Tith4cokei

Leviathan: Level 5 Writeup​

ssh [email protected] -p 2223
password: Tith4cokei

36d2bce722d8630004e71d50f8f152de450ac37f.png


Çalıştırıp bir bakalım bu sefer bizi ne bekliyormuş :)

1


Hmm /tmp dizininde bulunan file.log isimli dosyayı okuyormuş. O halde biz okumak istediğimiz /etc/leviathan_pass/leviathan6 dosyasını tmp dizini altında file.log isimli bir dosya ile bağlasak güzel şeyler olur sanırım
:joy:


2


leviathan6:UgaoFee4li

Leviathan: Level 6 Writeup​

ssh [email protected] -p 2223
password: UgaoFee4li

d3c43fd6b3a0b190d5fb03c682b93c97c73c0c5b.png


Bizden 4 rakamlı bir parola istiyor. Hızlıca bir bash script yazalım ve brute-force yapalım :D

#!/bin/bash
for i in {0000..9999}
do
./leviathan6 $i
done

Veya direk terminal üzerinden şunu kullanabilirsiniz…

leviathan6@leviathan:~$ for i in {0000..9999}; do ./leviathan6 $i; done

1


leviathan7:ahy7MaeBo9

Leviathan: Level 7 Writeup​

ssh [email protected] -p 2223
password: ahy7MaeBo9

finish


Evet bu seviyede herhangi bir soru yokmuş sadece bizi tebrik etmek için bir dosya koymuşlar. Bir de çözümünü yazıp paylaşmamamızı rica etmişler ama keşke bunu baştan söyleselerdi
:joy:
Yazı bittikten sonra söylemeleri biraz üzücü oldu :/
 
Üst