Server Side Template Injection zəifliyi təcavüzkarın server tərəfindəki əmrləri yerinə yetirmək üçün Template-ə malicious kod injeksiya etməsidir. Bu zəiflik, yanlış istifadəçi daxiletməsi Template Engine-ə daxil edildikdə baş verir ki, bu da böyük ehtimalla Remote Code Execution(RCE) səbəb olur.
Template Engine-ləri dinamik məlumatların veb səhifələrə yerləşdirilməsinə kömək edən nəticə sənədləri hazırlamaq üçün template-ləri məlumat modeli ilə birləşdirmək üçün nəzərdə tutulmuşdur. Template Engine-ləri istifadəçilər, məhsullar və s. haqqında məlumatları göstərmək üçün istifadə edilə bilər. Ən populyar Template Engine-lərindən bəziləri aşağıdakı kimi sadalana bilər:
PHP – Smarty, Twigs
JAVA – Velocity,Freemaker
Python–JINJA,Mako,Tornado • JavaScript–Jade,Rage
Ruby-Liquid
input validation server tərəfində düzgün idarə edilmədikdə, serverdə zərərli SSTİ payload-ı icra oluna bilər ki, bu da RCE ilə nəticələnə bilər.
Bu necə işləyir?
Aşağıdakı sorğunun parametrini test etdiyinizi təsəvvür edin:
POST /some-endpoint HTTP/1.1
Host: vulnerable-website.com
parameter=value
Zəifliyi aşkar etmək üçün, aşağıdakılar kimi xüsusi simvollar ardıcıllığı olan parametrin dəyəri kimi poliqlot payloadından istifadə edin:
POST /some-endpoint HTTP/1.1
Host: vulnerable-website.com
parameter=${{<%[%'"}}%\.
Template Engine-i müəyyən etmək üçün error mesajını oxuyun:
Error mesajı Template Engine-i göstərmirsə, məşhur Template Engine-ləri üçün bəlli olan payloadlar sınaqdan keçirə bilərik:
=${7*3}
={{7*3}}
=<%= 7*3 %>
Error mesajı Template Engine-i göstərmirsə, məşhur Template Engine-lər üçün bilinən payloadlar vasitəsilə test edə bilərsiniz:
POST /some-endpoint HTTP/1.1
Host: vulnerable-website.com
parameter= {% debug %}
Çıxışda bu Template-dən istifadə edə biləcəyiniz object-lərin siyahısı olacaq:
Mövcud olan "parametrlər" object-dən istifadə edərək gizli açarı oxuyaq:
POST /some-endpoint HTTP/1.1
Host: vulnerable-website.com
parameter= {{settings.SECRET_KEY}}
SSTI-nin təsiri nədir?
SSTİ zəifliklərinin təsiri kritikdir, nəticədə backend-ə nəzarət edir və bu da RCE ilə nəticələnir. Hətta code execution olmadan, təcavüzkar serverdə həssas məlumatları oxuya bilər. Template Engine-dən asılı olaraq SSTI zəifliyinin kritik olmadığı nadir hallar da var.
Zəifliyi necə müəyyən etmək olar?
SSTI zəifliklərini tapmaq üçün Template ifadələrində istifadə edilən xüsusi simvollardan ibarət Polyglot payloadı istifadə edin.
${{<%[%'"}}%\.
Zəiflik olduqda, xəta mesajı qaytarıla bilər və ya server tərəfındən istisna yaradıla bilər.Bu zəifliyi və istifadə olunan Template Engine-i müəyyən etmək üçün istifadə edilə bilər.
Zəifliyi müəyyən etmək üçün aşağıdakı ardıcıllıqlara əməl oluna bilər:
Template injectionun harada olduğunu müəyyən edin
Template Engine-i müəyyən edin və zəifliyi təsdiqləyin
Xüsusi Template Engine üçün təlimatlara əməl edin
Zəiflikdən istifadə edin
Aşağıdakı cheat sheet Template Engine-i müəyyən etmək üçün istifadə edilə bilər:
Avtomatlaşdırılmış Alətlər
Tplmap, əsas əməliyyat sisteminə giriş əldə etmək üçün bir neçə Sandbox Bypass üsulları ilə Code Injection və Server Side Template Injection zəifliklərinin istismarına kömək edir.
Tool və onun test dəsti SSTI zəifliyini araşdırmaq və veb proqramların Pentestləri offensive security tools kimi istifadə etmək üçün hazırlanmışdır.
SSTI zəifliyinin aradan qaldırılması üsulları istifadə edilən müxtəlif Template Engine-dən asılıdır. Bu zəifliyi aradan qaldırmaq üçün 2 ümumi təklif var:
Sanitization: Hər hansı bir zəifliyi aradan qaldırmaq və ya minimuma endirmək üçün data-nı Template-ə ötürməzdən əvvəl "user input"-nu lazımsız şeylərdən təmizləyin.
Sandboxing: Təhlükəli simvolların istifadəsi iş ehtiyacıdırsa, təhlükəsiz mühitdə sandbox istifadə etmək tövsiyə olunur.