HackInOS: 1 - Vulnhub

Rıdvan Kaplan
5 min readFeb 8, 2021

--

Merhaba !!!

Bu yazımda Vulnhub’ta GaziCyber tarafından hazırlanmış olan HackInOS makinesinin çözümünü paylaşacağım.

Eğer makineyi çözmeyi düşünüyorsanız lütfen okumayınız. Takıldığınız yerlerde göz atıp kendiniz uğraşmanız size daha çok şey katacaktır. Öncelikle makinenin IP adresini /etc/hosts içerisine localhost olarak ekliyoruz.
Ardından nmap taramamızla açık portları inceliyoruz.

Tüm portları taradık ve sadece 22, 8000 portları açık olduğu gözüküyor.

8000 portunda http server’ı çalışıyor. Web tarayıcımızda açtığımız da wordpress’in çalıştığı gözüküyor. Biraz baktıktan sonra herhangi bir şey bulamadım.

Dirb ile dizinleri tarıyoruz.

Dikkatimizi çeken /robots.txt bulunmakta. İçerisine baktığımızda iki sayfa ismi bulunmaktadır.

Disallow:/upload.php Disallow:/uploads

upload.php sayfasına baktığımızda dosya transferi yapmamıza izin veriyor. Ama bazı filtrelemeler bulunmakta. Sayfanın kaynak kodunda ipucu amaçlı bir github linki bulunmakta. İncelediğimiz de upload.php nin kaynak kodu olduğu gözükmektedir.

https://github.com/fatihhcelik/Vulnerable-Machine---Hint/blob/master/upload.php

Github linkinde yüklenen dosyanın kontrol edilmesi ve nereye nasıl isminin değiştirilip yüklendiği gözükmektedir. Dosya ismiyle birlikte 1 ile 100 arasında rastgele bir sayı ile birleştirip md5 ‘ini aldıktan sonra /uploads/ dizini içerisine uzantısını ekleyip yüklemektedir.

Örneğin dosya ismi resim.png > resim.png34 > 761d063cafd767ae9504ca2006c4aec7.png > şeklinde /uploads dizinine yüklemektedir. Ayrıca dosyanın tipi de kontrol edilmektedir.

Php shell yüklemeyi deneyebiliriz. Öncelikle /usr/share/webshells/php/php-reverse-shell.php dosyasını kendi ip adresimi değiştirerek düzenledim.

Dosyayı yüklerken burp suite ile araya girip Content-Type:image/gif ve ilk satıra GIF89a;ekleyerek değiştiriyoruz. Çünkü kontrol esnasında bunları kontrol ediyor ve değiştirmezsek php uzantılı bir dosya yüklememize izin vermiyor.

Yükledikten sonra /uploads dizinine baktığımızda forbidden alıyoruz. Yani dosyaları listeleyemiyoruz. Direkt ismi ile kaydetmediği için basit bir python script’i yazmam gerekti. Betiğim aşağıda bulunmaktadır.

#!/usr/bin/env python

import hashlib
import requests

print("******* Find The File !!! ************")

filename = "php-reverse-shell.php"

def request(url):
response = requests.head(url)
if response.status_code == 200:
print "Found!"
print url


def md5Enc(file):
md5 = hashlib.md5(file.encode())
md5 = md5.hexdigest()
dir = "uploads/" + md5 + ".php"
#print(dir)
request("http://localhost:8000/" + dir)

def loop():
for i in range(1,101):
md5Enc(filename + str(i))

def main():
loop()

main()

Ekran görüntüsündeki gibi bulduktan sonra nc ile dinleyip bağlantıya gidiyorum ve www-data kullanıcısı olarak shell alıyorum.

Python script’i ile etkileşimli aldıktan sonra yetki yükseltme adımlarına geçiyorum. İlk adımlardan biri olan SUID bit’e sahip olan dosyaları inceliyorum ve değişik bir komut dikkatimi çekiyor.

/usr/bin/tail komutu ile dosyaları okuyabiliriz. Eğer bu komut root yetkisi ile çalışıyorsa ki çalışıyor root kullanıcısına özel bir dosya okuyalım. Örneğin /etc/shadow dosyası.

/etc/shadow dosyamızda root kullanıcısının parolasının hashli hali çıkıyor. Hemen localimize çekip kırmaya çalışıyoruz.

john aracımızla kırıyoruz ve root kullanıcısının parolasına sahip oluyoruz.

Parolamızı girdikten sonra root kullanıcısına geçiyoruz ve flag’imizi okuyoruz. Ama makine henüz bitmiş değil. İç ağdaki diğer makinelerin IP adreslerini bulmak için arp komutunu kullanıyorum.

3 tane IP karşımıza çıktı. Bu makinelerin açık portlarını nc ile tarayabiliriz.

172.18.0.3 ip’li makinede mysql portu açıkmış. İlk makineye girdiğimde konfigürasyon dosyalarını incelerken veritabanı ile ilgili bazı veritabanı bilgileri bulmuştum. / var/www/html/wp-config.php dosyasının içerisinde.

Mysql ile ilgili makineye bağlanmayı deneyelim.

Evet bağlandık ve veritabanlarını görüyoruz. Tablolarını ve verileri inceleyelim.

İlgili tablodan bazı bilgiler çıktı. Pw kısmı MD5 ile hashlenmiş gibi duruyor. Google’ladığımızda kırılmış hali karşımıza çıkıyor.

Makinelerden birinde ssh portu açıktı bu hesap bilgilerini deneyelim.

Evet ssh ile bağlandık. Root olmak için biraz araştırıyoruz.

Bu sefer çok zorlanmadan dosyamızı buluyoruz. SUID biti ile çalışan bir dosya. Çalıştırıldığında root çıktısı veriyor. Strings ile içeriğini inceleyeliyoruz.

İçerisinde bir yerde whoami komutu geçiyor. C kodundan derlenmiş. system(“whoami”) gibi bir kod olmalı. Path değişkeni ile içerisindeki whoami komutunu istismar ederek root kullanıcısına geçebiliriz.

Ekran görüntüsünde ki gibi root kullanıcısına geçebiliriz.

Makineyi yayınladıkları için GaziCyber ekibine ve makinede tüm emeği geçen arkadaşlara teşekkür ederim.

Okuduğunuz için teşekkürler. Yazılarımda herhangi bir teknik hata varsa bildirmekten çekinmeyiniz…

Originally published at https://ridvankaplan.com.

--

--

Rıdvan Kaplan

Cyber Security & Blue Team | OSCP & eCTHPv2 & eCIR & CySA+