TryHackMe | Road

Will Graham

Katılımcı Üye
14 Eki 2022
581
489
merhaba, bu konumda road isimli makinenin çözümünü göstereceğim. makine sahibi gerçek dünyada ki bir sızma testinden ilham alarak yaptığını söylemiş ve bunun dışında bir bilgi vermemiş. makine üzerinde bir şeyler yapabilmek için öncelikle bir port taraması yapmamız gerekiyor.

> nmap -sV --min-rate 1000 10.10.197.114


932u9fr.png


tarama sonucunda 22 ve 80 portunun açık olduğunu görüyoruz, 80 portu üzerinde neler çalıştığını görmek için tarayıcıya ip adresini yapıştıralım.

ol5vl0q.png


bizi güzel bir web uygulaması karşıladı. uygulama içerisinde career.html ve /v2/admin/login.html olmak üzere 2 sayfa bulunuyor. öncelikle yönetici sayfasına baktığımızda kayıt olma ve giriş yapma adı altında 2 buton görüyoruz. bizim herhangi bir hesabımız olmadığı için yeni hesap açmamız gerekiyor. register butonuna tıklayıp bir hesap açalım sonra ise bu hesaba giriş yapalım.

todxnvs.png



ji5wrzu.png


panele giriş yaptıktan sonra içerisinde ResetUser.php ve profile.php olmak üzere 2 sayfa görüyoruz. profile.php sayfasında bir dosya yükleme butonu var fakat bu butonu sadece [email protected] kullanıcısı kullanabiliyormuş. ResetUser.php sayfasında ise ilginç bir bölüm var.

32l3ud0.png


büyük ihtimalle işaretlediğim yerdeki kullanıcı adını kullanarak şifreyi sıfırlıyor. aşağıda muhtemel bir kod paylaştım. tıpkısının aynısı olmayabilir ama bu koda benzer bir şekilde kodlanmıştır.

PHP:
<?php
    if (isset($_POST["npass"]) && isset($_POST["cpass"])){
        $username = $_POST["uname"];
        $npass = $_POST["npass"];
        $cpass = $_POST["cpass"];
 
        if ($npass == $cpass){
            $pdo = new PDO("mysql:host=localhost;dbname=road", "user", "pass");
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   
            $updateQuery = "UPDATE users SET password = :password WHERE username = :username";
            $stmt = $pdo->prepare($updateQuery);
            $stmt->bindParam(':password', $npass, PDO::PARAM_STR);
            $stmt->bindParam(':username', $username, PDO::PARAM_STR);

            if ($stmt->execute()) {
                echo "Şifre başarıyla güncellendi.";
            } else {
                echo "Şifre güncelleme işlemi başarısız.";
            }
        }
    }
?>

yani kullanıcı adı veri tabanında var ise girdiğimiz şifre ile hesabın şifresini değiştiriyor. bu güvenlik açığına "Insecure Direct Object References (IDOR)" deniyor. sağ tık incele yaparak işaretlediğim yere, yetkili kullanıcı adını yazalım ve göndere basıp şifresini değiştirelim.

5dupqzz.png


şifresini değiştirdiğimize göre bulunduğumuz hesaptan çıkış yapıp, yöneticinin hesabına giriş yapabiliriz.

npejrhc.png


artık dosya yükleme iznimiz var. reverse shell dosyamızı yükleyelim sonra dosyanın yüklendiği yeri bulmaya çalışalım. bu sayfanın kaynak koduna baktığımızda yüklediğimiz dosyanın /v2/profileimages/ dizinine gittiğini öğreniyoruz. yani dosyamız http://10.10.197.114/v2/profileimages/carver.php adresinde. çalıştırmadan önce pwncat ile 1234 portunu dinlemeye alacağım sonra ise yüklediğim dosyayı çalıştıracağım. isterseniz pwncat kullanmak yerine netcat kullanabilirsiniz.

5vcj69h.png


pwncat-cs yazıp programı çalıştırdım sonra "listen -m linux 1234 -D" komutunu kullanarak 1234 portuna gelen bağlantıları yakalamasını sağladım. siteye yüklediğim shell dosyasını çalıştırdığımda ise bağlantı geldi. ctrl + d kombinasyonu ile shell'e geçtim ve user.txt dosyasını okuyabildim.

son olarak root.txt dosyasını okumamız gerekiyor. bu dosyayı okuyabilmek için anlayacağınız üzere root yetkisinde olmamız gerek. tekrar ctrl + d kombinasyonunu kullanarak pwncat'e geçiş yapalım sonra ise "run enumerate" komutunu kullanarak sistem üzerinden bilgi toplayalım.


rrg6n5x.png


sistemde yukarıda gördüğünüz gibi mongodb çalışıyor bunun dışında sudo versiyonunun 1.8.31 olmasından dolayı bir zafiyet içerebileceğini öğrendik ama bunu kullanamayız çünkü şuan herhangi bir kullanıcı hesabında değiliz ve webdeveloper kullanıcısının şifresini bilmiyoruz. tekrar ctrl + d kombinasyonu ile shell'e geçiş yapalım sonra da mongo komutunu kullanarak veritabanına bağlanmaya çalışalım.

g0pc9pj.png


veri tabanına bağlanabildik. help komutunu kullandıktan sonra çıkan komutlar üzerinden veri tabanı içerisinde gezelim, belki önemli bir şeyler buluruz.

61recnm.png


veri tabanı içerisinde gezerken webdeveloper kullanıcısının şifresini buldum, su webdeveloper komutu ile kullanıcıya geçiş yapalım.

h8wmq46.png


webdeveloper kullanıcısına geçtikten sonra sudo -l komutunu kullandım ve işaretlediğim sonuçlar çıktı. sistem üzerinde linpeas.sh dosyasını çalıştırırsanız sağ tarafta ki işaretlediğim yazı sarı kırmızı (yetki yükseltmek için kullanılabilir) olarak işaretlenir. bu yazıyı google üzerinden aratalım ve nasıl yetki yükseltebileceğimizi öğrenelim.

>
https://www.hackingarticles.in/linux-privilege-escalation-using-ld_preload/


rasu5n2.png


gördüğünüz gibi yetki yükselttik ve root.txt dosyasını okuduk.
okuduğunuz için teşekkür ederim.


 
Son düzenleme:

SpyKod

Katılımcı Üye
8 Şub 2006
350
70
Tarsus
Ellerine sağlık çok açıklayıcı bir içerik hazırlamışsın
 
Son düzenleme:

Bekbilisim

Yeni üye
29 Kas 2021
42
15
merhaba, bu konumda road isimli makinenin çözümünü göstereceğim. makine sahibi gerçek dünyada ki bir sızma testinden ilham alarak yaptığını söylemiş ve bunun dışında bir bilgi vermemiş. makine üzerinde bir şeyler yapabilmek için öncelikle bir port taraması yapmamız gerekiyor.

> nmap -sV --min-rate 1000 10.10.197.114


932u9fr.png


tarama sonucunda 22 ve 80 portunun açık olduğunu görüyoruz, 80 portu üzerinde neler çalıştığını görmek için tarayıcıya ip adresini yapıştıralım.

ol5vl0q.png


bizi güzel bir web uygulaması karşıladı. uygulama içerisinde career.html ve /v2/admin/login.html olmak üzere 2 sayfa bulunuyor. öncelikle yönetici sayfasına baktığımızda kayıt olma ve giriş yapma adı altında 2 buton görüyoruz. bizim herhangi bir hesabımız olmadığı için yeni hesap açmamız gerekiyor. register butonuna tıklayıp bir hesap açalım sonra ise bu hesaba giriş yapalım.

todxnvs.png



ji5wrzu.png


panele giriş yaptıktan sonra içerisinde ResetUser.php ve profile.php olmak üzere 2 sayfa görüyoruz. profile.php sayfasında bir dosya yükleme butonu var fakat bu butonu sadece [email protected] kullanıcısı kullanabiliyormuş. ResetUser.php sayfasında ise ilginç bir bölüm var.

32l3ud0.png


büyük ihtimalle işaretlediğim yerdeki kullanıcı adını kullanarak şifreyi sıfırlıyor. aşağıda muhtemel bir kod paylaştım. tıpkısının aynısı olmayabilir ama bu koda benzer bir şekilde kodlanmıştır.

PHP:
<?php
    if (isset($_POST["npass"]) && isset($_POST["cpass"])){
        $username = $_POST["uname"];
        $npass = $_POST["npass"];
        $cpass = $_POST["cpass"];
 
        if ($npass == $cpass){
            $pdo = new PDO("mysql:host=localhost;dbname=road", "user", "pass");
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
            $updateQuery = "UPDATE users SET password = :password WHERE username = :username";
            $stmt = $pdo->prepare($updateQuery);
            $stmt->bindParam(':password', $npass, PDO::PARAM_STR);
            $stmt->bindParam(':username', $username, PDO::PARAM_STR);

            if ($stmt->execute()) {
                echo "Şifre başarıyla güncellendi.";
            } else {
                echo "Şifre güncelleme işlemi başarısız.";
            }
        }
    }
?>

yani kullanıcı adı veri tabanında var ise girdiğimiz şifre ile hesabın şifresini değiştiriyor. bu güvenlik açığına "Insecure Direct Object References (IDOR)" deniyor. sağ tık incele yaparak işaretlediğim yere, yetkili kullanıcı adını yazalım ve göndere basıp şifresini değiştirelim.

5dupqzz.png


şifresini değiştirdiğimize göre bulunduğumuz hesaptan çıkış yapıp, yöneticinin hesabına giriş yapabiliriz.

npejrhc.png


artık dosya yükleme iznimiz var. reverse shell dosyamızı yükleyelim sonra dosyanın yüklendiği yeri bulmaya çalışalım. bu sayfanın kaynak koduna baktığımızda yüklediğimiz dosyanın /v2/profileimages/ dizinine gittiğini öğreniyoruz. yani dosyamız http://10.10.197.114/v2/profileimages/carver.php adresinde. çalıştırmadan önce pwncat ile 1234 portunu dinlemeye alacağım sonra ise yüklediğim dosyayı çalıştıracağım. isterseniz pwncat kullanmak yerine netcat kullanabilirsiniz.

5vcj69h.png


pwncat-cs yazıp programı çalıştırdım sonra "listen -m linux 1234 -D" komutunu kullanarak 1234 portuna gelen bağlantıları yakalamasını sağladım. siteye yüklediğim shell dosyasını çalıştırdığımda ise bağlantı geldi. ctrl + d kombinasyonu ile shell'e geçtim ve user.txt dosyasını okuyabildim.

son olarak root.txt dosyasını okumamız gerekiyor. bu dosyayı okuyabilmek için anlayacağınız üzere root yetkisinde olmamız gerek. tekrar ctrl + d kombinasyonunu kullanarak pwncat'e geçiş yapalım sonra ise "run enumerate" komutunu kullanarak sistem üzerinden bilgi toplayalım.


rrg6n5x.png


sistemde yukarıda gördüğünüz gibi mongodb çalışıyor bunun dışında sudo versiyonunun 1.8.31 olmasından dolayı bir zafiyet içerebileceğini öğrendik ama bunu kullanamayız çünkü şuan herhangi bir kullanıcı hesabında değiliz ve webdeveloper kullanıcısının şifresini bilmiyoruz. tekrar ctrl + d kombinasyonu ile shell'e geçiş yapalım sonra da mongo komutunu kullanarak veritabanına bağlanmaya çalışalım.

g0pc9pj.png


veri tabanına bağlanabildik. help komutunu kullandıktan sonra çıkan komutlar üzerinden veri tabanı içerisinde gezelim, belki önemli bir şeyler buluruz.

61recnm.png


veri tabanı içerisinde gezerken webdeveloper kullanıcısının şifresini buldum, su webdeveloper komutu ile kullanıcıya geçiş yapalım.

h8wmq46.png


webdeveloper kullanıcısına geçtikten sonra sudo -l komutunu kullandım ve işaretlediğim sonuçlar çıktı. sistem üzerinde linpeas.sh dosyasını çalıştırırsanız sağ tarafta ki işaretlediğim yazı sarı kırmızı (yetki yükseltmek için kullanılabilir) olarak işaretlenir. bu yazıyı google üzerinden aratalım ve nasıl yetki yükseltebileceğimizi öğrenelim.

>
https://www.hackingarticles.in/linux-privilege-escalation-using-ld_preload/


rasu5n2.png


gördüğünüz gibi yetki yükselttik ve root.txt dosyasını okuduk.
okuduğunuz için teşekkür ederim.


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