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>'
问题是
str2
方法中的 xor
是 nil
。
str2
的值在此处创建:
signature1 = Base64.decode64(cookie).split("__")[1]
您获得了
nil
值,因为您尝试访问超出其边界的数组。由此,我们可以推断 Base64.decode64(cookie).split("__")
生成的数组长度小于 2 个项目。
您需要调查
Base64.decode64(cookie)
的值并确定为什么它没有满足您包含子字符串 __
的期望。