SSTI zaifligini aniqlab, ishlatilayotgan template engine'ni identifikatsiya qilganingizdan so'ng, muvaffaqiyatli ekspluatatsiya odatda quyidagi jarayonni o'z ichiga oladi: O'qish (Read), Muhitni o'rganish (Explore), Maxsus hujum yaratish (Create a custom attack).
Template engine'ni yaxshi bilmasangiz, uning hujjatlarini o'qish odatda birinchi boshlanadigan joy. Asosiy template sintaksisini, kalit funksiyalar va o'zgaruvchilarni boshqarishni o'rganish muhim. Masalan, Python'ga asoslangan Mako template engine ishlatilayotganini bilsangiz, RCE'ga erishish quyidagicha oson bo'lishi mumkin:
<%
import os
x=os.popen('id').read()
%>
${x}Hujjatlarda ko'pincha "Security" (Xavfsizlik) bo'limi bo'ladi. U odamlar template bilan qilmasligi kerak bo'lgan xavfli narsalarni bayon qiladi — bu audit paytida qidiriladigan xatti-harakatlar uchun cheat sheet vazifasini o'tashi mumkin. Masalan, ERB'da hujjatlar quyidagicha barcha kataloglarni sanab, ixtiyoriy fayllarni o'qish mumkinligini ochib beradi:
<%= Dir.entries('/') %>
<%= File.open('/example/arbitrary-file').read %>Template engine'ni identifikatsiya qilganingizdan so'ng, boshqalar allaqachon topgan zaifliklarni internetdan qidiring. Ba'zi asosiy template engine'lar keng qo'llanilgani sabab, o'z nishoningizga moslash mumkin bo'lgan yaxshi hujjatlashtirilgan ekspluatlarni topish mumkin.
Keyingi qadam — muhitni o'rganib, kirishingiz mumkin bo'lgan barcha obyektlarni aniqlash. Ko'p template engine'lar template qo'llab-quvvatlaydigan barcha obyekt, metod va atributlarni o'z ichiga olgan "self" yoki "environment" obyektini ochib beradi. Masalan, Java'ga asoslangan tillarda muhitdagi barcha o'zgaruvchilarni quyidagi inyeksiya bilan sanash mumkin:
${T(java.lang.System).getenv()}Vebsaytlar template bergan o'rnatilgan obyektlar bilan birga, veb-dasturchi bergan maxsus, saytga xos obyektlarni ham o'z ichiga oladi. Bu nostandart obyektlarga alohida e'tibor bering — ular maxfiy ma'lumot yoki ekspluatatsiya qilinadigan metodlarni o'z ichiga olishi ehtimoli yuqori. SSTI RCE'ga olib kelishi mumkin bo'lsa-da, amalda bu har doim ham mumkin emas. RCE'ni istisno qilgan bo'lsangiz ham, file path traversal kabi boshqa yuqori jiddiylikdagi ekspluatlar uchun SSTI'dan foydalanishingiz mumkin.
Ba'zan maxsus ekspluat qurishingiz kerak bo'ladi — masalan template engine template'larni sandbox ichida bajarishi mumkin. Hujum yuzasini aniqlaganingizdan so'ng, aniq ekspluatatsiya yo'li bo'lmasa, har bir funksiyani ekspluatatsiya qilinadigan xatti-harakat uchun ko'rib chiqing.
Obyektlar hujjatlarini o'rganganda, ular qaysi metodlarga kirish berishiga va qaysi obyektlarni qaytarishiga alohida e'tibor bering — shu tarzda birga zanjirlanadigan obyekt va metod kombinatsiyalarini topishingiz mumkin. Masalan, Java'ga asoslangan Velocity engine'da $class deb ataladigan ClassTool obyektiga kirasiz. $class.inspect() metodi va $class.type xususiyatini zanjirlab, ixtiyoriy obyektlarga havolalar olish mumkin — bu shell buyruqlarini bajarish uchun ekspluatatsiya qilingan:
$class.inspect("java.lang.Runtime").type.getRuntime().exec("bad-stuff-here")Ba'zi template engine'lar standart holatda xavfsiz, qulflangan muhitda ishlaydi. Bu RCE uchun ekspluatatsiyani qiyinlashtirsa-da, template'ga ochilgan dasturchi yaratgan obyektlar kamroq mustahkamlangan qo'shimcha hujum yuzasini taklif qilishi mumkin. Template o'rnatilganlari uchun katta hujjatlar bo'lsa-da, saytga xos obyektlar deyarli hujjatlashtirilmagan — shuning uchun ularni ekspluatatsiya qilishni qo'lda o'rganishingiz kerak bo'ladi.