OverTheWire - Leviathan Writeups

Leviathan: Level 0 Writeup

ssh leviathan0@leviathan.labs.overthewire.org -p 2223
password: leviathan0

0

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 leviathan1@leviathan.labs.overthewire.org -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:ougahZi8Ta

Leviathan: Level 2 Writeup

ssh leviathan2@leviathan.labs.overthewire.org -p 2223
password: ougahZi8Ta

0

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 leviathan3@leviathan.labs.overthewire.org -p 2223
password: Ahdiemoo1j

0

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 leviathan4@leviathan.labs.overthewire.org -p 2223
password: vuH0coox6m

0

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 leviathan5@leviathan.labs.overthewire.org -p 2223
password: Tith4cokei

0

Ç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 leviathan6@leviathan.labs.overthewire.org -p 2223
password: UgaoFee4li

0

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 leviathan7@leviathan.labs.overthewire.org -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 :/

2 Beğeni