Files
metasploit-gs/api/Msf/DBManager/Session.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

1844 lines
94 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Module: Msf::DBManager::Session
&mdash; 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::DBManager::Session";
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 (S)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../Msf.html" title="Msf (module)">Msf</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../DBManager.html" title="Msf::DBManager (class)">DBManager</a></span></span>
&raquo;
<span class="title">Session</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::DBManager::Session
</h1>
<div class="box_info">
<dl>
<dt>Included in:</dt>
<dd><span class='object_link'><a href="../DBManager.html" title="Msf::DBManager (class)">Msf::DBManager</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/db_manager/session.rb</dd>
</dl>
</div>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="protected ">
<span class="summary_signature">
<a href="#create_mdm_session_from_host-instance_method" title="#create_mdm_session_from_host (instance method)">#<strong>create_mdm_session_from_host</strong>(opts) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#create_mdm_session_from_session-instance_method" title="#create_mdm_session_from_session (instance method)">#<strong>create_mdm_session_from_session</strong>(opts) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_session-instance_method" title="#get_session (instance method)">#<strong>get_session</strong>(opts) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns a session based on opened_time, host address, and workspace (or returns nil).</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#infer_vuln_from_session-instance_method" title="#infer_vuln_from_session (instance method)">#<strong>infer_vuln_from_session</strong>(session, wspace) &#x21d2; void </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#infer_vuln_from_session_dto-instance_method" title="#infer_vuln_from_session_dto (instance method)">#<strong>infer_vuln_from_session_dto</strong>(session_dto, session_db_record, workspace) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#remove_stale_sessions-instance_method" title="#remove_stale_sessions (instance method)">#<strong>remove_stale_sessions</strong>(last_seen_interval) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Clean out any stale sessions that have been orphaned by a dead framework instance.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#report_session-instance_method" title="#report_session (instance method)">#<strong>report_session</strong>(opts) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#report_session_dto-instance_method" title="#report_session_dto (instance method)">#<strong>report_session_dto</strong>(session_dto) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#report_session_host_dto-instance_method" title="#report_session_host_dto (instance method)">#<strong>report_session_host_dto</strong>(host_dto) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#sessions-instance_method" title="#sessions (instance method)">#<strong>sessions</strong>(opts) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns a list of all sessions in the database that are selected via the key-value pairs in the specified options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_session-instance_method" title="#update_session (instance method)">#<strong>update_session</strong>(opts) &#x21d2; Mdm::Session </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Update the attributes of a session entry with the values in opts.</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="create_mdm_session_from_host-instance_method">
#<strong>create_mdm_session_from_host</strong>(opts) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 336</span>
<span class='kw'>def</span> <span class='id identifier rubyid_create_mdm_session_from_host'>create_mdm_session_from_host</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid :host, expected Host object</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Host</span>
<span class='id identifier rubyid_sess_data'>sess_data</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>host_id:</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span>
<span class='label'>stype:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:stype</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>desc:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:desc</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>platform:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:platform</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>via_payload:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:via_payload</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>via_exploit:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:via_exploit</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>routes:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:routes</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>datastore:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>opened_at:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:opened_at</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>closed_at:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:closed_at</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>last_seen:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:last_seen</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:closed_at</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>close_reason:</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:close_reason</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_create!'>create!</span><span class='lparen'>(</span><span class='id identifier rubyid_sess_data'>sess_data</span><span class='rparen'>)</span>
<span class='id identifier rubyid_s'>s</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="create_mdm_session_from_session-instance_method">
#<strong>create_mdm_session_from_session</strong>(opts) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 288</span>
<span class='kw'>def</span> <span class='id identifier rubyid_create_mdm_session_from_session'>create_mdm_session_from_session</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_session'>session</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:session</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid :session, expected Msf::Session</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</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="../Session.html" title="Msf::Session (module)">Session</a></span></span>
<span class='id identifier rubyid_wspace'>wspace</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:workspace</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_find_workspace'>find_workspace</span><span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_workspace'>workspace</span><span class='rparen'>)</span>
<span class='id identifier rubyid_h_opts'>h_opts</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>host:</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="../Util.html" title="Msf::Util (module)">Util</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Util/Host.html" title="Msf::Util::Host (module)">Host</a></span></span><span class='period'>.</span><span class='id identifier rubyid_normalize_host'><span class='object_link'><a href="../Util/Host.html#normalize_host-class_method" title="Msf::Util::Host.normalize_host (method)">normalize_host</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_wspace'>wspace</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_h_opts'>h_opts</span><span class='lbracket'>[</span><span class='symbol'>:arch</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_arch'>arch</span> <span class='kw'>if</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:arch</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_arch'>arch</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_arch'>arch</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_find_or_create_host'>find_or_create_host</span><span class='lparen'>(</span><span class='id identifier rubyid_h_opts'>h_opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_sess_data'>sess_data</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>datastore:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_datastore'>exploit_datastore</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span><span class='comma'>,</span>
<span class='label'>desc:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='comma'>,</span>
<span class='label'>host_id:</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span>
<span class='label'>last_seen:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span><span class='comma'>,</span>
<span class='label'>local_id:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_sid'>sid</span><span class='comma'>,</span>
<span class='label'>opened_at:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span><span class='comma'>,</span>
<span class='label'>platform:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_session_type'>session_type</span><span class='comma'>,</span>
<span class='label'>port:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_session_port'>session_port</span><span class='comma'>,</span>
<span class='label'>routes:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>stype:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span>
<span class='label'>via_exploit:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_via_exploit'>via_exploit</span><span class='comma'>,</span>
<span class='label'>via_payload:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_via_payload'>via_payload</span><span class='comma'>,</span>
<span class='rbrace'>}</span>
<span class='comment'># In the case of exploit/multi/handler we cannot yet determine the true
</span> <span class='comment'># exploit responsible. But we can at least show the parent versus
</span> <span class='comment'># just the generic handler:
</span> <span class='kw'>if</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_via_exploit'>via_exploit</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>exploit/multi/handler</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>and</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ParentModule</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:via_exploit</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ParentModule</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_create!'>create!</span><span class='lparen'>(</span><span class='id identifier rubyid_sess_data'>sess_data</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_task'>exploit_task</span> <span class='kw'>and</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_task'>exploit_task</span><span class='period'>.</span><span class='id identifier rubyid_record'>record</span>
<span class='id identifier rubyid_session_task'>session_task</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_task'>exploit_task</span><span class='period'>.</span><span class='id identifier rubyid_record'>record</span>
<span class='kw'>if</span> <span class='id identifier rubyid_session_task'>session_task</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Task</span>
<span class='const'>Mdm</span><span class='op'>::</span><span class='const'>TaskSession</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>task:</span> <span class='id identifier rubyid_session_task'>session_task</span><span class='comma'>,</span> <span class='label'>session:</span> <span class='id identifier rubyid_s'>s</span> <span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_s'>s</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_session-instance_method">
#<strong>get_session</strong>(opts) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns a session based on opened_time, host address, and workspace (or returns nil)</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
32
33
34
35
36
37
38
39
40
41</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 32</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_session'>get_session</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_active'>active</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_wspace'>wspace</span> <span class='op'>=</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="../Util.html" title="Msf::Util (module)">Util</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Util/DBManager.html" title="Msf::Util::DBManager (module)">DBManager</a></span></span><span class='period'>.</span><span class='id identifier rubyid_process_opts_workspace'><span class='object_link'><a href="../Util/DBManager.html#process_opts_workspace-class_method" title="Msf::Util::DBManager.process_opts_workspace (method)">process_opts_workspace</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_framework'>framework</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addr'>addr</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:addr</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:address</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='kw'>return</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_get_host'>get_host</span><span class='lparen'>(</span><span class='symbol'>:workspace</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_wspace'>wspace</span><span class='comma'>,</span> <span class='symbol'>:host</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span>
<span class='id identifier rubyid_time'>time</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:opened_at</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:created_at</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:time</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='kw'>return</span>
<span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_find_by_host_id_and_opened_at'>find_by_host_id_and_opened_at</span><span class='lparen'>(</span><span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span> <span class='id identifier rubyid_time'>time</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="infer_vuln_from_session-instance_method">
#<strong>infer_vuln_from_session</strong>(session, wspace) &#x21d2; <tt>void</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>session</span>
<span class='type'>(<tt><span class='object_link'><a href="../Session.html" title="Msf::Session (module)">Msf::Session</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>A session with a db_record Msf::Session#db_record</p>
</div>
</li>
<li>
<span class='name'>wspace</span>
<span class='type'>(<tt>Mdm::Workspace</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 222</span>
<span class='kw'>def</span> <span class='id identifier rubyid_infer_vuln_from_session'>infer_vuln_from_session</span><span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span><span class='comma'>,</span> <span class='id identifier rubyid_wspace'>wspace</span><span class='rparen'>)</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_db_record'>db_record</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_host'>host</span>
<span class='kw'>if</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_via_exploit'>via_exploit</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>exploit/multi/handler</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>and</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_datastore'>exploit_datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ParentModule</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_mod_fullname'>mod_fullname</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_datastore'>exploit_datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ParentModule</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_mod_fullname'>mod_fullname</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_via_exploit'>via_exploit</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_mod_detail'>mod_detail</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Module</span><span class='op'>::</span><span class='const'>Detail</span><span class='period'>.</span><span class='id identifier rubyid_find_by_fullname'>find_by_fullname</span><span class='lparen'>(</span><span class='id identifier rubyid_mod_fullname'>mod_fullname</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_mod_detail'>mod_detail</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='comment'># Then the cache isn&#39;t built yet, take the hit for instantiating the
</span> <span class='comment'># module
</span> <span class='id identifier rubyid_mod_detail'>mod_detail</span> <span class='op'>=</span> <span class='id identifier rubyid_framework'>framework</span><span class='period'>.</span><span class='id identifier rubyid_modules'>modules</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_mod_fullname'>mod_fullname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_refs'>refs</span> <span class='op'>=</span> <span class='id identifier rubyid_mod_detail'>mod_detail</span><span class='period'>.</span><span class='id identifier rubyid_references'>references</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_refs'>refs</span> <span class='op'>=</span> <span class='id identifier rubyid_mod_detail'>mod_detail</span><span class='period'>.</span><span class='id identifier rubyid_refs'>refs</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_mod_name'>mod_name</span> <span class='op'>=</span> <span class='id identifier rubyid_mod_detail'>mod_detail</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
<span class='id identifier rubyid_vuln_info'>vuln_info</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>exploited_at:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span><span class='comma'>,</span>
<span class='label'>host:</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span>
<span class='label'>info:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Exploited by </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_mod_fullname'>mod_fullname</span><span class='embexpr_end'>}</span><span class='tstring_content'> to create Session </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='label'>name:</span> <span class='id identifier rubyid_mod_name'>mod_name</span><span class='comma'>,</span>
<span class='label'>refs:</span> <span class='id identifier rubyid_refs'>refs</span><span class='comma'>,</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_wspace'>wspace</span><span class='comma'>,</span>
<span class='rbrace'>}</span>
<span class='kw'>if</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit'>exploit</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:service_details</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit'>exploit</span><span class='period'>.</span><span class='id identifier rubyid_service_details'>service_details</span>
<span class='id identifier rubyid_service_details'>service_details</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit'>exploit</span><span class='period'>.</span><span class='id identifier rubyid_service_details'>service_details</span>
<span class='id identifier rubyid_service_name'>service_name</span> <span class='op'>=</span> <span class='id identifier rubyid_service_details'>service_details</span><span class='lbracket'>[</span><span class='symbol'>:service_name</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_service_details'>service_details</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_port'>port</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:target_port</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_target_port'>target_port</span> <span class='op'>?</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_target_port'>target_port</span> <span class='op'>:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_datastore'>exploit_datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>RPORT</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_proto'>proto</span> <span class='op'>=</span> <span class='id identifier rubyid_service_details'>service_details</span><span class='lbracket'>[</span><span class='symbol'>:protocol</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_vuln_info'>vuln_info</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_services'>services</span><span class='period'>.</span><span class='id identifier rubyid_find_or_create_by'>find_or_create_by</span><span class='lparen'>(</span><span class='label'>name:</span> <span class='id identifier rubyid_service_name'>service_name</span><span class='comma'>,</span> <span class='label'>port:</span> <span class='id identifier rubyid_port'>port</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span> <span class='label'>proto:</span> <span class='id identifier rubyid_proto'>proto</span><span class='comma'>,</span> <span class='label'>state:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>open</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_vuln_info'>vuln_info</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:target_port</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_target_port'>target_port</span> <span class='op'>?</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_target_port'>target_port</span> <span class='op'>:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit_datastore'>exploit_datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>RPORT</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_vuln_info'>vuln_info</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_services'>services</span><span class='period'>.</span><span class='id identifier rubyid_find_by_port'>find_by_port</span><span class='lparen'>(</span><span class='id identifier rubyid_port'>port</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_port'>port</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_vuln'>vuln</span> <span class='op'>=</span> <span class='id identifier rubyid_report_vuln'>report_vuln</span><span class='lparen'>(</span><span class='id identifier rubyid_vuln_info'>vuln_info</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attempt_info'>attempt_info</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>host:</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span>
<span class='label'>module:</span> <span class='id identifier rubyid_mod_fullname'>mod_fullname</span><span class='comma'>,</span>
<span class='label'>refs:</span> <span class='id identifier rubyid_refs'>refs</span><span class='comma'>,</span>
<span class='label'>session_id:</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span>
<span class='label'>timestamp:</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span><span class='comma'>,</span>
<span class='label'>username:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_username'>username</span><span class='comma'>,</span>
<span class='label'>vuln:</span> <span class='id identifier rubyid_vuln'>vuln</span><span class='comma'>,</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_wspace'>wspace</span><span class='comma'>,</span>
<span class='label'>run_id:</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_exploit'>exploit</span><span class='period'>.</span><span class='id identifier rubyid_user_data'>user_data</span><span class='period'>.</span><span class='id identifier rubyid_try'>try</span><span class='lparen'>(</span><span class='symbol'>:[]</span><span class='comma'>,</span> <span class='symbol'>:run_id</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_report_exploit_success'>report_exploit_success</span><span class='lparen'>(</span><span class='id identifier rubyid_attempt_info'>attempt_info</span><span class='rparen'>)</span>
<span class='id identifier rubyid_vuln'>vuln</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="infer_vuln_from_session_dto-instance_method">
#<strong>infer_vuln_from_session_dto</strong>(session_dto, session_db_record, workspace) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 361</span>
<span class='kw'>def</span> <span class='id identifier rubyid_infer_vuln_from_session_dto'>infer_vuln_from_session_dto</span><span class='lparen'>(</span><span class='id identifier rubyid_session_dto'>session_dto</span><span class='comma'>,</span> <span class='id identifier rubyid_session_db_record'>session_db_record</span><span class='comma'>,</span> <span class='id identifier rubyid_workspace'>workspace</span><span class='rparen'>)</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span> <span class='op'>=</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:vuln_info</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_session_db_record'>session_db_record</span><span class='period'>.</span><span class='id identifier rubyid_host'>host</span>
<span class='id identifier rubyid_mod_name'>mod_name</span> <span class='op'>=</span> <span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:mod_name</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>unknown</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_refs'>refs</span> <span class='op'>=</span> <span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:mod_references</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_vuln_info'>vuln_info</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>exploited_at:</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:time_stamp</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>host:</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span>
<span class='label'>info:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Exploited by </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:mod_fullname</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'> to create Session </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_session_db_record'>session_db_record</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='label'>name:</span> <span class='id identifier rubyid_mod_name'>mod_name</span><span class='comma'>,</span>
<span class='label'>refs:</span> <span class='id identifier rubyid_refs'>refs</span><span class='comma'>,</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_workspace'>workspace</span><span class='comma'>,</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:remote_port</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_service'>service</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_port'>port</span> <span class='op'>?</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_services'>services</span><span class='period'>.</span><span class='id identifier rubyid_find_by_port'>find_by_port</span><span class='lparen'>(</span><span class='id identifier rubyid_port'>port</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_vuln_info'>vuln_info</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_service'>service</span> <span class='kw'>if</span> <span class='id identifier rubyid_service'>service</span>
<span class='id identifier rubyid_vuln'>vuln</span> <span class='op'>=</span> <span class='id identifier rubyid_report_vuln'>report_vuln</span><span class='lparen'>(</span><span class='id identifier rubyid_vuln_info'>vuln_info</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attempt_info'>attempt_info</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>host:</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span>
<span class='label'>module:</span> <span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:mod_fullname</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>refs:</span> <span class='id identifier rubyid_refs'>refs</span><span class='comma'>,</span>
<span class='label'>service:</span> <span class='id identifier rubyid_service'>service</span><span class='comma'>,</span>
<span class='label'>session_id:</span> <span class='id identifier rubyid_session_db_record'>session_db_record</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span>
<span class='label'>timestamp:</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:time_stamp</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>username:</span> <span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:username</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>vuln:</span> <span class='id identifier rubyid_vuln'>vuln</span><span class='comma'>,</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_workspace'>workspace</span><span class='comma'>,</span>
<span class='label'>run_id:</span> <span class='id identifier rubyid_vuln_info_dto'>vuln_info_dto</span><span class='lbracket'>[</span><span class='symbol'>:run_id</span><span class='rbracket'>]</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_report_exploit_success'>report_exploit_success</span><span class='lparen'>(</span><span class='id identifier rubyid_attempt_info'>attempt_info</span><span class='rparen'>)</span>
<span class='id identifier rubyid_vuln'>vuln</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="remove_stale_sessions-instance_method">
#<strong>remove_stale_sessions</strong>(last_seen_interval) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Clean out any stale sessions that have been orphaned by a dead framework instance.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>last_seen_interval</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>interval, in seconds, open sessions are marked as alive</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
202
203
204
205
206
207
208
209
210
211
212
213</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 202</span>
<span class='kw'>def</span> <span class='id identifier rubyid_remove_stale_sessions'>remove_stale_sessions</span><span class='lparen'>(</span><span class='id identifier rubyid_last_seen_interval'>last_seen_interval</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_active'>active</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>closed_at:</span> <span class='kw'>nil</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_db_session'>db_session</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_db_session'>db_session</span><span class='period'>.</span><span class='id identifier rubyid_last_seen'>last_seen</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>or</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span> <span class='op'>-</span> <span class='id identifier rubyid_db_session'>db_session</span><span class='period'>.</span><span class='id identifier rubyid_last_seen'>last_seen</span><span class='rparen'>)</span> <span class='op'>&gt;</span> <span class='lparen'>(</span><span class='int'>2</span> <span class='op'>*</span> <span class='id identifier rubyid_last_seen_interval'>last_seen_interval</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_db_session'>db_session</span><span class='period'>.</span><span class='id identifier rubyid_closed_at'>closed_at</span> <span class='op'>=</span> <span class='id identifier rubyid_db_session'>db_session</span><span class='period'>.</span><span class='id identifier rubyid_last_seen'>last_seen</span> <span class='op'>||</span> <span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_now'>now</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span>
<span class='id identifier rubyid_db_session'>db_session</span><span class='period'>.</span><span class='id identifier rubyid_close_reason'>close_reason</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Orphaned</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_db_session'>db_session</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span>
<span class='kw'>end</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="report_session-instance_method">
<span class="overload">#<strong>report_session</strong>(opts) &#x21d2; <tt>nil</tt>, <tt>Mdm::Session</tt> </span>
<span class="overload">#<strong>report_session</strong>(opts) &#x21d2; <tt>nil</tt>, <tt>Mdm::Session</tt> </span>
</h3><div class="docstring">
<div class="discussion">
<div class="note todo">
<strong>TODO:</strong>
<div class='inline'>
<p><a href="https://www.pivotaltracker.com/story/show/48249739">www.pivotaltracker.com/story/show/48249739</a></p>
</div>
</div>
<div class="note notetag">
<strong>Note:</strong>
<div class='inline'>
<p>The Mdm::Session#desc will be truncated to 255 characters.</p>
</div>
</div>
</div>
</div>
<div class="tags">
<p class="tag_title">Overloads:</p>
<ul class="overload">
<li class="overload_item">
<span class="signature">#<strong>report_session</strong>(opts) &#x21d2; <tt>nil</tt>, <tt>Mdm::Session</tt> </span>
<div class="docstring">
<div class="discussion">
<p>Creates an Mdm::Session from Msf::Session. If <code>via_exploit</code> is set on the <code>session</code>, then an Mdm::Vuln and Mdm::ExploitAttempt is created for the sessions host. The Mdm::Host for the <code>session_host</code> is created using The session.session_host, <code>session.arch</code> (if <code>session</code> responds to arch), and the workspace derived from opts or the <code>session</code>. The Mdm::Session is assumed to be <code>last_seen</code> and <code>opened_at</code> at the time report_session is called. <tt><a href="&#39;ParentModule&#39;">session.exploit_datastore</a></tt> is used for the Mdm::Session#via_exploit if <code>session.via_exploit</code> is exploit/multi/handler.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash{Symbol =&gt; Object}</tt>)</span>
&mdash;
<div class='inline'>
<p>options</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">:workspace</span>
<span class="type">(<tt>Mdm::Workspace</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The workspace for in which the :session host is contained. Also used as the workspace for the Mdm::ExploitAttempt and Mdm::Vuln. Defaults to Mdm::Worksapce with Mdm::Workspace#name equal to <code>session.workspace</code>.</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>nil</tt>)</span>
&mdash;
<div class='inline'>
<p>if Msf::DBManager#active is <code>false</code>.</p>
</div>
</li>
<li>
<span class='type'>(<tt>Mdm::Session</tt>)</span>
&mdash;
<div class='inline'>
<p>if session is saved</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>ArgumentError</tt>)</span>
&mdash;
<div class='inline'>
<p>if :session is not an <span class='object_link'><a href="../Session.html" title="Msf::Session (module)">Session</a></span>.</p>
</div>
</li>
<li>
<span class='type'>(<tt>ActiveRecord::RecordInvalid</tt>)</span>
&mdash;
<div class='inline'>
<p>if session is invalid and cannot be saved, in which case, the Mdm::ExploitAttempt and Mdm::Vuln will not be created, but the Mdm::Host will have been. (There is no transaction</p>
<pre class="code ruby"><code class="ruby">to rollback the Mdm::Host creation.)
</code></pre>
</div>
</li>
</ul>
<p class="tag_title">See Also:</p>
<ul class="see">
<li><span class='object_link'><a href="Host.html#find_or_create_host-instance_method" title="Msf::DBManager::Host#find_or_create_host (method)">Host#find_or_create_host</a></span></li>
<li>Msf::DBManager::Session#Msf#Msf::Util#Msf::Util::Host#Msf::Util::Host.normalize_host</li>
<li><span class='object_link'><a href="ExploitAttempt.html#report_exploit_success-instance_method" title="Msf::DBManager::ExploitAttempt#report_exploit_success (method)">ExploitAttempt#report_exploit_success</a></span></li>
<li><span class='object_link'><a href="Vuln.html#report_vuln-instance_method" title="Msf::DBManager::Vuln#report_vuln (method)">Vuln#report_vuln</a></span></li>
</ul>
</div>
</li>
<li class="overload_item">
<span class="signature">#<strong>report_session</strong>(opts) &#x21d2; <tt>nil</tt>, <tt>Mdm::Session</tt> </span>
<div class="docstring">
<div class="discussion">
<p>Creates an Mdm::Session from Mdm::Host.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash{Symbol =&gt; Object}</tt>)</span>
&mdash;
<div class='inline'>
<p>options</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">:closed_at</span>
<span class="type">(<tt>DateTime</tt>, <tt>Time</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The date and time the session was closed.</p>
</div>
</li>
<li>
<span class="name">:close_reason</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>Reason the session was closed.</p>
</div>
</li>
<li>
<span class="name">:datastore</span>
<span class="type">(<tt>Hash</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p><span class='object_link'><a href="../DataStore.html#to_h-instance_method" title="Msf::DataStore#to_h (method)">Msf::DataStore#to_h</a></span>.</p>
</div>
</li>
<li>
<span class="name">:desc</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>Session description. Will be truncated to 255 characters.</p>
</div>
</li>
<li>
<span class="name">:host</span>
<span class="type">(<tt>Mdm::Host</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The host on which the session was opened.</p>
</div>
</li>
<li>
<span class="name">:last_seen</span>
<span class="type">(<tt>DateTime</tt>, <tt>Time</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The last date and time the session was seen to be open. Defaults to :closed_ats value.</p>
</div>
</li>
<li>
<span class="name">:opened_at</span>
<span class="type">(<tt>DateTime</tt>, <tt>Time</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The date and time that the session was opened.</p>
</div>
</li>
<li>
<span class="name">:platform</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The platform of the host.</p>
</div>
</li>
<li>
<span class="name">:routes</span>
<span class="type">(<tt>Array</tt>)</span>
<span class="default">
&mdash; default:
<tt>[]</tt>
</span>
&mdash; <div class='inline'>
<p>The routes through the session for pivoting.</p>
</div>
</li>
<li>
<span class="name">:stype</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>Session type.</p>
</div>
</li>
<li>
<span class="name">:via_exploit</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The Module#fullname of the exploit that was used to open the session.</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>nil</tt>)</span>
&mdash;
<div class='inline'>
<p>if Msf::DBManager#active is <code>false</code>.</p>
</div>
</li>
<li>
<span class='type'>(<tt>Mdm::Session</tt>)</span>
&mdash;
<div class='inline'>
<p>if session is saved.</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>ArgumentError</tt>)</span>
&mdash;
<div class='inline'>
<p>if :host is not an Mdm::Host.</p>
</div>
</li>
<li>
<span class='type'>(<tt>ActiveRecord::RecordInvalid</tt>)</span>
&mdash;
<div class='inline'>
<p>if session is invalid and cannot be saved.</p>
</div>
</li>
</ul>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'></span>
<div class='inline'>
<p>ArgumentError if :host and :session are both <code>nil</code></p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 106</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_session'>report_session</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_active'>active</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:session</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_session'>session</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:session</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='id identifier rubyid_create_mdm_session_from_session'>create_mdm_session_from_session</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_db_record'>db_record</span> <span class='op'>=</span> <span class='id identifier rubyid_s'>s</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='id identifier rubyid_create_mdm_session_from_host'>create_mdm_session_from_host</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Missing option :session or :host</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_wspace'>wspace</span> <span class='op'>=</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_workspace'>workspace</span>
<span class='kw'>if</span> <span class='id identifier rubyid_session'>session</span> <span class='kw'>and</span> <span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_via_exploit'>via_exploit</span>
<span class='comment'># This is a live session, we know the host is vulnerable to something.
</span> <span class='id identifier rubyid_infer_vuln_from_session'>infer_vuln_from_session</span><span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span><span class='comma'>,</span> <span class='id identifier rubyid_wspace'>wspace</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_s'>s</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="report_session_dto-instance_method">
#<strong>report_session_dto</strong>(session_dto) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
137
138
139
140
141
142
143
144
145
146
147
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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 137</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_session_dto'>report_session_dto</span><span class='lparen'>(</span><span class='id identifier rubyid_session_dto'>session_dto</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_active'>active</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_host_data'>host_data</span> <span class='op'>=</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:host_data</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_workspace'>workspace</span> <span class='op'>=</span> <span class='id identifier rubyid_workspaces'>workspaces</span><span class='lparen'>(</span><span class='lbrace'>{</span> <span class='label'>name:</span> <span class='id identifier rubyid_host_data'>host_data</span><span class='lbracket'>[</span><span class='symbol'>:workspace</span><span class='rbracket'>]</span> <span class='rbrace'>}</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
<span class='id identifier rubyid_h_opts'>h_opts</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>host:</span> <span class='id identifier rubyid_host_data'>host_data</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_workspace'>workspace</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_h_opts'>h_opts</span><span class='lbracket'>[</span><span class='symbol'>:arch</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_host_data'>host_data</span><span class='lbracket'>[</span><span class='symbol'>:arch</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_host_data'>host_data</span><span class='lbracket'>[</span><span class='symbol'>:arch</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_host_data'>host_data</span><span class='lbracket'>[</span><span class='symbol'>:arch</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_find_or_create_host'>find_or_create_host</span><span class='lparen'>(</span><span class='id identifier rubyid_h_opts'>h_opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_session_data'>session_data</span> <span class='op'>=</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:session_data</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_sess_data'>sess_data</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>datastore:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>desc:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:desc</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>host_id:</span> <span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span>
<span class='label'>last_seen:</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:time_stamp</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>local_id:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:local_id</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>opened_at:</span> <span class='id identifier rubyid_session_dto'>session_dto</span><span class='lbracket'>[</span><span class='symbol'>:time_stamp</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>platform:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:platform</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>port:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>routes:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>stype:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:stype</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>via_exploit:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:via_exploit</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='label'>via_payload:</span> <span class='id identifier rubyid_session_data'>session_data</span><span class='lbracket'>[</span><span class='symbol'>:via_payload</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='rbrace'>}</span>
<span class='kw'>if</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:via_exploit</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>exploit/multi/handler</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>and</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span> <span class='kw'>and</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ParentModule</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:via_exploit</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:datastore</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ParentModule</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_session_db_record'>session_db_record</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_create!'>create!</span><span class='lparen'>(</span><span class='id identifier rubyid_sess_data'>sess_data</span><span class='rparen'>)</span>
<span class='comment'># TODO: Figure out task stuff
</span>
<span class='kw'>if</span> <span class='id identifier rubyid_sess_data'>sess_data</span><span class='lbracket'>[</span><span class='symbol'>:via_exploit</span><span class='rbracket'>]</span>
<span class='comment'># This is a live session, we know the host is vulnerable to something.
</span> <span class='id identifier rubyid_infer_vuln_from_session_dto'>infer_vuln_from_session_dto</span><span class='lparen'>(</span><span class='id identifier rubyid_session_dto'>session_dto</span><span class='comma'>,</span> <span class='id identifier rubyid_session_db_record'>session_db_record</span><span class='comma'>,</span> <span class='id identifier rubyid_workspace'>workspace</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_session_db_record'>session_db_record</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="report_session_host_dto-instance_method">
#<strong>report_session_host_dto</strong>(host_dto) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
132
133
134
135</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 132</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_session_host_dto'>report_session_host_dto</span><span class='lparen'>(</span><span class='id identifier rubyid_host_dto'>host_dto</span><span class='rparen'>)</span>
<span class='id identifier rubyid_host_dto'>host_dto</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_get_host'>get_host</span><span class='lparen'>(</span><span class='id identifier rubyid_host_dto'>host_dto</span><span class='rparen'>)</span>
<span class='id identifier rubyid_create_mdm_session_from_host'>create_mdm_session_from_host</span><span class='lparen'>(</span><span class='id identifier rubyid_host_dto'>host_dto</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="sessions-instance_method">
#<strong>sessions</strong>(opts) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns a list of all sessions in the database that are selected via the key-value pairs in the specified options.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 7</span>
<span class='kw'>def</span> <span class='id identifier rubyid_sessions'>sessions</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_active'>active</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='comment'># If we have the ID, there is no point in creating a complex query.
</span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='kw'>return</span> <span class='const'>Array</span><span class='period'>.</span><span class='id identifier rubyid_wrap'>wrap</span><span class='lparen'>(</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:id</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_wspace'>wspace</span> <span class='op'>=</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="../Util.html" title="Msf::Util (module)">Util</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Util/DBManager.html" title="Msf::Util::DBManager (module)">DBManager</a></span></span><span class='period'>.</span><span class='id identifier rubyid_process_opts_workspace'><span class='object_link'><a href="../Util/DBManager.html#process_opts_workspace-class_method" title="Msf::Util::DBManager.process_opts_workspace (method)">process_opts_workspace</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_framework'>framework</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span><span class='lparen'>(</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='symbol'>:workspace</span><span class='rparen'>)</span>
<span class='id identifier rubyid_search_term'>search_term</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='symbol'>:search_term</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_search_term'>search_term</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_search_term'>search_term</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_column_search_conditions'>column_search_conditions</span> <span class='op'>=</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="../Util.html" title="Msf::Util (module)">Util</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Util/DBManager.html" title="Msf::Util::DBManager (module)">DBManager</a></span></span><span class='period'>.</span><span class='id identifier rubyid_create_all_column_search_conditions'><span class='object_link'><a href="../Util/DBManager.html#create_all_column_search_conditions-class_method" title="Msf::Util::DBManager.create_all_column_search_conditions (method)">create_all_column_search_conditions</a></span></span><span class='lparen'>(</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='comma'>,</span> <span class='id identifier rubyid_search_term'>search_term</span><span class='rparen'>)</span>
<span class='id identifier rubyid_wspace'>wspace</span><span class='period'>.</span><span class='id identifier rubyid_sessions'>sessions</span><span class='period'>.</span><span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='symbol'>:host</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='id identifier rubyid_column_search_conditions'>column_search_conditions</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_wspace'>wspace</span><span class='period'>.</span><span class='id identifier rubyid_sessions'>sessions</span><span class='period'>.</span><span class='id identifier rubyid_includes'>includes</span><span class='lparen'>(</span><span class='symbol'>:host</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_session-instance_method">
#<strong>update_session</strong>(opts) &#x21d2; <tt>Mdm::Session</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Update the attributes of a session entry with the values in opts. The values in opts should match the attributes to update.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>opts</span>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Hash containing the updated values. Key should match the attribute to update. Must contain :id of record to update.</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Mdm::Session</tt>)</span>
&mdash;
<div class='inline'>
<p>The updated Mdm::Session object.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
188
189
190
191
192
193
194
195
196
197
198</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/session.rb', line 188</span>
<span class='kw'>def</span> <span class='id identifier rubyid_update_session'>update_session</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_active'>active</span>
<span class='op'>::</span><span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='lbrace'>{</span>
<span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span><span class='lparen'>(</span><span class='rparen'>)</span> <span class='comment'># protect the original caller&#39;s opts
</span> <span class='id identifier rubyid_id'>id</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='symbol'>:id</span><span class='rparen'>)</span>
<span class='id identifier rubyid_session'>session</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Session</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='rparen'>)</span>
<span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_update!'>update!</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_session'>session</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:01:21 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>