【问题标题】:request.body.split('&').each displays undefined method `each' for nil:NilClassrequest.body.split('&').each 为 nil:NilClass 显示未定义的方法 `each'
【发布时间】:2014-02-14 18:41:17
【问题描述】:

当我运行代码的以下部分时,出现“nil:NilClass 的未定义方法 `each'”错误。

if request and request.body
  print_status(request.body);
  request.body.split('&').each { |var|
    parts = var.split('=', 2)
    if parts.length != 2
      print_error("Weird, we got a var that doesn't contain an equals: #{parts.inspect}")
    else
      fln,fld = parts
      fld = Rex::Text.uri_decode(fld)
      if fln == "script"
        script = fld
      end
    end
  }
end


一些使用 request.body 的测试:

- ---------------------------------- - request.body.class:字符串 - request.body:脚本=测试 - request.body.split('&'): ["script=test"] - 发送 - ---------------------------------- - request.body.class:字符串 - request.body:脚本=警报%28%27ok%27%29%3B - request.body.split('&'): ["script=alert%28%27ok%27%29%3B"] - 发送 - ---------------------------------- - request.body.class:字符串 - request.body:脚本=alert%28%27ok%27%29%3B%3D - request.body.split('&'): ["script=alert%28%27ok%27%29%3B%3D"] - 异常处理请求:nil:NilClass 的未定义方法“每个” - ---------------------------------- - request.body.class:字符串 - request.body:脚本=alert%28%27ok%27%29%3B%5D - request.body.split('&'): ["script=alert%28%27ok%27%29%3B%5D"] - 异常处理请求:nil:NilClass 的未定义方法“每个” - ---------------------------------- - request.body.class:字符串 - request.body:脚本=alert%28%27ok%27%29%3B- - request.body.split('&'): ["script=alert%28%27ok%27%29%3B-"] - 异常处理请求:nil:NilClass 的未定义方法“每个” - ---------------------------------- - request.body.class:字符串 - request.body: 脚本=alert%28%27ok%27%29%3B+ - request.body.split('&'): ["script=alert%28%27ok%27%29%3B+"] - 异常处理请求:nil:NilClass 的未定义方法“每个”

大多数特殊字符都会导致错误发生。
有什么问题?

【问题讨论】:

  • 什么是request.body?一个字符串?
  • 真的是request.body.split('&').each 行抛出异常吗?如果request.body.split('&') 始终是一个字符串,我看不到这里的问题。
  • request.body.split('&') 返回一个包含 1 项的数组。是的,它是整个 rb 文件中唯一的 each。
  • 可能每个都在其他地方定义。你能发布你的回溯吗? (例如,Rex::Text.url_encode 方法中可能有 each)。拆分总是返回一个数组,所以它必须在其他地方。
  • Rex::Text 内部没有方法 url_encode。有uri_encode / uri_decode。查看来源:dev.metasploit.com/api/Rex/Text.html#uri_encode-class_methoddev.metasploit.com/api/Rex/Text.html#uri_decode-class_method

标签: ruby metasploit


【解决方案1】:

请尝试使用request.body.read 而不是request.body

ActionDispatch::Request.body方法为StringIO,参考:http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-body

【讨论】:

  • 显示异常处理请求:“script=alert%28%27ok%27%29%3B”的未定义方法“读取”:字符串
  • 如果 request.body 是 script=alert%28%27ok%27%29%3B 它可以工作,如果它是 script=alert%28%27ok%27%29%3B%3D 它可以'不行。
  • 在这两种情况下它的类型都是字符串?
  • 是的,我已经检查过了,在这两种情况下 request.body.class 都是一个字符串。
  • 我认为你的拆分应该可以工作并返回数组。您能否提供更多来自request.body.split('&') 的返回值示例?
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2014-03-08
相关资源
最近更新 更多