929 lines
57 KiB
HTML
929 lines
57 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>
|
|
Module: Msf::Exploit::Java
|
|
|
|
— Documentation by YARD 0.9.37
|
|
|
|
</title>
|
|
|
|
<link rel="stylesheet" href="../../css/style.css" type="text/css" />
|
|
|
|
<link rel="stylesheet" href="../../css/common.css" type="text/css" />
|
|
|
|
<script type="text/javascript">
|
|
pathId = "Msf::Exploit::Java";
|
|
relpath = '../../';
|
|
</script>
|
|
|
|
|
|
<script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
|
|
|
|
<script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
|
|
|
|
|
|
</head>
|
|
<body>
|
|
<div class="nav_wrap">
|
|
<iframe id="nav" src="../../class_list.html?1"></iframe>
|
|
<div id="resizer"></div>
|
|
</div>
|
|
|
|
<div id="main" tabindex="-1">
|
|
<div id="header">
|
|
<div id="menu">
|
|
|
|
<a href="../../_index.html">Index (J)</a> »
|
|
<span class='title'><span class='object_link'><a href="../../Msf.html" title="Msf (module)">Msf</a></span></span> » <span class='title'><span class='object_link'><a href="../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span>
|
|
»
|
|
<span class="title">Java</span>
|
|
|
|
</div>
|
|
|
|
<div id="search">
|
|
|
|
<a class="full_list_link" id="class_list_link"
|
|
href="../../class_list.html">
|
|
|
|
<svg width="24" height="24">
|
|
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
|
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
|
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
|
</svg>
|
|
</a>
|
|
|
|
</div>
|
|
<div class="clear"></div>
|
|
</div>
|
|
|
|
<div id="content"><h1>Module: Msf::Exploit::Java
|
|
|
|
|
|
|
|
</h1>
|
|
<div class="box_info">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<dl>
|
|
<dt>Included in:</dt>
|
|
<dd><span class='object_link'><a href="Remote/JndiInjection.html" title="Msf::Exploit::Remote::JndiInjection (module)">Remote::JndiInjection</a></span></dd>
|
|
</dl>
|
|
|
|
|
|
|
|
<dl>
|
|
<dt>Defined in:</dt>
|
|
<dd>lib/msf/core/exploit/java.rb</dd>
|
|
</dl>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h2>
|
|
Instance Method Summary
|
|
<small><a href="#" class="summary_toggle">collapse</a></small>
|
|
</h2>
|
|
|
|
<ul class="summary">
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#build_jar-instance_method" title="#build_jar (instance method)">#<strong>build_jar</strong>(output_jar, in_files) ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'></div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#compile-instance_method" title="#compile (instance method)">#<strong>compile</strong>(classnames, codez, compile_options = nil) ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'></div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#init_jvm-instance_method" title="#init_jvm (instance method)">#<strong>init_jvm</strong>(jvmoptions = nil) ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'></div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(info = {}) ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'></div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#query_jvm-instance_method" title="#query_jvm (instance method)">#<strong>query_jvm</strong> ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'></div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#save_to_file-instance_method" title="#save_to_file (instance method)">#<strong>save_to_file</strong>(classnames, codez, location) ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'></div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#serialized_class_from_jar-instance_method" title="#serialized_class_from_jar (instance method)">#<strong>serialized_class_from_jar</strong>(jar, ser_class) ⇒ String </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'>
|
|
<p>Create a Java-natively-serialized object for use in Ruby.</p>
|
|
</div></span>
|
|
|
|
</li>
|
|
|
|
|
|
<li class="public ">
|
|
<span class="summary_signature">
|
|
|
|
<a href="#sign_jar-instance_method" title="#sign_jar (instance method)">#<strong>sign_jar</strong>(cert_cn, unsiged_jar, signed_jar, cert_alias = "signFiles", msf_keystore = "msfkeystore", msf_store_pass = "msfstorepass", msf_key_pass = "msfkeypass") ⇒ Object </a>
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="summary_desc"><div class='inline'>
|
|
<p><a href="http://www.defcon.org/images/defcon-17/dc-17-presentations/defcon-17-valsmith-metaphish.pdf">www.defcon.org/images/defcon-17/dc-17-presentations/defcon-17-valsmith-metaphish.pdf</a>.</p>
|
|
</div></span>
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<div id="instance_method_details" class="method_details_list">
|
|
<h2>Instance Method Details</h2>
|
|
|
|
|
|
<div class="method_details first">
|
|
<h3 class="signature first" id="build_jar-instance_method">
|
|
|
|
#<strong>build_jar</strong>(output_jar, in_files) ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
127
|
|
128
|
|
129
|
|
130
|
|
131
|
|
132
|
|
133
|
|
134
|
|
135
|
|
136
|
|
137
|
|
138
|
|
139
|
|
140
|
|
141
|
|
142
|
|
143</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 127</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_build_jar'>build_jar</span><span class='lparen'>(</span><span class='id identifier rubyid_output_jar'>output_jar</span><span class='comma'>,</span> <span class='id identifier rubyid_in_files'>in_files</span><span class='rparen'>)</span>
|
|
<span class='kw'>if</span> <span class='id identifier rubyid_output_jar'>output_jar</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>!=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_end'>"</span></span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>||</span> <span class='id identifier rubyid_in_files'>in_files</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>!=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Building a jar requires an output_jar and an Array of in_files.</span><span class='tstring_end'>"</span></span>
|
|
<span class='kw'>end</span>
|
|
|
|
<span class='comment'># Add paths
|
|
</span> <span class='id identifier rubyid_in_files'>in_files</span> <span class='op'>=</span> <span class='id identifier rubyid_in_files'>in_files</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_file'>file</span><span class='op'>|</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
|
|
|
<span class='id identifier rubyid_create_jar_klass'>create_jar_klass</span> <span class='op'>=</span> <span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>javaCompile.CreateJarFile</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_file_class'>file_class</span> <span class='op'>=</span> <span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>java.io.File</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
|
|
<span class='id identifier rubyid_file_out_jar'>file_out_jar</span> <span class='op'>=</span> <span class='id identifier rubyid_file_class'>file_class</span><span class='period'>.</span><span class='id identifier rubyid_new_with_sig'>new_with_sig</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Ljava.lang.String;</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_output_jar'>output_jar</span><span class='rparen'>)</span> <span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_files_in'>files_in</span> <span class='op'>=</span> <span class='const'>Array</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
|
|
|
|
<span class='id identifier rubyid_in_files'>in_files</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_file'>file</span><span class='op'>|</span> <span class='id identifier rubyid_files_in'>files_in</span> <span class='op'><<</span> <span class='id identifier rubyid_file_class'>file_class</span><span class='period'>.</span><span class='id identifier rubyid_new_with_sig'>new_with_sig</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Ljava.lang.String;</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
|
<span class='id identifier rubyid_create_jar_klass'>create_jar_klass</span><span class='period'>.</span><span class='id identifier rubyid__invoke'>_invoke</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>createJarArchive</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Ljava.io.File;[Ljava.io.File;</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='id identifier rubyid_file_out_jar'>file_out_jar</span><span class='comma'>,</span> <span class='id identifier rubyid_files_in'>files_in</span><span class='rparen'>)</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="compile-instance_method">
|
|
|
|
#<strong>compile</strong>(classnames, codez, compile_options = nil) ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
83
|
|
84
|
|
85
|
|
86
|
|
87
|
|
88
|
|
89
|
|
90
|
|
91
|
|
92
|
|
93
|
|
94
|
|
95
|
|
96
|
|
97
|
|
98
|
|
99
|
|
100
|
|
101
|
|
102
|
|
103
|
|
104
|
|
105
|
|
106
|
|
107
|
|
108
|
|
109
|
|
110
|
|
111
|
|
112
|
|
113
|
|
114
|
|
115
|
|
116
|
|
117
|
|
118
|
|
119
|
|
120
|
|
121
|
|
122
|
|
123
|
|
124
|
|
125</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 83</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_compile'>compile</span><span class='lparen'>(</span><span class='id identifier rubyid_classnames'>classnames</span><span class='comma'>,</span> <span class='id identifier rubyid_codez'>codez</span><span class='comma'>,</span> <span class='id identifier rubyid_compile_options'>compile_options</span><span class='op'>=</span><span class='kw'>nil</span><span class='rparen'>)</span>
|
|
<span class='kw'>if</span> <span class='op'>!</span><span class='ivar'>@rjb_loaded</span> <span class='kw'>or</span> <span class='op'>!</span><span class='ivar'>@jvm_init</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Could not load rjb and/or the JVM: </span><span class='tstring_end'>"</span></span> <span class='op'>+</span> <span class='ivar'>@java_error</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
|
|
<span class='kw'>end</span>
|
|
|
|
<span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_compile_options'>compile_options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_compile_options'>compile_options</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Compiler options must be of type Array.</span><span class='tstring_end'>"</span></span>
|
|
<span class='kw'>end</span>
|
|
|
|
<span class='id identifier rubyid_compile_options'>compile_options</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_compile_options'>compile_options</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
|
|
|
<span class='comment'># Create the directory if it doesn't exist
|
|
</span> <span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_mkdir'>mkdir</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='op'>!</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span>
|
|
|
|
<span class='comment'># For compatibility, some exploits need to have the target and source version
|
|
</span> <span class='comment'># set to a previous JRE version.
|
|
</span> <span class='id identifier rubyid_std_compiler_opts'>std_compiler_opts</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-target</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>1.3</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-source</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>1.3</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-d</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='rbracket'>]</span>
|
|
|
|
<span class='id identifier rubyid_compile_options'>compile_options</span> <span class='op'>+=</span> <span class='id identifier rubyid_std_compiler_opts'>std_compiler_opts</span>
|
|
|
|
<span class='id identifier rubyid_java_compiler_klass'>java_compiler_klass</span> <span class='op'>=</span> <span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>javaCompile.CompileSourceInMemory</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
|
|
<span class='comment'># If we were passed arrays
|
|
</span> <span class='kw'>if</span> <span class='id identifier rubyid_classnames'>classnames</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>&&</span> <span class='id identifier rubyid_codez'>codez</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span>
|
|
<span class='comment'># default compile class
|
|
</span> <span class='kw'>begin</span>
|
|
<span class='comment'># Same as java_compiler_klass.CompileFromMemory( String[] classnames,
|
|
</span> <span class='comment'># String[] codez, String[] compilerOptions)
|
|
</span> <span class='id identifier rubyid_success'>success</span> <span class='op'>=</span> <span class='id identifier rubyid_java_compiler_klass'>java_compiler_klass</span><span class='period'>.</span><span class='id identifier rubyid__invoke'>_invoke</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>CompileFromMemory</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
<span class='comment'># Signature explained: [ means array, Lpath.to.object; means object
|
|
</span> <span class='comment'># Thus, this reads as call the method with 3 String[] args.
|
|
</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>[Ljava.lang.String;[Ljava.lang.String;[Ljava.lang.String;</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
<span class='id identifier rubyid_classnames'>classnames</span><span class='comma'>,</span> <span class='id identifier rubyid_codez'>codez</span><span class='comma'>,</span> <span class='id identifier rubyid_compile_options'>compile_options</span><span class='rparen'>)</span>
|
|
<span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="../Exception.html" title="Msf::Exception (module)">Exception</a></span></span> <span class='op'>=></span> <span class='id identifier rubyid_e'>e</span>
|
|
<span class='id identifier rubyid_print_error'>print_error</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Received unknown error: </span><span class='tstring_end'>"</span></span> <span class='op'>+</span> <span class='id identifier rubyid_e'>e</span>
|
|
<span class='kw'>end</span>
|
|
<span class='kw'>else</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>The Java mixin received unknown argument-type combinations and cannot continue.</span><span class='tstring_end'>"</span></span>
|
|
<span class='kw'>end</span>
|
|
<span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_success'>success</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Compile failed.</span><span class='tstring_end'>"</span></span>
|
|
<span class='kw'>end</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="init_jvm-instance_method">
|
|
|
|
#<strong>init_jvm</strong>(jvmoptions = nil) ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
40
|
|
41
|
|
42
|
|
43
|
|
44
|
|
45
|
|
46
|
|
47
|
|
48
|
|
49
|
|
50
|
|
51
|
|
52
|
|
53
|
|
54
|
|
55
|
|
56
|
|
57
|
|
58
|
|
59</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 40</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_init_jvm'>init_jvm</span><span class='lparen'>(</span><span class='id identifier rubyid_jvmoptions'>jvmoptions</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
|
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>not</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JAVA_HOME</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JAVA_HOME is not set</span><span class='tstring_end'>'</span></span>
|
|
<span class='kw'>end</span>
|
|
|
|
<span class='id identifier rubyid_toolsjar'>toolsjar</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JAVA_HOME</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>lib</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>tools.jar</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>not</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span> <span class='id identifier rubyid_toolsjar'>toolsjar</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JAVA_HOME does not point to a valid JDK installation.</span><span class='tstring_end'>'</span></span>
|
|
<span class='kw'>end</span>
|
|
|
|
<span class='comment'># Instantiate the JVM with a classpath pointing to the JDK tools.jar
|
|
</span> <span class='comment'># and our javatoolkit jar.
|
|
</span> <span class='id identifier rubyid_classpath'>classpath</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Config.html" title="Msf::Config (class)">Config</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data_directory'><span class='object_link'><a href="../Config.html#data_directory-class_method" title="Msf::Config.data_directory (method)">data_directory</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>exploits</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>msfJavaToolkit.jar</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_classpath'>classpath</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>:</span><span class='tstring_end'>"</span></span> <span class='op'>+</span> <span class='id identifier rubyid_toolsjar'>toolsjar</span>
|
|
<span class='id identifier rubyid_classpath'>classpath</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>:</span><span class='tstring_end'>"</span></span> <span class='op'>+</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>ADDCLASSPATH</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>ADDCLASSPATH</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span>
|
|
|
|
<span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_load'>load</span><span class='lparen'>(</span><span class='id identifier rubyid_classpath'>classpath</span><span class='comma'>,</span> <span class='id identifier rubyid_jvmargs'>jvmargs</span><span class='op'>=</span><span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
|
|
|
<span class='ivar'>@jvm_init</span> <span class='op'>=</span> <span class='kw'>true</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="initialize-instance_method">
|
|
|
|
#<strong>initialize</strong>(info = {}) ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
19
|
|
20
|
|
21
|
|
22
|
|
23
|
|
24
|
|
25
|
|
26
|
|
27
|
|
28
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
|
36
|
|
37
|
|
38</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 19</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_info'>info</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
|
<span class='kw'>super</span>
|
|
|
|
<span class='id identifier rubyid_register_advanced_options'>register_advanced_options</span><span class='lparen'>(</span>
|
|
<span class='lbracket'>[</span>
|
|
<span class='const'><span class='object_link'><a href="../OptString.html" title="Msf::OptString (class)">OptString</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptString.html#initialize-instance_method" title="Msf::OptString#initialize (method)">new</a></span></span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>true</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Java cache location</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
<span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Config.html" title="Msf::Config (class)">Config</a></span></span><span class='period'>.</span><span class='id identifier rubyid_config_directory'><span class='object_link'><a href="../Config.html#config_directory-class_method" title="Msf::Config.config_directory (method)">config_directory</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>javacache</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
|
|
<span class='const'><span class='object_link'><a href="../OptString.html" title="Msf::OptString (class)">OptString</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptString.html#initialize-instance_method" title="Msf::OptString#initialize (method)">new</a></span></span><span class='lparen'>(</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>AddClassPath</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>false</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Additional java classpath</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='kw'>nil</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
|
|
<span class='rbracket'>]</span><span class='comma'>,</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='rparen'>)</span>
|
|
|
|
<span class='kw'>begin</span>
|
|
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>rjb</span><span class='tstring_end'>'</span></span>
|
|
<span class='ivar'>@rjb_loaded</span> <span class='op'>=</span> <span class='kw'>true</span>
|
|
<span class='id identifier rubyid_init_jvm'>init_jvm</span>
|
|
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Exception</span> <span class='op'>=></span> <span class='id identifier rubyid_e'>e</span>
|
|
<span class='ivar'>@rjb_loaded</span> <span class='op'>=</span> <span class='kw'>false</span>
|
|
<span class='ivar'>@jvm_init</span> <span class='op'>=</span> <span class='kw'>false</span>
|
|
<span class='ivar'>@java_error</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span>
|
|
<span class='kw'>end</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="query_jvm-instance_method">
|
|
|
|
#<strong>query_jvm</strong> ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
61
|
|
62
|
|
63</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 61</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_query_jvm'>query_jvm</span>
|
|
<span class='kw'>return</span> <span class='ivar'>@jvmInit</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="save_to_file-instance_method">
|
|
|
|
#<strong>save_to_file</strong>(classnames, codez, location) ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
65
|
|
66
|
|
67
|
|
68
|
|
69
|
|
70
|
|
71
|
|
72
|
|
73
|
|
74
|
|
75
|
|
76
|
|
77
|
|
78
|
|
79
|
|
80
|
|
81</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 65</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_save_to_file'>save_to_file</span><span class='lparen'>(</span><span class='id identifier rubyid_classnames'>classnames</span><span class='comma'>,</span> <span class='id identifier rubyid_codez'>codez</span><span class='comma'>,</span> <span class='id identifier rubyid_location'>location</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span> <span class='const'><span class='object_link'><a href="../../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Config.html" title="Msf::Config (class)">Config</a></span></span><span class='period'>.</span><span class='id identifier rubyid_install_root'><span class='object_link'><a href="../Config.html#install_root-class_method" title="Msf::Config.install_root (method)">install_root</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>external</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>source</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_location'>location</span> <span class='rparen'>)</span>
|
|
|
|
<span class='kw'>if</span> <span class='kw'>not</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span> <span class='id identifier rubyid_path'>path</span>
|
|
<span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_mkdir'>mkdir</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
|
|
<span class='kw'>end</span>
|
|
|
|
<span class='id identifier rubyid_i'>i</span> <span class='op'>=</span> <span class='int'>0</span>
|
|
<span class='id identifier rubyid_classnames'>classnames</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_fil'>fil</span><span class='op'>|</span>
|
|
<span class='id identifier rubyid_file'>file</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span> <span class='id identifier rubyid_path'>path</span><span class='comma'>,</span> <span class='id identifier rubyid_fil'>fil</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>.java</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_fp'>fp</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span> <span class='id identifier rubyid_file'>file</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>wb</span><span class='tstring_end'>"</span></span> <span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_print_status'>print_status</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Writing </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_fil'>fil</span><span class='embexpr_end'>}</span><span class='tstring_content'> to </span><span class='tstring_end'>"</span></span> <span class='op'>+</span> <span class='id identifier rubyid_file'>file</span>
|
|
<span class='id identifier rubyid_fp'>fp</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_codez'>codez</span><span class='lbracket'>[</span><span class='id identifier rubyid_i'>i</span><span class='rbracket'>]</span>
|
|
<span class='id identifier rubyid_i'>i</span> <span class='op'>+=</span> <span class='int'>1</span>
|
|
<span class='id identifier rubyid_fp'>fp</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
|
|
<span class='rbrace'>}</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="serialized_class_from_jar-instance_method">
|
|
|
|
#<strong>serialized_class_from_jar</strong>(jar, ser_class) ⇒ <tt>String</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><div class="docstring">
|
|
<div class="discussion">
|
|
|
|
<p>Create a Java-natively-serialized object for use in Ruby</p>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div class="tags">
|
|
<p class="tag_title">Parameters:</p>
|
|
<ul class="param">
|
|
|
|
<li>
|
|
|
|
<span class='name'>jar</span>
|
|
|
|
|
|
<span class='type'>(<tt>String</tt>)</span>
|
|
|
|
|
|
|
|
—
|
|
<div class='inline'>
|
|
<p>Buffer containing JAR data from which to extract the class</p>
|
|
</div>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<span class='name'>ser_class</span>
|
|
|
|
|
|
<span class='type'>(<tt>String</tt>)</span>
|
|
|
|
|
|
|
|
—
|
|
<div class='inline'>
|
|
<p>The class name to be serialized</p>
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<p class="tag_title">Returns:</p>
|
|
<ul class="return">
|
|
|
|
<li>
|
|
|
|
|
|
<span class='type'>(<tt>String</tt>)</span>
|
|
|
|
|
|
|
|
—
|
|
<div class='inline'>
|
|
<p>Marshalled serialized byteArray</p>
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</div><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
192
|
|
193
|
|
194
|
|
195
|
|
196
|
|
197
|
|
198
|
|
199
|
|
200
|
|
201
|
|
202
|
|
203
|
|
204
|
|
205
|
|
206
|
|
207
|
|
208
|
|
209
|
|
210
|
|
211
|
|
212</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 192</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_serialized_class_from_jar'>serialized_class_from_jar</span><span class='lparen'>(</span><span class='id identifier rubyid_jar'>jar</span><span class='comma'>,</span> <span class='id identifier rubyid_ser_class'>ser_class</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_file_name'>file_name</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_rand_text_alpha_lower'>rand_text_alpha_lower</span><span class='lparen'>(</span><span class='int'>8</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_file_name'>file_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.jar</span><span class='tstring_end'>"</span></span>
|
|
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>wb+</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_f'>f</span><span class='op'>|</span> <span class='id identifier rubyid_f'>f</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_jar'>jar</span><span class='rparen'>)</span><span class='rbrace'>}</span>
|
|
<span class='op'>::</span><span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_add_jar'>add_jar</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='rparen'>)</span>
|
|
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_unlink'>unlink</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_payClass'>payClass</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='id identifier rubyid_ser_class'>ser_class</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_byteArrayClass'>byteArrayClass</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>java.io.ByteArrayOutputStream</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_outputClass'>outputClass</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>java.io.ObjectOutputStream</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_payInst'>payInst</span> <span class='op'>=</span> <span class='id identifier rubyid_payClass'>payClass</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_byteArrayInst'>byteArrayInst</span> <span class='op'>=</span> <span class='id identifier rubyid_byteArrayClass'>byteArrayClass</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_outputInst'>outputInst</span> <span class='op'>=</span> <span class='id identifier rubyid_outputClass'>outputClass</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_byteArrayInst'>byteArrayInst</span><span class='rparen'>)</span>
|
|
<span class='kw'>begin</span>
|
|
<span class='id identifier rubyid_serResult'>serResult</span> <span class='op'>=</span> <span class='id identifier rubyid_outputInst'>outputInst</span><span class='period'>.</span><span class='id identifier rubyid_writeObject'>writeObject</span><span class='lparen'>(</span><span class='id identifier rubyid_payInst'>payInst</span><span class='rparen'>)</span>
|
|
<span class='kw'>rescue</span> <span class='op'>=></span> <span class='id identifier rubyid_e'>e</span>
|
|
<span class='comment'># Rjb exceptions are pretty broken - try to inform the user of where we keeled
|
|
</span> <span class='id identifier rubyid_print_error'>print_error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Failed to Rjb-serialize the </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ser_class'>ser_class</span><span class='embexpr_end'>}</span><span class='tstring_content'> class due to </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
<span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_e'>e</span>
|
|
<span class='kw'>end</span>
|
|
<span class='id identifier rubyid_byteArrayInst'>byteArrayInst</span><span class='period'>.</span><span class='id identifier rubyid_toByteArray'>toByteArray</span><span class='lparen'>(</span><span class='rparen'>)</span>
|
|
<span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="method_details ">
|
|
<h3 class="signature " id="sign_jar-instance_method">
|
|
|
|
#<strong>sign_jar</strong>(cert_cn, unsiged_jar, signed_jar, cert_alias = "signFiles", msf_keystore = "msfkeystore", msf_store_pass = "msfstorepass", msf_key_pass = "msfkeypass") ⇒ <tt>Object</tt>
|
|
|
|
|
|
|
|
|
|
|
|
</h3><div class="docstring">
|
|
<div class="discussion">
|
|
|
|
<p><a href="http://www.defcon.org/images/defcon-17/dc-17-presentations/defcon-17-valsmith-metaphish.pdf">www.defcon.org/images/defcon-17/dc-17-presentations/defcon-17-valsmith-metaphish.pdf</a></p>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div class="tags">
|
|
|
|
|
|
</div><table class="source_code">
|
|
<tr>
|
|
<td>
|
|
<pre class="lines">
|
|
|
|
|
|
148
|
|
149
|
|
150
|
|
151
|
|
152
|
|
153
|
|
154
|
|
155
|
|
156
|
|
157
|
|
158
|
|
159
|
|
160
|
|
161
|
|
162
|
|
163
|
|
164
|
|
165
|
|
166
|
|
167
|
|
168
|
|
169
|
|
170
|
|
171
|
|
172
|
|
173
|
|
174
|
|
175
|
|
176
|
|
177
|
|
178
|
|
179
|
|
180
|
|
181
|
|
182
|
|
183</pre>
|
|
</td>
|
|
<td>
|
|
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/java.rb', line 148</span>
|
|
|
|
<span class='kw'>def</span> <span class='id identifier rubyid_sign_jar'>sign_jar</span><span class='lparen'>(</span><span class='id identifier rubyid_cert_cn'>cert_cn</span><span class='comma'>,</span> <span class='id identifier rubyid_unsiged_jar'>unsiged_jar</span><span class='comma'>,</span> <span class='id identifier rubyid_signed_jar'>signed_jar</span><span class='comma'>,</span> <span class='id identifier rubyid_cert_alias'>cert_alias</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>signFiles</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>msfkeystore</span><span class='tstring_end'>"</span></span><span class='comma'>,</span>
|
|
<span class='id identifier rubyid_msf_store_pass'>msf_store_pass</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>msfstorepass</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_key_pass'>msf_key_pass</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>msfkeypass</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span>
|
|
|
|
<span class='comment'># Dependent on $JAVA_HOME/lib/tools.jar that comes with the JDK.
|
|
</span> <span class='id identifier rubyid_signer_klass'>signer_klass</span> <span class='op'>=</span> <span class='const'>Rjb</span><span class='op'>::</span><span class='id identifier rubyid_import'>import</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>javaCompile.SignJar</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
|
|
|
<span class='comment'># Check if the keystore exists from previous run. If it does, delete it.
|
|
</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span><span class='rparen'>)</span>
|
|
<span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span> <span class='kw'>if</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span>
|
|
|
|
<span class='comment'># Rjb pukes on a CN with a comma in it so bad that it crashes to shell
|
|
</span> <span class='comment'># and turns input echoing off. Simple fix for this ugly bug is
|
|
</span> <span class='comment'># just to get rid of commas which kinda sucks but whatever. See #1543.
|
|
</span> <span class='id identifier rubyid_keytool_opts'>keytool_opts</span> <span class='op'>=</span> <span class='lbracket'>[</span>
|
|
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-genkey</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-alias</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_cert_alias'>cert_alias</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-keystore</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span><span class='comma'>,</span>
|
|
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-storepass</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_store_pass'>msf_store_pass</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-dname</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>CN=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cert_cn'>cert_cn</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>,</span><span class='tstring_end'>"</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='comma'>,</span>
|
|
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-keypass</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>msfkeypass</span><span class='tstring_end'>"</span></span>
|
|
<span class='rbracket'>]</span>
|
|
|
|
<span class='comment'># Build the cert keystore
|
|
</span> <span class='id identifier rubyid_signer_klass'>signer_klass</span><span class='period'>.</span><span class='id identifier rubyid__invoke'>_invoke</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>KeyToolMSF</span><span class='tstring_end'>'</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>[Ljava.lang.String;</span><span class='tstring_end'>'</span></span><span class='comma'>,</span><span class='id identifier rubyid_keytool_opts'>keytool_opts</span><span class='rparen'>)</span>
|
|
|
|
<span class='id identifier rubyid_jarsigner_opts'>jarsigner_opts</span> <span class='op'>=</span> <span class='lbracket'>[</span>
|
|
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-keystore</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_keystore'>msf_keystore</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-storepass</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_store_pass'>msf_store_pass</span><span class='comma'>,</span>
|
|
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-keypass</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_msf_key_pass'>msf_key_pass</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>-signedJar</span><span class='tstring_end'>"</span></span><span class='comma'>,</span>
|
|
<span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_signed_jar'>signed_jar</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='comment'># Signed Jar
|
|
</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JavaCache</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_unsiged_jar'>unsiged_jar</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='comment'># Input Jar we're signing
|
|
</span> <span class='id identifier rubyid_cert_alias'>cert_alias</span> <span class='comment'># The cert we're using
|
|
</span> <span class='rbracket'>]</span>
|
|
<span class='id identifier rubyid_signer_klass'>signer_klass</span><span class='period'>.</span><span class='id identifier rubyid__invoke'>_invoke</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>JarSignerMSF</span><span class='tstring_end'>'</span></span><span class='comma'>,</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>[Ljava.lang.String;</span><span class='tstring_end'>'</span></span><span class='comma'>,</span><span class='id identifier rubyid_jarsigner_opts'>jarsigner_opts</span><span class='rparen'>)</span>
|
|
|
|
<span class='comment'># There are warnings in the source for KeyTool/JarSigner warning that security providers
|
|
</span> <span class='comment'># are not released, and if you are calling .main(foo) from another app, you need to release
|
|
</span> <span class='comment'># them manually. This is not done here, and should Rjb be used for anything in the future,
|
|
</span> <span class='comment'># this may need to be cleaned up.
|
|
</span><span class='kw'>end</span></pre>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div id="footer">
|
|
Generated on Fri May 8 17:01:04 2026 by
|
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
0.9.37 (ruby-3.1.5).
|
|
</div>
|
|
|
|
</div>
|
|
</body>
|
|
</html> |