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

696 lines
39 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::ExploitAttempt
&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::ExploitAttempt";
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 (E)</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">ExploitAttempt</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::ExploitAttempt
</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/exploit_attempt.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="#report_exploit-instance_method" title="#report_exploit (instance method)">#<strong>report_exploit</strong>(opts = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>report_exploit() used to be used to track sessions and which modules opened them.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#report_exploit_attempt-instance_method" title="#report_exploit_attempt (instance method)">#<strong>report_exploit_attempt</strong>(host, 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_exploit_failure-instance_method" title="#report_exploit_failure (instance method)">#<strong>report_exploit_failure</strong>(opts) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Create an Mdm::ExploitAttempt` (and possibly an `Mdm::VulnAttempt`, if the `vuln` option is passed).</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#report_exploit_success-instance_method" title="#report_exploit_success (instance method)">#<strong>report_exploit_success</strong>(opts) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Create an Mdm::ExploitAttempt` (and possibly an `Mdm::VulnAttempt`, if the `vuln` option is passed).</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="report_exploit-instance_method">
#<strong>report_exploit</strong>(opts = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>report_exploit() used to be used to track sessions and which modules opened them. That information is now available with the session table directly. TODO: kill this completely some day for now just warn if some other UI is actually using it.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
6
7
8
9
10
11</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/exploit_attempt.rb', line 6</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_exploit'>report_exploit</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_wlog'><span class='object_link'><a href="../../top-level-namespace.html#wlog-instance_method" title="#wlog (method)">wlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Deprecated method call: report_exploit()\n</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>report_exploit() options: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>report_exploit() call stack:\n\t</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_caller'>caller</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n\t</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="report_exploit_attempt-instance_method">
#<strong>report_exploit_attempt</strong>(host, opts) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
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/exploit_attempt.rb', line 13</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_exploit_attempt'>report_exploit_attempt</span><span class='lparen'>(</span><span class='id identifier rubyid_host'>host</span><span class='comma'>,</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='kw'>return</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_host'>host</span>
<span class='id identifier rubyid_info'>info</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='comment'># Opts can be keyed by strings or symbols
</span> <span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>VulnAttempt</span><span class='period'>.</span><span class='id identifier rubyid_column_names'>column_names</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_kn'>kn</span><span class='op'>|</span>
<span class='id identifier rubyid_k'>k</span> <span class='op'>=</span> <span class='id identifier rubyid_kn'>kn</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>host_id</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_kn'>kn</span><span class='rparen'>)</span>
<span class='id identifier rubyid_info'>info</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='id identifier rubyid_kn'>kn</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='id identifier rubyid_kn'>kn</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_info'>info</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_host'>host</span><span class='period'>.</span><span class='id identifier rubyid_exploit_attempts'>exploit_attempts</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_info'>info</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="report_exploit_failure-instance_method">
#<strong>report_exploit_failure</strong>(opts) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>Create an Mdm::ExploitAttempt` (and possibly an `Mdm::VulnAttempt`, if the `vuln` option is passed).</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Options Hash (<tt>opts</tt>):</p>
<ul class="option">
<li>
<span class="name">:refs</span>
<span class="type">(<tt>Array&lt;String&gt;</tt>, <tt>Array&lt;<span class='object_link'><a href="../Module/Reference.html" title="Msf::Module::Reference (class)">Msf::Module::Reference</a></span>&gt;</tt>)</span>
<span class="default">
</span>
</li>
<li>
<span class="name">:host</span>
<span class="type">(<tt>Mdm::Host</tt>)</span>
<span class="default">
</span>
</li>
<li>
<span class="name">:service</span>
<span class="type">(<tt>Mdm::Service</tt>)</span>
<span class="default">
</span>
</li>
<li>
<span class="name">:port</span>
<span class="type">(<tt>Integer</tt>)</span>
<span class="default">
&mdash; default:
<tt>nil</tt>
</span>
</li>
<li>
<span class="name">:proto</span>
<span class="type">(<tt>"tcp"</tt>, <tt>"udp"</tt>)</span>
<span class="default">
&mdash; default:
<tt>Msf::DBManager::DEFAULT_SERVICE_PROTO</tt>
</span>
&mdash; <div class='inline'>
<p>See Mdm::Service::PROTOS`</p>
</div>
</li>
<li>
<span class="name">:vuln</span>
<span class="type">(<tt>Mdm::Vuln</tt>)</span>
<span class="default">
&mdash; default:
<tt>nil</tt>
</span>
</li>
<li>
<span class="name">:timestamp</span>
<span class="type">(<tt>Time</tt>)</span>
<span class="default">
&mdash; default:
<tt>nil</tt>
</span>
</li>
<li>
<span class="name">:timestamp</span>
<span class="type">(<tt>Mdm::Vuln</tt>)</span>
<span class="default">
&mdash; default:
<tt>nil</tt>
</span>
</li>
<li>
<span class="name">:module</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
&mdash; default:
<tt>nil</tt>
</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/exploit_attempt.rb', line 35</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_exploit_failure'>report_exploit_failure</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'>unless</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:refs</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</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_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_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_proto'>proto</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:proto</span><span class='rbracket'>]</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="../DBManager.html" title="Msf::DBManager (class)">DBManager</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../DBManager.html#DEFAULT_SERVICE_PROTO-constant" title="Msf::DBManager::DEFAULT_SERVICE_PROTO (constant)">DEFAULT_SERVICE_PROTO</a></span></span>
<span class='id identifier rubyid_svc'>svc</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_rids'>rids</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'>:ref_ids</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:refs</span><span class='rbracket'>]</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_ref'>ref</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_instance_of?'>instance_of?</span><span class='lparen'>(</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Module</span><span class='op'>::</span><span class='const'>Ref</span><span class='rparen'>)</span>
<span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
<span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:ctx_id</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:ctx_val</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_ctx_id'>ctx_id</span><span class='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_ctx_val'>ctx_val</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_ref'>ref</span><span class='lbracket'>[</span><span class='symbol'>:ctx_id</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_ref'>ref</span><span class='lbracket'>[</span><span class='symbol'>:ctx_val</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ref'>ref</span><span class='lbracket'>[</span><span class='symbol'>:ctx_id</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ref'>ref</span><span class='lbracket'>[</span><span class='symbol'>:ctx_val</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_ref'>ref</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span>
<span class='id identifier rubyid_str'>str</span> <span class='op'>=</span> <span class='id identifier rubyid_ref'>ref</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_rids'>rids</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_find_or_create_ref'>find_or_create_ref</span><span class='lparen'>(</span><span class='label'>name:</span> <span class='id identifier rubyid_str'>str</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_str'>str</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>end</span>
<span class='comment'># Look up the service as appropriate
</span> <span class='kw'>if</span> <span class='id identifier rubyid_port'>port</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_svc'>svc</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='comment'># only one result can be returned, as the +port+ field restricts potential results to a single service
</span> <span class='id identifier rubyid_svc'>svc</span> <span class='op'>=</span> <span class='id identifier rubyid_services'>services</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'>:hosts</span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span><span class='label'>address:</span> <span class='id identifier rubyid_host'>host</span><span class='rbrace'>}</span><span class='comma'>,</span>
<span class='symbol'>:proto</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_proto'>proto</span><span class='comma'>,</span>
<span class='symbol'>:port</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_port'>port</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
<span class='kw'>end</span>
<span class='comment'># Look up the host as appropriate
</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_host'>host</span> <span class='op'>||</span> <span class='op'>!</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='lparen'>(</span><span class='op'>::</span><span class='const'>Mdm</span><span class='op'>::</span><span class='const'>Host</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_svc'>svc</span><span class='op'>&amp;.</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'>Service</span>
<span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='id identifier rubyid_svc'>svc</span><span class='period'>.</span><span class='id identifier rubyid_host'>host</span>
<span class='kw'>else</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='label'>workspace:</span> <span class='id identifier rubyid_wspace'>wspace</span><span class='comma'>,</span> <span class='label'>address:</span> <span class='id identifier rubyid_host'>host</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='comment'># Bail if we dont have a host object
</span> <span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_host'>host</span>
<span class='id identifier rubyid_vuln'>vuln</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>if</span> <span class='id identifier rubyid_rids'>rids</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='comment'># Only perform vuln lookup when no check_code is present (normal
</span> <span class='comment'># exploit flow) or the check result positively indicates vulnerability.
</span> <span class='comment'># Safe, Unknown, and Detected results should not associate this attempt
</span> <span class='comment'># with an existing vuln. Only key off check_code — fail_reason alone
</span> <span class='comment'># is too broad (e.g. Failure::Unknown covers real exploit failures too).
</span> <span class='id identifier rubyid_vuln_check_codes'>vuln_check_codes</span> <span class='op'>=</span> <span class='lbracket'>[</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="../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Exploit/CheckCode.html" title="Msf::Exploit::CheckCode (class)">CheckCode</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Exploit/CheckCode.html#Appears-constant" title="Msf::Exploit::CheckCode::Appears (constant)">Appears</a></span></span><span class='period'>.</span><span class='id identifier rubyid_code'><span class='object_link'><a href="../Exploit/CheckCode.html#code-instance_method" title="Msf::Exploit::CheckCode#code (method)">code</a></span></span><span class='comma'>,</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="../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Exploit/CheckCode.html" title="Msf::Exploit::CheckCode (class)">CheckCode</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Exploit/CheckCode.html#Vulnerable-constant" title="Msf::Exploit::CheckCode::Vulnerable (constant)">Vulnerable</a></span></span><span class='period'>.</span><span class='id identifier rubyid_code'><span class='object_link'><a href="../Exploit/CheckCode.html#code-instance_method" title="Msf::Exploit::CheckCode#code (method)">code</a></span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:check_code</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_vuln_check_codes'>vuln_check_codes</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:check_code</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='comment'># Try to find an existing vulnerability with the same service &amp; references
</span> <span class='comment'># or, if svc is nil, with the same host &amp; references
</span> <span class='id identifier rubyid_vuln'>vuln</span> <span class='op'>=</span> <span class='id identifier rubyid_find_vuln_by_refs'>find_vuln_by_refs</span><span class='lparen'>(</span><span class='id identifier rubyid_rids'>rids</span><span class='comma'>,</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span> <span class='id identifier rubyid_svc'>svc</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='comment'># Fall back to a host-only lookup when the service-scoped query found
</span> <span class='comment'># nothing. Only match vulns with no associated service to avoid
</span> <span class='comment'># misattributing attempts to a vuln on a different service.
</span> <span class='kw'>if</span> <span class='id identifier rubyid_svc'>svc</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_vuln'>vuln</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_fallback_vuln'>fallback_vuln</span> <span class='op'>=</span> <span class='id identifier rubyid_find_vuln_by_refs'>find_vuln_by_refs</span><span class='lparen'>(</span><span class='id identifier rubyid_rids'>rids</span><span class='comma'>,</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_vuln'>vuln</span> <span class='op'>=</span> <span class='id identifier rubyid_fallback_vuln'>fallback_vuln</span> <span class='kw'>if</span> <span class='id identifier rubyid_fallback_vuln'>fallback_vuln</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_fallback_vuln'>fallback_vuln</span><span class='period'>.</span><span class='id identifier rubyid_service_id'>service_id</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_svc'>svc</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='id identifier rubyid_host'>host</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:vuln</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_vuln'>vuln</span> <span class='kw'>if</span> <span class='id identifier rubyid_vuln'>vuln</span>
<span class='id identifier rubyid_do_report_failure_or_success'>do_report_failure_or_success</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="report_exploit_success-instance_method">
#<strong>report_exploit_success</strong>(opts) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>Create an Mdm::ExploitAttempt` (and possibly an `Mdm::VulnAttempt`, if the `vuln` option is passed).</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/exploit_attempt.rb', line 114</span>
<span class='kw'>def</span> <span class='id identifier rubyid_report_exploit_success'>report_exploit_success</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'>unless</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:refs</span><span class='rbracket'>]</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='op'>||</span> <span class='kw'>return</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='comment'># it is rude to modify arguments in place
</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_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_prot'>prot</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:proto</span><span class='rbracket'>]</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="../DBManager.html" title="Msf::DBManager (class)">DBManager</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../DBManager.html#DEFAULT_SERVICE_PROTO-constant" title="Msf::DBManager::DEFAULT_SERVICE_PROTO (constant)">DEFAULT_SERVICE_PROTO</a></span></span>
<span class='id identifier rubyid_svc'>svc</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span>
<span class='comment'># Look up or generate the service as appropriate
</span> <span class='kw'>if</span> <span class='id identifier rubyid_port'>port</span> <span class='kw'>and</span> <span class='id identifier rubyid_svc'>svc</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:proto</span><span class='rbracket'>]</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="../DBManager.html" title="Msf::DBManager (class)">DBManager</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../DBManager.html#DEFAULT_SERVICE_PROTO-constant" title="Msf::DBManager::DEFAULT_SERVICE_PROTO (constant)">DEFAULT_SERVICE_PROTO</a></span></span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:service</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_report_service'>report_service</span><span class='lparen'>(</span>
<span class='label'>workspace:</span> <span class='id identifier rubyid_wspace'>wspace</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'>port:</span> <span class='id identifier rubyid_port'>port</span><span class='comma'>,</span> <span class='label'>proto:</span> <span class='id identifier rubyid_prot'>prot</span>
<span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_do_report_failure_or_success'>do_report_failure_or_success</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:01:57 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>