[TR] Hack The Box — Granny Write-Up

Anıl Çelik
5 min readOct 14, 2020

Herkese merhaba. Bu yazımda, Hack The Box platformunda bulunan Granny isimli makinenin çözümünü sizlerle paylaşıyor olacağım.

Öncelikle nmap taraması ile başlayalım:

Görüldüğü üzere, sunucu üzerinde default port numarası 80 olan HTTP servisi çalışmakta. Bu çıktıda, “http-methods” altında bulunan kısımlar dikkatimizi çeken nokta olmalıdır. Çünkü, normal bir taramada da çıktıda görebileceğimşz “Supported Methods” başlığına ek olarak, burada bir de “Potentially Risky Methods” adında bir başlık görmekteyiz. Bu başlıkta, sunucu üzerinde risk oluşturabilecek HTTP Request Metotları yer almaktadır. Elde ettiğimiz bu bilgiyi daha sonra kullanacağız. Öncelikle IP adresini ziyaret ederek web sunucusunun anasayfasında ne bulunduğuna bir göz atalım:

Görüldüğü gibi, genellikle ASP ile hazırlanmış web sitelerinde görülen, sitenin yapım aşamasında olduğunu belirten bir IIS Under Construction mesajıyla karşılaşmaktayız. Default sayfa içerisinde herhangi bir ipucu bırakılıp bırakılmadığını kontrol etmek için sayfa kaynağını görüntüleyebiliriz:

Herhangi bir bilgiye ulaşamadık. Şimdi bir dizin taraması gerçekleştirelim:

Görebileceğimiz gibi tarama sonucunda birkaç dizinle karşılaşmaktayız ancak maalesef bu dizinlerin hiçbirinden işe yarar bir bilgi elde edememekteyiz. Tam olarak bu noktada, az önce de değinmiş olduğumuz Riskli HTTP Request Metodlarından faydalanacağız. Aşağıdaki çıktıya tekrar göz attığımızda, riskli istek metodları arasında PUT metodunun yer aldığını görebiliriz:

PUT metodu ile, web sunucusu üzerinde bulunan bir dosyayı değiştirebilir veya sunucu üzerinde yeni bir dosya oluşturabiliriz. Bu noktada, kullanılmakta olan web sunucusu ASP uzantılı dosyaları desteklediği için öncelikle sunucuya bize sunucu üzerinden ters bağlantı sağlayacak ASP veya ASPX uzantılı bir dosya yükleyip yükleyemeyeceğimizi test edebiliriz. Bunu yapmak için, öncelikle DAVTest isimli aracı kullanarak sunucuya test amaçlı çalıştırılabilir dosyaları otomatik olarak göndererek sunucunun desteklediği çalıştırılabilir dosya uzantılarını tespit edebiliriz:

Test sonucunda ASP ve ASPX dosyalarının sunucu tarafından kabul edilmediğini, ancak TXT ve HTML dosyalarının sunucu tarafından kabul edildiğini ve başarılı bir şekilde sunucu üzerinde bu dosyaların çalıştırılabildiğini/açılabildiğini görmekteyiz. Sunucu üzerinde herhangi bir TXT veya HTML dosyasını yükleyip bu dosyaları açabiliyoruz ancak bu dosya tiplerini kullanarak sunucu üzerinden herhangi bir ters bağlantı açamayız. Bu noktada, yine Riskli HTTP Request Metodları arasında bulunan ve adından da anlaşılabileceği gibi bir dosyayı taşımak veya yeniden isimlendirmek için kullanılan MOVE metodundan faydalanacağız. Öncelikle bir test dosyası oluşturalım ve bu dosyayı PUT metodu ile sunucuya göndermeye çalışalım:

root@0xpr0N3rd:~/Desktop/granny# echo "test successful" > test.txt
root@0xpr0N3rd:~/Desktop/granny# curl -X PUT http://10.10.10.15/test.txt -d @test.txt

Burada curl aracında kullandığımız “-X” parametresi ile bir istek göndermek istediğimizi, “-d @<data>” @ parametresi ile de bu istek içerisinde bir data göndermek istediğimizi belirtiyoruz. Bu veriyi gönderdikten sonra sunucu üzerinden gerçekten dosyanın gönderilip göndermediğini test edebiliriz

Şimdi de MOVE komutu ile bu TXT dosyasını bir ASPX dosyasına çevirmeye çalışalım:

root@0xpr0N3rd:~/Desktop/granny# curl -X MOVE --header 'Destination:http://10.10.10.15/test.aspx' 'http://10.10.10.15/test.txt'

Dosyayı dönüştürdükten sonra çalışıp çalışmadığını test edelim:

Initial Foothold

Gördüğümüz gibi dosya başarılı bir şekilde dönüştürülüp çalıştırılabiliyor. Burdan sonra yapmamız gereken şey, ASPX formatında bir reverse shell payload’u oluşturup, bunu TXT formatında sunucuya yüklemek ve sunucu üzerinde tekrar ASPX’e çevirerek reverse shell’i elde etmek:

Şimdi ise bu ASPX dosyasını TXT formata çevirelim ve sunucuya gönderelim:

root@0xpr0N3rd:~/Desktop/granny# mv shell.aspx shell.txt
root@0xpr0N3rd:~/Desktop/granny# curl -X PUT http://10.10.10.15/shell-txt -d @shell.txt

Dosyayı sunucuya yükledikten sonra, yine benzer komutla dosya tipini değiştirelim:

root@0xpr0N3rd:~/Desktop/granny# curl -X MOVE --header 'Destination:http://10.10.10.15/shell.aspx' 'http://10.10.10.15/shell.txt'

Şimdi de bu dosyanın bulunduğu yere bir istek göndererek reverse shell elde etmeye çalışalım:

Shell’i başarıyla elde ettik ancak maalesef user.txt dosyasını elde edebilmek için Lakis isimli kullanıcının dizinine erişemiyoruz:

Privilege Escalation

Elde etmek istediğimiz user.txt ve root.txt dosyalarını görüntüleyebilmek için sistem üzerinde yetkilerimizi yükseltmemiz, yani privilege escalation işlemi uygulamamız gerekiyor. Bunun için basit olarak sistem üzerinde işletim sistemi versiyonu kaynaklı zafiyetlerin taramasını Google üzerinden yapabiliriz.. Bunu yapmadan önce, sisteme ait bilgileri “systeminfo” komutu ile görüntüleyip sistem bilgilerini görüntüleyelim:

Google üzerinden araştırdığımızda aşağıdaki exploiti deneyebiliriz:

Exploiti exploit-db üzerinde bulunan GitHub linkinden elde ettikten sonra makineye bütün aşamalarda dosya gönderdiğimiz şekilde tekrar gönderip dosyayı çalıştırdığımızda yetkilerimizi yükseltebiliyor olduğumuzu görebiliriz:

Sonrasında ise yeni bir administrator kullanıcısı tanımlayıp işlemlerimizi rahatlıkla gerçekleştirebiliriz:

user.txt:

root.txt:

Bu makine ilgili sizinle paylaşmak istediklerim bu kadardı, yazımı okuduğunuz için teşekkür ederim.

Bir sonraki yazımda görüşmek üzere.

--

--