Zorluk: Medium
Merhaba, bu yazımda TryHackMe sitesinde bulunan Wonderland isimli makinenin çözümünü anlatacağım.
Nmap taraması yaparak başlayalım.
Kod:
nmap -sC -sV -oN makineIp
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-04 23:05 EET
Nmap scan report for 10.10.210.206 (10.10.210.206)
Host is up (0.13s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 8e:ee:fb:96:ce:ad:70:dd:05:a9:3b:0d:b0:71:b8:63 (RSA)
| 256 7a:92:79:44:16:4f:20:43:50:a9:a8:47:e2:c2:be:84 (ECDSA)
|_ 256 00:0b:80:44:e6:3d:4b:69:47:92:2c:55:14:7e:2a:c9 (ED25519)
80/tcp open http Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
80 portu var makineye ait bir website var demek ki tarayıcımıza http://makineIP yazarak giriş yapalım.
Çıkan sayfada tavşanı takip et yazısını görüyoruz başka bir ipucu varmı diye sayfanın kaynağını görüntülüyorum.
Sayfa kaynak koduna baktığımızdada herhangi birşey bulamadım bu yüzden dirb kullanarak dizin taraması yapalım.
Çıkan dizinlere baktım, /img dizininde birkaç resim vardı ama ip ucu yoktu buyüzden /r dizinine bakıyorum.
/r dizinine girdiğimde bana devam etmemi söyledi bayabir düşündükten sonra ana sayfadaki tavşanı takip et yazısı aklıma geldi, bende uzantıyı şöyle devam ettirdim /r/a/b/b/i/t/ böylece gizli sayfaya ulaşmış oldum.
Sayfada bulunan yazıları okuduğumda herhangi bir ipucu bulamadım, sayfanın kaynağına baktım burada bana bir kullanıcı adı ve parola verdiğini gördüm bunları ssh bağlantısı için kullanabiliriz.
Bize verdikleri ile ssh bağlantısı yapalım.
Başarıyla bağlandık. Öncelikle “/home” dizini altında kaç kullanıcımız olduğuna baktım.
Sudo-l yazarak makinede root olmadan erişebileceğim dosyalara bakıyorum. privesc için bir python dosyasını kullanıcı rabbit olarak çalıştırabileceğimizi buldum.
Cat komutu kullanarak dosyanın içeriğini görüntüledim. Dosyanın içerisinde şiir vardı pek bir şey anlayamadım.
Dosyayı çalıştırdık ama pek bir şey olmadı. Burada yapabileceğimiz şey, Python Library Hijacking yapmaktır. Bu teknik ile rabbit isimli kullanıcıdan bir shell almak için random isimli modülü manipüle edebilir ve dosyayı tekrar çalıştırabiliriz. Bunu yapabilmemizin nedeni Python'un temelleri altında yatıyor. Bir Python dosyasını çalıştırdığımızda, Python dosyasının içine aktarılan modüller önce mevcut çalışma dizininde kontrol ediliyor. Mevcut çalışma dizini altında bu modüller yoksa, Python kendi modüllerini arar.
Böylelikle makinede rabbit kullanıcısı olabildik. Makinede rabbit dizinine giderek içersidinde neler var bakalım. User.txt maalesef burada yok ctf sayfasınıdaki ipucuna tıklıyorum.
Ctf sayfasındaki ipucuna tıkladığımda, mesaj bize burada her şeyin alt üst olduğunu söylüyor. Biraz düşündükten sonra user flag'ın root dizininin altında olduğunu anladım.
Şimdi User Flag aldık devam edebiliriz. Öncelikle SUID bit setine de sahip olan teaParty isimli dosyayı inceleyelim.
Dosya türünü kontrol ettiğimizde ELF formatında olduğunu yani çalıştırılabilir bir dosya olduğunu görüyoruz. Dosyayı çalıştırdığımızda, verdiğimiz girdi ne olursa olsun “Segmentation error (core dumped)” hata mesajını görüyoruz. "Muhtemelen Pzt, 10 Ag 2021 18:24:02 +0000" yazan satır. Buradan anladığımız şu ki, dosyada o anki tarih verisini çeken bir değişken var.
Bunu yapmak için PATH değişkeni aracılığıyla Yürütme Akışı Kaçırma yapabiliriz. Çünkü; PATH değişkeni, UNIX sistemlerinde yürütülebilir programları tutan dizinleri belirten değişkendir. Ayrıca bir SUID bit set dosyası(teaParty) olduğundan, bu dosyanın PATH değişkenini değiştirebilir ve kullanıcıdan bu dosyanın gerçekte ait olduğu bir shell elde edebiliriz. Bunu yapmak için, bu dizinde date adlı başka bir dosya oluşturmamız gerekiyor.
Dosyayı oluşturduktan sonra ele geçirmek için PATH değişkenini ayarlayalım ve dosyayı tekrar çalıştıralım.
Execution Flow Hijacking'i başarıyla gerçekleştirdik ve hatter adlı kullanıcıya erişebildik. Bir sonraki adım, bu kullanıcının ana dizini altında ne olduğunu inceledim ve password.txt adlı bir dosya ile karşılaştım.
Bir parola var, sanırım ssh bağlantısını kullanarak hatter olarak girebilmek için bu parolayı kullanabiliriz.
Çıkan sayfada tavşanı takip et yazısını görüyoruz başka bir ipucu varmı diye sayfanın kaynağını görüntülüyorum.
Sayfa kaynak koduna baktığımızdada herhangi birşey bulamadım bu yüzden dirb kullanarak dizin taraması yapalım.
Çıkan dizinlere baktım, /img dizininde birkaç resim vardı ama ip ucu yoktu buyüzden /r dizinine bakıyorum.
/r dizinine girdiğimde bana devam etmemi söyledi bayabir düşündükten sonra ana sayfadaki tavşanı takip et yazısı aklıma geldi, bende uzantıyı şöyle devam ettirdim /r/a/b/b/i/t/ böylece gizli sayfaya ulaşmış oldum.
Sayfada bulunan yazıları okuduğumda herhangi bir ipucu bulamadım, sayfanın kaynağına baktım burada bana bir kullanıcı adı ve parola verdiğini gördüm bunları ssh bağlantısı için kullanabiliriz.
Bize verdikleri ile ssh bağlantısı yapalım.
Başarıyla bağlandık. Öncelikle “/home” dizini altında kaç kullanıcımız olduğuna baktım.
Sudo-l yazarak makinede root olmadan erişebileceğim dosyalara bakıyorum. privesc için bir python dosyasını kullanıcı rabbit olarak çalıştırabileceğimizi buldum.
Cat komutu kullanarak dosyanın içeriğini görüntüledim. Dosyanın içerisinde şiir vardı pek bir şey anlayamadım.
Dosyayı çalıştırdık ama pek bir şey olmadı. Burada yapabileceğimiz şey, Python Library Hijacking yapmaktır. Bu teknik ile rabbit isimli kullanıcıdan bir shell almak için random isimli modülü manipüle edebilir ve dosyayı tekrar çalıştırabiliriz. Bunu yapabilmemizin nedeni Python'un temelleri altında yatıyor. Bir Python dosyasını çalıştırdığımızda, Python dosyasının içine aktarılan modüller önce mevcut çalışma dizininde kontrol ediliyor. Mevcut çalışma dizini altında bu modüller yoksa, Python kendi modüllerini arar.
Böylelikle makinede rabbit kullanıcısı olabildik. Makinede rabbit dizinine giderek içersidinde neler var bakalım. User.txt maalesef burada yok ctf sayfasınıdaki ipucuna tıklıyorum.
Ctf sayfasındaki ipucuna tıkladığımda, mesaj bize burada her şeyin alt üst olduğunu söylüyor. Biraz düşündükten sonra user flag'ın root dizininin altında olduğunu anladım.
Şimdi User Flag aldık devam edebiliriz. Öncelikle SUID bit setine de sahip olan teaParty isimli dosyayı inceleyelim.
Dosya türünü kontrol ettiğimizde ELF formatında olduğunu yani çalıştırılabilir bir dosya olduğunu görüyoruz. Dosyayı çalıştırdığımızda, verdiğimiz girdi ne olursa olsun “Segmentation error (core dumped)” hata mesajını görüyoruz. "Muhtemelen Pzt, 10 Ag 2021 18:24:02 +0000" yazan satır. Buradan anladığımız şu ki, dosyada o anki tarih verisini çeken bir değişken var.
Bunu yapmak için PATH değişkeni aracılığıyla Yürütme Akışı Kaçırma yapabiliriz. Çünkü; PATH değişkeni, UNIX sistemlerinde yürütülebilir programları tutan dizinleri belirten değişkendir. Ayrıca bir SUID bit set dosyası(teaParty) olduğundan, bu dosyanın PATH değişkenini değiştirebilir ve kullanıcıdan bu dosyanın gerçekte ait olduğu bir shell elde edebiliriz. Bunu yapmak için, bu dizinde date adlı başka bir dosya oluşturmamız gerekiyor.
Dosyayı oluşturduktan sonra ele geçirmek için PATH değişkenini ayarlayalım ve dosyayı tekrar çalıştıralım.
Execution Flow Hijacking'i başarıyla gerçekleştirdik ve hatter adlı kullanıcıya erişebildik. Bir sonraki adım, bu kullanıcının ana dizini altında ne olduğunu inceledim ve password.txt adlı bir dosya ile karşılaştım.
Bir parola var, sanırım ssh bağlantısını kullanarak hatter olarak girebilmek için bu parolayı kullanabiliriz.
Kod:
$ ssh hatter@$ip
[email protected]'s password:
hatter@wonderland:~$ whoami;id
hatter
uid=1003(hatter) gid=1003(hatter) groups=1003(hatter)
Kod:
atter@wonderland:~$ getcap -r / 2>/dev/null
/usr/bin/perl5.26.1 = cap_setuid+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/bin/perl = cap_setuid+ep
Perl'in CAP_SETUID özelliğine sahip olduğunu görebiliriz, bu da UID'yi değiştirebileceğimiz anlamına gelir. GTFOBINS işimize yarar.
Kod:
hatter@wonderland:~$ perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
# whoami;id
root
uid=0(root) gid=1003(hatter) groups=1003(hatter)
Root olduk son hedefimize artık ulaşabiliriz.
Kod:
#
# cat /home/alice/root.txt
thm{Twinkle, twinkle, little bat! How I wonder what you’re at!}