<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[infosecnoodle]]></title><description><![CDATA[Red Team Security Stuff]]></description><link>https://www.infosecnoodle.com</link><image><url>https://substackcdn.com/image/fetch/$s_!ngkT!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34c52-e4b1-4cf4-a165-2a28ce8f7fac_100x100.png</url><title>infosecnoodle</title><link>https://www.infosecnoodle.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 16 Apr 2026 21:10:37 GMT</lastBuildDate><atom:link href="https://www.infosecnoodle.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[infosecnoodle]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[infosecnoodle@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[infosecnoodle@substack.com]]></itunes:email><itunes:name><![CDATA[Ben S.]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ben S.]]></itunes:author><googleplay:owner><![CDATA[infosecnoodle@substack.com]]></googleplay:owner><googleplay:email><![CDATA[infosecnoodle@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ben S.]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Obtaining Microsoft Entra Refresh Tokens via Beacon]]></title><description><![CDATA[An alternative technique for obtaining Microsoft Entra refresh tokens (and "family refresh tokens") using beacon on a compromised endpoint.]]></description><link>https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh</link><guid isPermaLink="false">https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh</guid><pubDate>Fri, 09 May 2025 01:33:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ffdf8016-93ba-4f41-a4e5-8b96a603ccfd_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Background</h2><p>I was recently in a situation where I needed to pivot from a compromised windows endpoint to my target&#8217;s Entra tenancy. The usual go-to in this scenario is to extract the primary refresh token (PRT) from the endpoint via beacon (using BOFs like <a href="https://github.com/wotwot563/aad_prt_bof">aad_prt_bof</a> or <a href="https://github.com/kozmer/aad-bofs/blob/main/request_aad_prt/README.md">request_aad_prt</a> by <a href="https://x.com/k0zmer">Kozmer</a>). However, in this case, my beacon was running on a non-domain-joined, BYOD device, meaning the PRT extraction approach was off the table. I needed another way to obtain refresh tokens, so that I could maintain access to the compromised identity when the beacon inevitably dies.</p><blockquote><p>Side note - I&#8217;d strongly recommend reading <em>&#8220;<a href="https://blog.tw1sm.io/p/an-operators-guide-to-device-joined">An Operator&#8217;s Guide to Device-Joined Hosts and the PRT Cookie</a>&#8221;</em> by Matthew Creel for a great insight into PRTs. </p></blockquote><p>During a quick chat, my good friend <a href="https://x.com/jack_halon">Jack</a> made me aware of the new BOF that was recently added to TrustedSec&#8217;s <a href="https://github.com/trustedsec/CS-Remote-OPs-BOF/">Remote Ops</a> Repo, called <a href="https://github.com/trustedsec/CS-Remote-OPs-BOF/tree/main/Remote/get_azure_token">get_azure_token</a> by <a href="https://x.com/freefirex2">Christopher Paschen</a>. This BOF is awesome and is the inspiration for this post.</p><p>In short, the BOF works by leveraging the user already being authenticated to Entra via the browser. It starts by launching a new browser window and initiating an <a href="https://learn.microsoft.com/en-us/azure/active-directory-b2c/authorization-code-flow">authorization code flow</a> for a given Entra client ID and scope. It then starts a local &#8216;listener&#8217; to capture the incoming authorization code, and uses the captured code to request an access and refresh token, which is then displayed to the operator.</p><p>The BOF's approach has various advantages, one of them being that all requests originate from the end-user&#8217;s machine and IP address. However, an important caveat to note for this BOF is that the specified client ID <strong>must</strong> allow &#8220;<em>http://localhost</em>&#8221; as the <em>redirect_uri</em> parameter. </p><h2>Redirect URI</h2><p>Unfortunately, because the <em>redirect_uri</em> parameter is set to localhost, it limits the number of client IDs that can be used with this technique - especially if you wanted to leverage the family of client ID (<a href="https://github.com/secureworks/family-of-client-ids-research">FOCI</a>) abuse. </p><p>Searching through the <a href="https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv">currently known</a> first-party client IDs that are both FOCI-enabled and support &#8220;<em>http://localhost</em>&#8221; yields very few results. I found only three:</p><ul><li><p>Microsoft Azure CLI</p></li><li><p>Microsoft Azure PowerShell,</p></li><li><p>Visual Studio &#8211; Legacy</p></li></ul><p>To prying eyes (the SOC), authenticating to any three of these could potentially seem unusual for a typical user and trigger an alert. To make matters more difficult, in mature tenancies, there&#8217;s a chance that these specific applications wouldn't have consent in the tenant (which unfortunately for me, was the case).</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/BLkzn/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://img.datawrapper.de/BLkzn/plain-s.png&quot;,&quot;thumbnail_url_full&quot;:&quot;&quot;,&quot;height&quot;:189,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/BLkzn/1/" width="730" height="189" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><h2>Microsoft&#8217;s Native Client Redirect URI</h2><p>Microsoft provides a predefined redirect URI called the native client <a href="https://learn.microsoft.com/en-us/entra/identity-platform/reply-url">redirect URI</a> (<code>https://login.microsoftonline.com/common/oauth2/nativeclient</code>), which is used in OAuth flows for native applications like desktop or mobile apps. It essentially allows these apps to receive an authorization code from Entra without hosting a web server or using a custom URI scheme - the browser simply redirects to this URI with a &#8220;code&#8221; parameter, which the app captures and exchanges for access and refresh tokens.</p><p>To get a better understanding of the authcode flow in action, check out JUMPSEC&#8217;s tool called <em><a href="https://github.com/JumpsecLabs/TokenSmith">TokenSmith</a></em> (made by <a href="https://www.linkedin.com/in/gladstomych/">Sunny Chau</a>) which automates the process (although the URL and authcode must be copied between the target by hand). If you paste the URL into a browser where you&#8217;re signed in (and the client ID is allowed), you&#8217;ll see the authcode returned almost instantly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ojve!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ojve!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 424w, https://substackcdn.com/image/fetch/$s_!ojve!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 848w, https://substackcdn.com/image/fetch/$s_!ojve!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 1272w, https://substackcdn.com/image/fetch/$s_!ojve!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ojve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png" width="1456" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71671d19-5338-4272-9210-c86da576e486_2242x1186.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:465081,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.infosecnoodle.com/i/162604675?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ojve!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 424w, https://substackcdn.com/image/fetch/$s_!ojve!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 848w, https://substackcdn.com/image/fetch/$s_!ojve!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 1272w, https://substackcdn.com/image/fetch/$s_!ojve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71671d19-5338-4272-9210-c86da576e486_2242x1186.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">JUMPSEC&#8217;s <em>TokenSmith</em> tool being used with the &#8220;authcode&#8221; functionality, generating an authorization code flow URL (Microsoft Teams client ID).</figcaption></figure></div><p>It occurred to me that the authorization code also resides in the window title. If we extracted it from there, it could allow us to use the native client redirect URI instead, giving us access to a much larger range of FOCIs and removing the restriction of only being able to use FOCIs that allow "<em>http://localhost</em>" as the redirect URI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ge4S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ge4S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 424w, https://substackcdn.com/image/fetch/$s_!Ge4S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 848w, https://substackcdn.com/image/fetch/$s_!Ge4S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 1272w, https://substackcdn.com/image/fetch/$s_!Ge4S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ge4S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png" width="1294" height="362" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:362,&quot;width&quot;:1294,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46993,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.infosecnoodle.com/i/162604675?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ge4S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 424w, https://substackcdn.com/image/fetch/$s_!Ge4S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 848w, https://substackcdn.com/image/fetch/$s_!Ge4S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 1272w, https://substackcdn.com/image/fetch/$s_!Ge4S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe7c0be7-a9a7-4f26-9779-3cd2312be3fc_1294x362.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Authorization code returned in URL and window title</figcaption></figure></div><p>There&#8217;s going to be multiple ways to do this, but the easiest to PoC I could come up with was extraction via <code>GetWindowTextA</code> API. With this approach, we could carry out authcode flows against a greater number of FOCIs - including our favourites like Teams, Copilot, Edge, etc. This can make a massive difference in terms of OPSEC.</p><p>I noted the following first-party FOCIs allow the &#8220;native client&#8221; redirect URI:</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/5M6Ll/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://img.datawrapper.de/5M6Ll/plain-s.png&quot;,&quot;thumbnail_url_full&quot;:&quot;&quot;,&quot;height&quot;:707,&quot;title&quot;:&quot;[ Insert title here ]&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/5M6Ll/1/" width="730" height="707" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><h2>BOF or it didn&#8217;t happen</h2><p>As a basic proof-of-concept, I threw together a BOF that does the following:</p><ol><li><p>Opens a browser window to the authcode flow URL (for a client ID and scope)</p></li><li><p>Extracts the returned code from the window title</p></li><li><p>Uses the code to request and obtain the tokens</p></li></ol><pre><code><code>beacon&gt; entra-authcode-flow &lt;clientid&gt; &lt;scope&gt;</code></code></pre><div id="vimeo-1082685675" class="vimeo-wrap" data-attrs="{&quot;videoId&quot;:&quot;1082685675&quot;,&quot;videoKey&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true}" data-component-name="VimeoToDOM"><div class="vimeo-inner"><iframe src="https://player.vimeo.com/video/1082685675?autoplay=0" frameborder="0" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" loading="lazy"></iframe></div></div><p>You can find the BOF and usage instructions at my GitHub, <a href="https://github.com/sudonoodle/BOF-entra-authcode-flow">here</a>.</p><h2>Closing Thoughts</h2><p>It goes without saying, but this is probably for edge-case scenarios only. In my eyes, obtaining the PRT is an easier and more reliable method for identity persistence. This was purely a concept that I wanted to try out, and I was pleased to see that it worked somewhat reliably for me and my team. </p><p>Again, the most important benefit with this approach (for the red team) is that all authentication requests and token requests originate from the compromised endpoint. When paired with your favourite post-exploitation tools like <a href="https://github.com/RedByte1337/GraphSpy">GraphSpy</a> (especially via SOCKS) this could become a nice little technique to have on standby.</p><p>Thanks for reading!</p><h2>Acknowledgements</h2><ul><li><p><a href="https://x.com/freefirex2">Christopher Paschen</a> (<a href="https://x.com/freefirex2">@freefirex</a>) for creating the original <a href="https://github.com/trustedsec/CS-Remote-OPs-BOF/tree/main/Remote/get_azure_token">get_azure_token</a> BOF </p></li><li><p><a href="https://github.com/secureworks/family-of-client-ids-research">FOCI</a> research by SecureWorks and <a href="https://x.com/_dirkjan">Dirk-Jan</a>&#8217;s <a href="https://github.com/dirkjanm/ROADtools/blob/master/roadtx/roadtools/roadtx/firstpartyscopes.json">first-party scopes</a></p></li><li><p><a href="https://x.com/v3ded">V3ded</a> and <a href="https://x.com/jack_halon">Jack Halon</a> for proofreading and code review (thank you guys &lt;3)</p></li><li><p><a href="https://x.com/ethicalsoup">@ethicalsoup</a> for some extra proofreading!</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Staging Beacons to Isolated Targets with BOF.NET]]></title><description><![CDATA[Using BOF.NET to deliver staged, web-hosted shellcode to isolated internal targets.]]></description><link>https://www.infosecnoodle.com/p/staging-to-isolated-targets-with</link><guid isPermaLink="false">https://www.infosecnoodle.com/p/staging-to-isolated-targets-with</guid><pubDate>Sun, 05 Jan 2025 20:49:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9e527a78-31b5-49ce-b407-0b6dec442946_2192x1372.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Background</h2><p>Delivering staged implants has been back on the cards for a while. Major EDR vendors are now scrutinising executables more if they appear to house embedded shellcode, as this produces an artefact with much higher entropy. This is why staging has had a bit of a comeback, because if your implant stage is delivered remotely and in-memory, then you can reduce the entropy of the file and avoid this cat-and-mouse game. I&#8217;ve personally found this to be quite effective, especially for lateral movement.</p><p>Of course, staging relies on the target reaching your remote stager. This can be a bit more difficult for more isolated targets, such as those found deep within ICS networks. I&#8217;ve found that one of the most effective solutions is to host the shellcode via beacon on a neighbouring host (assuming you can get one) using <a href="https://github.com/CCob/BOF.NET">BOF.NET</a>.</p><h2>Hosting Files in-memory via BOF.NET</h2><p><a href="https://x.com/_ethicalchaos_">Ceri Coburn</a>&#8217;s BOF.NET project includes several built-in BOFs to demonstrate the project&#8217;s functionality, including a virtual file system (VFS) and a WebServer BOF. This provides all the functionality we need to temporarily store and host a file in-memory, without uploading or dropping our shellcode anywhere. After initialising BOF.NET in beacon, adding files to the VFS is straightforward:</p><pre><code>beacon&gt; bofnet_vfs_add [local-path] [filename] [mimetype]</code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7KHV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7KHV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 424w, https://substackcdn.com/image/fetch/$s_!7KHV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 848w, https://substackcdn.com/image/fetch/$s_!7KHV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 1272w, https://substackcdn.com/image/fetch/$s_!7KHV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7KHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png" width="1456" height="188" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:188,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78637,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7KHV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 424w, https://substackcdn.com/image/fetch/$s_!7KHV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 848w, https://substackcdn.com/image/fetch/$s_!7KHV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 1272w, https://substackcdn.com/image/fetch/$s_!7KHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935a2b06-85f9-44f7-a233-2ced593f2992_2272x294.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Uploading shellcode to BOF.NET&#8217;s VFS, storing the payload in-memory.</figcaption></figure></div><p>With your payload available in beacon&#8217;s memory, you can host the file on any interface that your target can access. In this example, I&#8217;m using the <a href="https://github.com/Orange-Cyberdefense/GOAD/blob/main/ad/SCCM/README.md">GOAD SCCM</a> lab on <a href="https://ludus.cloud">Ludus</a>, where the IP of my foothold beacon (with hostname &#8220;client&#8221;) is <code>10.3.10.43</code>. This makes the VFS accessible via HTTP through <code>client</code>, <code>client.sccm.lab</code>, etc.</p><pre><code>beacon&gt; bofnet_job WebServer http://[internal-ip]:[port]/</code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JFV0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JFV0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 424w, https://substackcdn.com/image/fetch/$s_!JFV0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 848w, https://substackcdn.com/image/fetch/$s_!JFV0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 1272w, https://substackcdn.com/image/fetch/$s_!JFV0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JFV0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png" width="1456" height="191" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:191,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:68034,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JFV0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 424w, https://substackcdn.com/image/fetch/$s_!JFV0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 848w, https://substackcdn.com/image/fetch/$s_!JFV0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 1272w, https://substackcdn.com/image/fetch/$s_!JFV0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e9a8304-b2f4-4aab-baae-d57f9449f33e_2266x297.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Launching the built-in WebServer BOF in BOF.NET.</figcaption></figure></div><blockquote><p>The WebServer BOF allows you to serve content on any port permitted by your privileges. In this example, a high-integrity beacon is used to serve on port 80, which is allowed through the firewall. Whatever port you use <strong>must be accessible</strong> through the local firewall. I recommend using TrustedSec&#8217;s <a href="https://github.com/trustedsec/CS-Situational-Awareness-BOF/tree/master/SA/list_firewall_rules">list_firewall_rules</a> BOF to help with this.</p></blockquote><h2>Pivot Listeners</h2><p>In situations where the target is unreachable from your beacon, or has no open ports, it&#8217;s worth using the reverse TCP beacon rather than the traditional &#8220;bind&#8221; peer-to-peer variants. In other words, if the target can reach you but you can&#8217;t reach the target, pivot listeners are probably your best bet. Note that you must have the privileges to create a listener on whichever port you decide to listen on.</p><p>Currently, you can only start a pivot listener through the GUI, where you specify the listen IP. This should ideally match your BOFNET WebServer IP and listen port:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v39z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v39z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 424w, https://substackcdn.com/image/fetch/$s_!v39z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 848w, https://substackcdn.com/image/fetch/$s_!v39z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 1272w, https://substackcdn.com/image/fetch/$s_!v39z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v39z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png" width="1456" height="687" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:687,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207749,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v39z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 424w, https://substackcdn.com/image/fetch/$s_!v39z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 848w, https://substackcdn.com/image/fetch/$s_!v39z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 1272w, https://substackcdn.com/image/fetch/$s_!v39z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff955ffac-fb92-43c0-adfc-b03636b427ee_1678x792.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Configuring a pivot listener in Cobalt Strike (GUI).</figcaption></figure></div><p>Next, generate the pivot listener shellcode and upload it to the VFS. Host it using the WebServer BOF, ensuring the target can access both the server and the shellcode. You can view any hits to your server using the following command:</p><pre><code>bofnet_jobstatus [job-id]</code></pre><p>By configuring an arbitrary payload stager to point to the internal BOF.NET WebServer address, execution should allow it to fetch the stage from the neighbouring host. In turn, this should allow a beacon to establish a connection back to the pivot listener.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6yEt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6yEt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 424w, https://substackcdn.com/image/fetch/$s_!6yEt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 848w, https://substackcdn.com/image/fetch/$s_!6yEt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 1272w, https://substackcdn.com/image/fetch/$s_!6yEt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6yEt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png" width="1456" height="342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162387,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6yEt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 424w, https://substackcdn.com/image/fetch/$s_!6yEt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 848w, https://substackcdn.com/image/fetch/$s_!6yEt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 1272w, https://substackcdn.com/image/fetch/$s_!6yEt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d749e5-40e4-49c5-8ec3-0ab12cc68f37_2156x506.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Executing a basic QueueUserAPC (remote) shellcode loader on MSSQL, pointing the staging address to the BOFNET WebServer (running on CLIENT).</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xaXV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xaXV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 424w, https://substackcdn.com/image/fetch/$s_!xaXV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 848w, https://substackcdn.com/image/fetch/$s_!xaXV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 1272w, https://substackcdn.com/image/fetch/$s_!xaXV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xaXV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png" width="1456" height="344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:344,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95322,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xaXV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 424w, https://substackcdn.com/image/fetch/$s_!xaXV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 848w, https://substackcdn.com/image/fetch/$s_!xaXV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 1272w, https://substackcdn.com/image/fetch/$s_!xaXV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdab10978-ebd6-4348-be3f-e2ccf6324d7f_2026x478.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Pivot view (pivot listener beacon on MSSQL caught by listener on CLIENT).</figcaption></figure></div><blockquote><p>Kudos to <a href="https://x.com/_RastaMouse">Rasta Mouse</a> for proofreading.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[VST Audio Plug-ins for Initial Access and Persistence]]></title><description><![CDATA[Abusing Virtual Studio Technology (VST) for red team initial access and persistence.]]></description><link>https://www.infosecnoodle.com/p/vst-plug-ins-for-initial-access</link><guid isPermaLink="false">https://www.infosecnoodle.com/p/vst-plug-ins-for-initial-access</guid><pubDate>Sat, 17 Feb 2024 14:56:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/77733a4d-4f72-43c2-ad63-d608ee4f740e_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Background</h2><p>VST (Virtual Studio Technology) is a software interface standard developed by Steinberg Media in 1996. They allow music producers to use digital audio plug-ins like instruments (synthesisers, drum machines, etc.) and effects (guitar pedals, etc.) within their DAW software like Ableton Live, Cubase or FL Studio. They have an important role in modern music production environments, with both paid and free/open-source VSTs available from popular sites like <a href="https://www.kvraudio.com">KVR Audio</a>. </p><p>I know that VST plug-in piracy is common within the producer community (even in professional and enterprise studio environments). With this in mind, I decided to do some reading on the security of the VST standard, to see how difficult it would be to tamper with and backdoor a plugin.</p><h2>Command Execution</h2><p>On Windows systems, a VST plug-in is a multi-threaded DLL which is packed into a folder structure (for macOS, it&#8217;s a Mach-O bundle) which means that creating a simple plugin that executes some commands should be straightforward. Steinberg has a &#8220;Hello World&#8221; VST3 example plugin and build instructions on their GitHub, which provides a simple template for us to work from (<a href="https://github.com/steinbergmedia/vst3_example_plugin_hello_world">here</a>).</p><pre><code>git clone https://github.com/steinbergmedia/vst3_example_plugin_hello_world.git
mkdir build
cd build
cmake ../vst3_example_plugin_hello_world
cmake --build .</code></pre><p>Adding command execution is as simple as prepending a system call before instantiating the plugin in "HelloWorldController".</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lIzq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lIzq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 424w, https://substackcdn.com/image/fetch/$s_!lIzq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 848w, https://substackcdn.com/image/fetch/$s_!lIzq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 1272w, https://substackcdn.com/image/fetch/$s_!lIzq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lIzq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png" width="795" height="189" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2ccba9b-8220-40fe-b592-828a704c3494_795x189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:189,&quot;width&quot;:795,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39509,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!lIzq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 424w, https://substackcdn.com/image/fetch/$s_!lIzq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 848w, https://substackcdn.com/image/fetch/$s_!lIzq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 1272w, https://substackcdn.com/image/fetch/$s_!lIzq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ccba9b-8220-40fe-b592-828a704c3494_795x189.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Modifying the default &#8220;helloworldcontroller.cpp&#8221; file to execute &#8220;calc.exe&#8221;.</figcaption></figure></div><p>Recompile the plugin and relocate it to the default VST3 directory for the DAW. In my case, with Ableton Live on Windows, the default path is:</p><pre><code>C:\Program Files\Common Files\VST3\</code></pre><p>When the plugin is launched in Ableton Live, the command runs without interruption of the DAW's operation, and we see our result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mBfq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mBfq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 424w, https://substackcdn.com/image/fetch/$s_!mBfq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 848w, https://substackcdn.com/image/fetch/$s_!mBfq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 1272w, https://substackcdn.com/image/fetch/$s_!mBfq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mBfq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png" width="1193" height="733" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:733,&quot;width&quot;:1193,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:262601,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mBfq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 424w, https://substackcdn.com/image/fetch/$s_!mBfq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 848w, https://substackcdn.com/image/fetch/$s_!mBfq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 1272w, https://substackcdn.com/image/fetch/$s_!mBfq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05cf3e14-9bcf-488e-8ef6-81179fa248b2_1193x733.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Execution of &#8220;calc.exe&#8221; when the plugin is opened in the DAW.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!31xi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!31xi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 424w, https://substackcdn.com/image/fetch/$s_!31xi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 848w, https://substackcdn.com/image/fetch/$s_!31xi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 1272w, https://substackcdn.com/image/fetch/$s_!31xi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!31xi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png" width="870" height="130" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:130,&quot;width&quot;:870,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21394,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!31xi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 424w, https://substackcdn.com/image/fetch/$s_!31xi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 848w, https://substackcdn.com/image/fetch/$s_!31xi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 1272w, https://substackcdn.com/image/fetch/$s_!31xi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c272c93-7f6e-4432-8a4a-0b0686050566_870x130.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Execution takes place under a child process of Ableton, &#8220;Ableton Index&#8221;.</figcaption></figure></div><h2>Persistence</h2><p>Executing arbitrary code is simple, but a technique for persistence is what makes it especially interesting. Instead of relying on the target to launch the VST within their DAW, we can ensure execution as soon as the DAW opens.</p><p>When Ableton detects changes to plugins in the default VST3 directory, it triggers initialisation by calling functions from "DLLMain" in the VST. Therefore, any new plug-in located within the default directory will execute each time Ableton is launched.</p><p>Using Ableton as an example, consider the following: a simple shellcode runner to execute beacon shellcode within the remote process "AbletonPushCpl.exe". This is Ableton's USB Audio Class Driver Control Panel process which exists as a child of &#8220;explorer.exe&#8221; and is present on Windows computers with Ableton Installed - ensuring our beacon lives on after Ableton is quit by the target. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FjeE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FjeE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 424w, https://substackcdn.com/image/fetch/$s_!FjeE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 848w, https://substackcdn.com/image/fetch/$s_!FjeE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 1272w, https://substackcdn.com/image/fetch/$s_!FjeE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FjeE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png" width="1046" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:1046,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127730,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!FjeE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 424w, https://substackcdn.com/image/fetch/$s_!FjeE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 848w, https://substackcdn.com/image/fetch/$s_!FjeE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 1272w, https://substackcdn.com/image/fetch/$s_!FjeE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf441d10-0046-40fd-9263-b82e8dd2512a_1046x429.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Simple remote shellcode runner to execute a beacon in &#8220;AbletonPushCpl.exe&#8221;.</figcaption></figure></div><p>Note that execution will occur again only if the user re-opens the VST inside Ableton, as initialisation only occurs when Ableton detects a new or modified VST in the default directory. In theory, the code could automate this to become a self-propagating VST.</p><div id="vimeo-913954620" class="vimeo-wrap" data-attrs="{&quot;videoId&quot;:&quot;913954620&quot;,&quot;videoKey&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true}" data-component-name="VimeoToDOM"><div class="vimeo-inner"><iframe src="https://player.vimeo.com/video/913954620?autoplay=0" frameborder="0" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" loading="lazy"></iframe></div></div><h2>Conclusion</h2><p>Detection rates for malicious VST plugins remain low, as most vendors appear to ignore the VST format entirely. Given that most independent music producers, who are probably prime targets for this, wouldn&#8217;t typically have EDR systems installed, there's a high chance that targeted attacks would succeed.</p><p>Of course, downloading and running VSTs on personal or domain-joined computers (like those in production studios or universities) from unknown sources is a bad idea. Treat them like any other executable file.</p><p>I think whilst Ableton and other DAW manufacturers aren't solely responsible for preventing malicious VSTs, adding an option to allow only VSTs with valid code signatures would be a great starting point to reduce the impact of this vector.</p><p><strong>Update: </strong>For macOS, there&#8217;s some interesting articles by SpecterOps and Csaba Fitzl which explore the weaponisation of Apple Audio Units (AU) - Apple&#8217;s competing audio plugin format to VST - for unsigned code execution and persistence, which are absolutely worth a read:</p><ul><li><p><a href="https://medium.com/specter-ops-posts/audio-unit-plug-ins-896d3434a882">Audio Unit Plug-ins: Legitimate Un-signed Code Execution</a></p></li><li><p><a href="https://theevilbit.github.io/beyond/beyond_0013/">Beyond the good ol' LaunchAgents - 13 - Audio Plugins</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Certified Red Team Lead (CRTL) Review]]></title><description><![CDATA[Review of the Red Team Ops II course and CRTL exam from Zero-Point Security.]]></description><link>https://www.infosecnoodle.com/p/certified-red-team-lead-crtl-review</link><guid isPermaLink="false">https://www.infosecnoodle.com/p/certified-red-team-lead-crtl-review</guid><pubDate>Fri, 19 May 2023 17:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f9194d41-e157-44eb-b544-58fb0b3e043e_1920x1205.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>Disclaimer</strong>: Please consider this article a point-in-time review. Zero-Point Security will always be updating this course and I will not be updating or amending this post in parallel. For the latest information about the course and exam, please see the official Zero-Point Security <a href="https://www.zeropointsecurity.co.uk/">website</a>.</p></blockquote><p>After a great experience completing the Red Team Ops (RTO) course and Certified Red Team Operator (CRTO) certification last year, I jumped at the opportunity when <a href="https://twitter.com/_RastaMouse/status/1560185559808884737">Rasta Mouse</a> recently announced the release of its &#8220;big brother&#8221; course, Red Team Ops II (RTO2) and the accompanying Certified Red Team Lead (CRTL) certification.</p><p>I enrolled in the course in November and studied the material over 3 months in preparation for the 72-hour practical exam. This week, I passed the exam, and I thought it would be valuable to share a summary of my experience and thoughts.</p><div class="pullquote"><p>TL;DR - The exam was difficult but rewarding. Having lifetime access to the course material (with updates) makes this course a no-brainer for any red teamer.</p></div><h2>Material and Content</h2><p>The course is considered a direct follow-up to RTO, focusing on evading modern security defences using various strategies. Whilst RTO teaches how to execute common AD attacks with Cobalt Strike, RTO2 teaches you how to perform successful attacks in hardened network environments, going up against modern EDR solutions and blue teams. This course does not cover AD attacks, C2 principals or general Cobalt Strike ops, as this knowledge is assumed. Does this mean CRTO is a prerequisite for CRTL? Not necessarily, but ZPS suggests that all students are comfortable with every module covered in CRTO at the very least. </p><p>There are currently seven modules: C2 Infrastructure, Windows APIs, Process Injection, Defence Evasion, Attack Surface Reduction (ASR), Windows Defender Application Control (WDAC) and EDR Evasion. In my opinion, the best modules are Defence Evasion and EDR Evasion, which is where this course shines. I did find that some modules would lack in-depth explanations, resembling more of a "do this" approach rather than delving into the "why it works&#8221;. Considering the course has a very strong and clear emphasis on self-driven research (very much unlike RTO, which is far more spoon-fed), I think this is reasonable, especially given the price.</p><p>In my eyes, there are very few places where you can find this level of information while simultaneously practising with Cobalt Strike from your browser. Plus, like all Zero-Point courses, you receive lifetime access to the material even after updates have been made.</p><h2>Lab Environment</h2><p>The lab setup consists of a small Windows Active Directory domain featuring workstations, various servers, and a domain controller. It also provides multiple C2 redirector servers alongside &#8220;attacker-linux&#8221; and &#8220;attacker-windows&#8221; virtual machines. There are plenty of machines available for completing all the exercises and practising evasion techniques whilst you progress through the material.</p><p>Another way the course differs from RTO is how the content doesn't really follow alongside the lab environment. The lab is primarily for practising specific exercises or teachings from the material rather than following a narrative. While it still includes tasks like "do this on machine X to reach machine Y", it offers more freedom for tinkering rather than solely focusing on completing tasks.</p><p>Most of your time will be spent on the attacker-windows host, where you'll have access to Visual Studio, various tools, and your Cobalt Strike client. This attacker machine is equipped with everything you need since tools cannot be copied in or out of the lab environment (just like RTO, using Guacamole). </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Ye5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Ye5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 424w, https://substackcdn.com/image/fetch/$s_!2Ye5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 848w, https://substackcdn.com/image/fetch/$s_!2Ye5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 1272w, https://substackcdn.com/image/fetch/$s_!2Ye5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Ye5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png" width="1428" height="595" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/480437ab-7e15-401d-821f-584058fc7595_1428x595.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:595,&quot;width&quot;:1428,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105344,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2Ye5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 424w, https://substackcdn.com/image/fetch/$s_!2Ye5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 848w, https://substackcdn.com/image/fetch/$s_!2Ye5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 1272w, https://substackcdn.com/image/fetch/$s_!2Ye5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F480437ab-7e15-401d-821f-584058fc7595_1428x595.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Using Cobalt Strike and Visual Studio in the &#8220;attacker-windows&#8221; VM.</figcaption></figure></div><h2>Exam</h2><p>The course fee includes an exam attempt that you can schedule ad-hoc, which is great. The exam requires students collect <strong>all flags</strong> (unlike CRTO, which is 6/8) within the allotted 72 hours to pass. The exam environment is made "available" for 5 days and it's up to the student to start/stop the exam environment within that time. I think that 72 hours is very reasonable considering what the exam entails. </p><p>That being said, it's fair to say that the exam is very difficult. I found it far more difficult than I was expecting - primarily because it had some &#8220;surprises&#8221; in there that I didn&#8217;t see coming. The main difference between the CRTO exam and the CRTL exam is that everything to pass CRTO was in the material. With CRTL, this was not the case and requires some real-world experience to get through it. I think relying solely on the content from RTO2 simply isn&#8217;t enough to achieve a passing score - it requires some extra effort.</p><p>The exam does, however, do a great job of solidifying what was taught in the course and applying those skills under pressure. It took me ~30 hours of run-time before I had the final flag. Again, it&#8217;s a very difficult exam experience and I expect it'll stay this way as the course matures and updates over time.</p><p>One of the great things about Zero-Point Security exams is that you pretty much know when you've passed because it&#8217;s entirely flag-based. If you get all the flags, you pass. You do have to wait for the SnapLabs "event" to finish for the badge to arrive via email. I received mine about 30 minutes before the event officially ended.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-rgU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-rgU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 424w, https://substackcdn.com/image/fetch/$s_!-rgU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 848w, https://substackcdn.com/image/fetch/$s_!-rgU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 1272w, https://substackcdn.com/image/fetch/$s_!-rgU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-rgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png" width="1239" height="633" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:1239,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51100,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-rgU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 424w, https://substackcdn.com/image/fetch/$s_!-rgU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 848w, https://substackcdn.com/image/fetch/$s_!-rgU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 1272w, https://substackcdn.com/image/fetch/$s_!-rgU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50ed2051-37f5-4483-995b-7bd92d27ed5a_1239x633.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8220;Red Team Lead&#8221; badge delivery email.</figcaption></figure></div><h2>Conclusion</h2><p>To any current or future students, I strongly advise completing all exercises within the lab environment and making notes from the course material. I also found it beneficial to revisit some of the content in RTO, which had been updated since I took the CRTO exam. I&#8217;d also suggest taking full advantage of the lab setup, especially to practice setting up your Artifact Kit, SleepMask Kit, C2 profile, and redirectors multiple times.</p><p>It&#8217;s also worth checking out the following YouTube playlists created by Raphael Mudge, the original creator of Cobalt Strike. I found these helped solidify some of the teachings in various modules, even though they&#8217;re quite old at this point. Fair warning, he does talk very slowly in these videos - watching at 2x speed worked fine for me!</p><ul><li><p><a href="https://www.youtube.com/playlist?list=PL9HO6M_MU2nfQ4kHSCzAQMqxQxH47d1no">Red Team Operations with Cobalt Strike (2019)</a></p></li><li><p><a href="https://www.youtube.com/watch?v=mZyMs2PP38w">Using Direct Syscalls in Cobalt Strike's Artifact Kit</a></p></li><li><p><a href="https://www.youtube.com/playlist?list=PL9HO6M_MU2nc5Q31qd2CwpZ8J4KFMhgnK">In-memory Evasion (2018)</a></p></li></ul><p>My personal experience with RTO2 and the CRTL exam has been fantastic. I think the only drawback of the course is the lack of support at times (as ZPS is a one-man operation, after all) and sometimes the content feels quite dry in the way it&#8217;s presented (in comparison to OffSec, for example). That said, the course has really boosted my confidence in operating in security-aware networks and I've already implemented several techniques to some of my internal tools. A solid 8/10!</p>]]></content:encoded></item></channel></rss>