<?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 Gaurav Jain on Medium]]></title>
        <description><![CDATA[Stories by Gaurav Jain on Medium]]></description>
        <link>https://medium.com/@gj20052007?source=rss-5185c4d369a1------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*NRLbhMr3AD2fvAJg</url>
            <title>Stories by Gaurav Jain on Medium</title>
            <link>https://medium.com/@gj20052007?source=rss-5185c4d369a1------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 04:05:08 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@gj20052007/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[From a Profile Picture Upload to RCE: Hunting an ASP.NET/IIS Vulnerability]]></title>
            <link>https://medium.com/@gj20052007/from-a-profile-picture-upload-to-rce-hunting-an-asp-net-iis-vulnerability-7fc2c4cd0132?source=rss-5185c4d369a1------2</link>
            <guid isPermaLink="false">https://medium.com/p/7fc2c4cd0132</guid>
            <category><![CDATA[ethical-hacking]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[penetration-testing]]></category>
            <category><![CDATA[bug-bounty]]></category>
            <category><![CDATA[web-security]]></category>
            <dc:creator><![CDATA[Gaurav Jain]]></dc:creator>
            <pubDate>Wed, 04 Nov 2026 21:07:16 GMT</pubDate>
            <atom:updated>2026-11-04T21:07:16.081Z</atom:updated>
            <content:encoded><![CDATA[<p><em>A real-world security testing journey involving reconnaissance, application logic, file-upload analysis, Stored XSS, and server-side code execution.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_LxeUXXQEW-6LcXP46_r0g.png" /></figure><p>Hello readers,</p><h3>&gt; whoami?</h3><blockquote>I’m<strong> Gaurav Jain</strong>, a Cybersecurity Researcher and Ethical Hacker specializing in Web Application Security, Penetration Testing (WAPT), and Bug Bounty Hunting. I focus on identifying and responsibly disclosing security vulnerabilities through hands-on research, real-world testing, and continuous learning.</blockquote><blockquote>Passionate about offensive security, I believe in understanding systems deeply, thinking beyond conventional approaches, and making the digital world more secure.</blockquote><h3>Introduction</h3><p>Some vulnerabilities are discovered within minutes. Others require days of observation, experimentation, reading documentation, understanding application behavior, and questioning assumptions.</p><p>This assessment belonged to the second category.</p><p>The objective was to understand a self-hosted web platform, identify weaknesses in its application logic, and investigate whether seemingly ordinary functionality could expose a deeper security issue.</p><p>What initially appeared to be a simple profile-picture upload feature eventually led to two significant findings:</p><ul><li>Stored Cross-Site Scripting (XSS).</li><li>Remote Code Execution (RCE) through an uploaded ASP.NET HTTP Handler.</li></ul><p>The interesting part was not simply discovering the vulnerabilities. It was understanding how the application processed uploaded files, how its technology stack influenced execution, and why an assumption that worked on one technology would not necessarily work on another.</p><p>This is the story of that investigation.</p><h3>1. Getting Access Was the First Challenge</h3><p>The first challenge was not vulnerability discovery. It was reaching the application reliably.</p><p>The platform was hosted in another country, and accessing it through ordinary free VPN services was inconsistent. Rather than allowing connectivity issues to interrupt the assessment, I configured a residential proxy solution and established a stable connection.</p><p>Once access was available, I avoided immediately testing random payloads.</p><p>The first objective was to understand the application’s attack surface.</p><p>I started with reconnaissance, covering:</p><ul><li>Subdomain enumeration.</li><li>DNS reconnaissance.</li><li>Network and infrastructure analysis.</li><li>Technology fingerprinting.</li><li>JavaScript file analysis.</li><li>Public asset discovery.</li><li>GitHub and public repository reconnaissance.</li><li>Application endpoint discovery.</li></ul><p>The purpose of reconnaissance is not merely to collect a large number of URLs.</p><p>It is to understand what exists, how different components communicate, which technologies are involved, and where security testing is most likely to produce meaningful results.</p><p>After mapping the available functionality, three areas caught my attention:</p><ol><li>Profile-picture upload functionality.</li><li>The underlying Microsoft IIS and ASP.NET technology stack.</li><li>Password recovery and account information update functionality.</li></ol><p>These became the initial investigation paths.</p><h3>2. Understanding the Application Before Exploiting It</h3><p>I started with the account-management functionality.</p><p>The application used ASP.NET session-related identifiers, and I observed behavior involving session changes and account information.</p><p>However, an important lesson in security testing is that an unusual response does not automatically represent a vulnerability.</p><p>Session identifiers can legitimately rotate during authentication and account-management operations. A security issue must be established through unauthorized access or another demonstrable impact, not simply through a changing identifier.</p><p>After investigating this functionality, I did not have sufficiently conclusive evidence to make it the primary finding.</p><p>I moved to the next attack surface: file uploads.</p><p>This decision eventually became the turning point of the assessment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ir2CN8_kOdyZq69US-Iu9A.png" /></figure><h3>3. The Technology Stack Changed the Entire Approach</h3><p>During reconnaissance and application inspection, I identified the underlying environment as:</p><ul><li>Microsoft IIS 10.0.</li><li>ASP.NET on the .NET Framework 4.x stack.</li></ul><p>This information was important because file-upload vulnerabilities are heavily influenced by the server-side technology and its configuration.</p><p>A PHP payload, for example, will not automatically execute on an ASP.NET application.</p><p>Likewise, an uploaded file does not become executable merely because its content resembles source code. The server must have an execution mechanism that recognizes and processes it.</p><p>I spent time studying IIS and ASP.NET behavior, examining relevant security advisories, researching historical vulnerabilities, and reviewing technical articles.</p><p>I investigated several possible approaches, but the initial attempts did not produce code execution.</p><p>This was a useful reminder:</p><p><strong>Technology fingerprinting should guide testing, not become an excuse to blindly try every publicly available exploit associated with a product version.</strong></p><p>The application’s actual configuration and implementation matter more than the version banner alone.</p><h3>4. Investigating the Profile-Picture Upload</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a-JU6o4k0hl845xH4M_ncw.png" /></figure><p>The profile-picture functionality initially looked ordinary.</p><p>Users could upload JPEG or PNG images, with a client-side file-size limit and MIME-type validation.</p><p>I examined the front-end implementation and mapped the workflow.</p><p>The observed process looked like this:</p><p><strong>Step 1: File selection</strong></p><p>The user selected a JPEG or PNG image.</p><p><strong>Step 2: JavaScript validation</strong></p><p>The browser performed checks involving file size and MIME type.</p><p><strong>Step 3: FileReader</strong></p><p>JavaScript used the FileReader API to generate a Data URL for the image preview.</p><p><strong>Step 4: Profile confirmation</strong></p><p>The user confirmed the profile information.</p><p><strong>Step 5: HTTP request</strong></p><p>The application submitted a multipart/form-data POST request to the profile-registration endpoint, containing the uploaded file in the Picture parameter.</p><p><strong>Step 6: Server-side processing</strong></p><p>The ASP.NET application received the file.</p><p>At this point, an important question remained unanswered:</p><p>What exactly happened to the uploaded file after it reached the server?</p><p>Was it decoded and re-encoded as an image?</p><p>Was the original content preserved?</p><p>Was the extension validated?</p><p>Where was the resulting file stored?</p><p>Could the uploaded object be retrieved directly?</p><p>These questions were more interesting than simply asking whether the upload form accepted an unexpected MIME type.</p><h3>A lesson for beginners</h3><p>Client-side validation is not a security boundary.</p><p>JavaScript validation improves user experience, but an attacker can independently construct an HTTP request. Therefore, security decisions must be enforced on the server.</p><p>An upload implementation must validate the actual file and its intended use, rather than trusting browser-side checks or request headers.</p><h3>5. Intercepting and Understanding the Upload Request</h3><p>I created an account and completed the profile-registration workflow.</p><p>Then I captured the upload request using Burp Suite.</p><p>Instead of immediately modifying everything, I first studied the original request and response.</p><p>The request contained a multipart/form-data body with a file parameter named Picture, along with a filename, content type, and binary image data.</p><p>I examined:</p><ul><li>The upload endpoint.</li><li>The multipart structure.</li><li>The filename parameter.</li><li>The Content-Type header.</li><li>The server response.</li><li>The resulting uploaded-file location.</li></ul><p>I also revisited the front-end implementation to understand how the form generated its request.</p><p>This helped establish a useful distinction:</p><p>The browser’s image preview and the server’s actual file-processing behavior are two separate things.</p><p>A file being displayed correctly in a browser preview says very little about how safely the server stores and serves that file.</p><h3>6. The First Breakthrough: Stored XSS</h3><p>I began investigating whether the application was trusting the supplied file metadata and content too much.</p><p>During controlled testing, I modified the upload request and submitted a harmless HTML document instead of the original image content.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4Tk4TQKFJjTFDDb97joQ_A.png" /></figure><p>The application accepted the modified content.</p><p>More importantly, after the upload, opening the resulting resource caused the supplied HTML to be interpreted by the browser.</p><p>That was the first significant breakthrough.</p><p>I continued testing with a controlled JavaScript proof of concept and confirmed Stored Cross-Site Scripting.</p><p>The uploaded content was not merely being treated as an image.</p><p>It was being served in a way that allowed active browser content to execute.</p><p>This revealed a weakness in the application’s file-upload and file-serving design.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iOIJbsMwcNpGSHujBtC-UA.png" /></figure><h3>Why this matters</h3><p>Stored XSS occurs when untrusted content is persisted and later rendered in a browser in an executable context.</p><p>Unlike reflected XSS, where an attacker generally needs a victim to visit a specially crafted request, stored XSS can remain available until the affected content is removed or access to it is prevented.</p><p>Depending on the application’s origin, browser context, authentication design, and security controls, this can have significant consequences.</p><p>However, I did not stop at the XSS finding.</p><p>The more important question was still unanswered:</p><p><strong>Was the server only rendering uploaded content in the browser, or could the server itself execute an uploaded file?</strong></p><p>That question led to another phase of investigation.</p><h3>7. Understanding Why PHP Payloads Were Not Working</h3><p>My next attempts involved investigating whether the uploaded file could be interpreted as server-side executable content.</p><p>Some early approaches involved PHP-based files.</p><p>They did not work.</p><p>The uploaded resources returned HTTP 404 responses when accessed through the expected URLs.</p><p>This was a useful technical lesson.</p><p>A PHP file is not automatically executable on an IIS/ASP.NET application. Server-side execution depends on the configured handlers, runtime, mappings, and application environment.</p><p>Changing the filename extension does not install an interpreter or make an incompatible runtime execute the content.</p><p>At this point, I returned to the application’s technology stack.</p><p>Rather than continuing to experiment with payloads designed for unrelated environments, I focused on understanding ASP.NET’s request-processing model.</p><h3>8. The Missing Piece: ASP.NET HTTP Handlers</h3><p>While researching ASP.NET, I came across the role of HTTP Handlers.</p><p>ASP.NET supports handlers that process incoming HTTP requests for particular resource types.</p><p>One familiar example is the .ashx extension.</p><p>An ASP.NET HTTP Handler can implement the IHttpHandler interface and process an incoming request through its ProcessRequest method.</p><p>This is fundamentally different from simply serving an uploaded HTML or image file.</p><p>An image is normally returned as content.</p><p>An ASP.NET handler can be processed by the server-side runtime.</p><p>That distinction was central to understanding what might happen if an application allowed untrusted handler files to be uploaded into a location where IIS and ASP.NET could execute them.</p><p>The key investigation question became:</p><p>Was the uploaded file merely accessible, or was the upload directory also configured as an executable application location?</p><p>I had already established that the application stored uploaded profile pictures in a publicly accessible directory.</p><p>The remaining question concerned server-side interpretation.</p><h3>9. The Second Breakthrough: Server-Side Code Execution</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gQmVlSH0Z_OqU3ZGmGAP3g.png" /></figure><p>After the previous investigation, I conducted a controlled test using an ASP.NET HTTP Handler proof of concept.</p><p>The result was unexpected.</p><p>The uploaded resource was accessible through its resulting URL, and instead of returning the file as an ordinary image, the server processed it as an ASP.NET handler.</p><p>The handler returned its expected response.</p><p>This was the point where the investigation changed significantly.</p><p>It indicated that the uploaded file had crossed an important security boundary:</p><p>It was no longer just untrusted content being stored by an application. It was being processed by the server-side execution environment.</p><p>I then used a minimal, non-destructive command-execution proof of concept to verify whether the handler could invoke an operating-system process.</p><p>The server returned the identity of the process executing the handler.</p><p>That provided strong evidence of server-side operating-system command execution.</p><p><strong>The upload functionality had become an RCE attack surface.</strong></p><p>The interesting part was that the application had presented this functionality as a simple profile-picture upload.</p><p>The vulnerability was not dependent on discovering an exotic IIS zero-day. The evidence pointed toward an application-level upload security weakness combined with an execution-capable server configuration.</p><p>The distinction is important.</p><p>A vulnerable application can expose serious security problems even when its underlying software is not affected by a published CVE.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*llueUP1QoLkMRbPWQf18LQ.png" /></figure><h3>10. Breaking Down the Vulnerability Chain</h3><p>The investigation revealed two related but technically distinct security issues.</p><h3>Finding 1: Stored Cross-Site Scripting</h3><p>The application accepted untrusted content through its profile-picture upload feature and served that content in a browser-interpretable context.</p><p>The result was persistent HTML and JavaScript execution in the affected browser context.</p><h3>Finding 2: Remote Code Execution</h3><p>The application allowed an uploaded ASP.NET handler to become accessible in a location where the server-side runtime processed it.</p><p>The handler’s ability to execute an operating-system process demonstrated command execution under the application’s server-side security context.</p><p>The underlying security concerns included:</p><ul><li>Insufficient restrictions on uploaded file types.</li><li>Inadequate validation of actual file content.</li><li>Unsafe treatment of uploaded files.</li><li>Exposure of uploaded content through a publicly accessible application directory.</li><li>Execution-capable server configuration for untrusted upload locations.</li></ul><p>Importantly, accepting an unexpected file extension alone is not enough to establish RCE. Server-side execution must be independently demonstrated.</p><p>That distinction separates an interesting upload anomaly from a confirmed high-impact vulnerability.</p><h3>11. What Beginners Should Learn From This Assessment</h3><p>There are several important lessons worth carrying into future security assessments.</p><p><strong>1. Reconnaissance is more than enumeration.</strong></p><p>Collecting subdomains and endpoints is only the beginning. Understanding application functionality and identifying relationships between components can uncover attack surfaces that automated scanning misses.</p><p><strong>2. Understand the technology stack before choosing an approach.</strong></p><p>PHP, ASP.NET, Java, and Node.js have different execution models.</p><p>A payload designed for one environment will not automatically work in another.</p><p><strong>3. Learn HTTP requests, not just tools.</strong></p><p>Burp Suite is powerful, but its real value comes from understanding what is being sent and how the server responds.</p><p>Pay attention to multipart boundaries, filenames, content types, HTTP methods, response headers, and resource locations.</p><p><strong>4. Client-side validation is not server-side security.</strong></p><p>A browser can reject a file while the server might still accept a manually constructed request.</p><p>The server must independently enforce validation.</p><p><strong>5. MIME type and file extension are not proof of file safety.</strong></p><p>A filename, an HTTP Content-Type header, and the actual file contents are different things.</p><p>Security-sensitive applications must not trust these values independently.</p><p><strong>6. File storage and file execution are different security boundaries.</strong></p><p>An application may need to store user uploads, but those uploads should not be interpreted as executable application resources.</p><p><strong>7. A failed attempt is still useful evidence.</strong></p><p>The unsuccessful PHP tests helped establish that I needed to understand the server’s actual execution environment instead of blindly reusing payloads.</p><p><strong>8. Do not confuse an observation with a vulnerability.</strong></p><p>A changing session identifier, an unusual HTTP response, or an accepted file extension is not automatically a security finding.</p><p>Demonstrable impact and a defensible explanation of the underlying behavior matter.</p><h3>12. How Should This Be Fixed?</h3><p>The appropriate remediation is not simply to block one file extension.</p><p>The upload architecture needs to enforce a clear separation between user-controlled files and executable application resources.</p><p>Recommended controls include:</p><p><strong>Strict server-side validation</strong></p><ul><li>Maintain an allowlist of necessary image formats.</li><li>Validate actual file signatures and decode the image using a trusted image-processing library.</li><li>Re-encode accepted images into a safe output format.</li><li>Enforce file-size and dimension limits.</li></ul><p><strong>Safe storage</strong></p><ul><li>Store user uploads outside the application web root wherever possible.</li><li>Use generated filenames rather than trusting user-supplied filenames.</li><li>Prevent directory traversal and unsafe path construction.</li><li>Serve uploads through a controlled static-content mechanism.</li></ul><p><strong>Disable execution</strong></p><ul><li>Ensure upload directories cannot execute ASP.NET handlers or other server-side scripts.</li><li>Review IIS handler mappings and execution permissions.</li><li>Separate uploaded content from application code and executable directories.</li></ul><p><strong>Least privilege</strong></p><ul><li>Run application pools under appropriately restricted identities.</li><li>Limit filesystem permissions.</li><li>Avoid unnecessary access to sensitive system resources.</li></ul><p><strong>Browser-side protection</strong></p><ul><li>Serve user uploads from a separate origin where practical.</li><li>Use suitable Content-Type and Content-Disposition headers.</li><li>Apply appropriate Content Security Policy controls.</li><li>Ensure untrusted content is never inserted into an HTML context without proper encoding.</li></ul><p>These controls should be implemented together. Blocking .ashx alone would not address the underlying architectural problem.</p><h3>13. Responsible Disclosure and Final Thoughts</h3><p>Discovering code execution is an important security finding, but demonstrating impact does not require taking control of a system or accessing sensitive information.</p><p>Once execution has been sufficiently established, further exploitation should stop.</p><p>The evidence should be preserved, sensitive information redacted, and the vulnerability reported through the authorized disclosure channel.</p><p>A strong report should explain the affected functionality, the reproducible conditions, the security boundary that was crossed, the demonstrated impact, and the recommended remediation.</p><p>This investigation reinforced something I consider fundamental to security research:</p><p><strong>The best findings often come from understanding how an application works, not from knowing the largest collection of payloads.</strong></p><p>What began as a profile-picture upload feature turned into an investigation of browser content interpretation, HTTP request processing, IIS configuration, ASP.NET handlers, and server-side execution.</p><p>There were multiple dead ends, several incorrect assumptions, and plenty of reading along the way.</p><p>But the biggest lesson was simple:</p><p>Do not look at a feature only in terms of what it was designed to do. Understand what the server actually allows it to do.</p><p>Sometimes, the most ordinary functionality hides the most interesting security boundary.</p><h3>PLEASE HIT THE CLAP BUTTON AGAIN AND AGAIN<br>IT BOOOOSTS MY CONFIDENCE PLEASE….😁</h3><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7fc2c4cd0132" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I Almost Took Over an Account…]]></title>
            <link>https://medium.com/@gj20052007/how-i-almost-took-over-an-account-022b33dcc572?source=rss-5185c4d369a1------2</link>
            <guid isPermaLink="false">https://medium.com/p/022b33dcc572</guid>
            <dc:creator><![CDATA[Gaurav Jain]]></dc:creator>
            <pubDate>Wed, 24 Sep 2025 06:48:45 GMT</pubDate>
            <atom:updated>2025-09-24T06:48:45.601Z</atom:updated>
            <content:encoded><![CDATA[<h3>&gt;&gt; Whoami</h3><p>Hey, I’m gaurav0xh4ck3r aka Gaurav Jain — a passionate bug hunter who loves exploring web apps, finding bugs, and helping fix them. I’m always learning new tricks and sharing with the hacking community. Making the internet safer, one bug at a time!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*U19FCJHSreL6q7Qb.gif" /></figure><p>Bug bounty hunting is like treasure hunting. Sometimes you find gold, sometimes you find… that someone else already found the gold before you. This is the story of how I discovered a Critical Account Takeover vulnerability on <strong>[Redacted]</strong>, put in hours of work, celebrated early… and then got hit with the dreaded “Duplicate” tag.</p><p>But hey, duplicates mean you’re on the right path. Let’s go through my journey.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5zC1csaUDdETcDy6" /></figure><h3>&gt;&gt; The Hunt Begins</h3><p>Like every other late-night hacker, I had my Burp Suite open, energy drink in one hand, and Wireshark tabs everywhere. I decided to poke around <strong>[Redacted]’s</strong> password reset functionality.</p><p>Nothing too fancy at first — just the classic “Forgot Password” → Intercept the traffic → Check the response.</p><p>And then 💥 … jackpot.</p><p>Right there, shining in JSON format, was a recoveryToken — the exact token used to reset user passwords.</p><h3>&gt;&gt; The Vulnerability</h3><p>Here’s why this is a big deal:</p><p>Normally, password reset tokens are only sent to your email.</p><p>But the server was returning the token directly in the API response.</p><p>Anyone who intercepted that response (evil Wi-Fi, browser extension, proxy, you name it) could grab the token and reset the password without ever touching the email.</p><p>Translation? →<strong> Full Account Takeover.</strong><br> Severity →<strong> CVSS 9.5 Critical.</strong></p><p>Proof of Concept (high level, safe version)</p><ol><li>Send a “forgot password” request.</li><li>Intercept the API response.</li><li>Copy the recoveryToken.</li><li>Use it to hit the reset endpoint and set a new password.</li></ol><p>Boom 💣 — you’re inside the account.<br> Simple. Dangerous. Beautiful.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*ehyXSc3xmwNVL_q5.gif" /></figure><h3>&gt;&gt; 🎭 The Plot Twist: The Duplicate</h3><p>I submitted the report to the bug bounty platform. I could already imagine the bounty — pizza money for the year.</p><p>Then came the reply:</p><p>“Hi gaurav0xh4ck3r, thanks for your report… Unfortunately, this was submitted previously by another researcher.”</p><p>Bruh 😭.<br> The exact same bug had already been found months earlier.</p><h3><strong>&gt;&gt; Lessons Learned</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*_2mtm4YfIcU7ifkM.gif" /></figure><p>Even though it was a duplicate, here’s why I still count it as a win:</p><ul><li><strong>Validated skills</strong>: I found a Critical bug on a big target.</li><li><strong>Proof I’m hunting in the right places</strong>.</li><li><strong>Experience matters</strong>: The more you report, the higher the chances you’ll be first next time.</li></ul><p>Bug bounty is like cricket — sometimes you hit a six, sometimes the fielder catches it before the boundary. But you keep swinging.</p><h3>&gt;&gt; Final Thoughts</h3><p>The vulnerability was fixed (thanks to the original reporter).<br> I confirmed that my methods are solid.<br> And duplicates are just stepping stones — the next one might be mine.</p><p>So here’s to more late nights, more Burp intercepts, and hopefully fewer duplicates.<br> Until then… stay caffeinated and keep hacking. ☕💻</p><p>Thank you so much for reading… Clap if you like it <br>Connect with me : <a href="https://www.linkedin.com/in/gaurav-jain-9s24c1008p/">linkedin</a></p><p>Happy Hacking!!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=022b33dcc572" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I Broke a Website’s Email System by Injecting a Link — Here’s What Happened]]></title>
            <link>https://medium.com/@gj20052007/i-broke-a-websites-email-system-by-injecting-a-link-here-s-what-happened-da8c2ef8a843?source=rss-5185c4d369a1------2</link>
            <guid isPermaLink="false">https://medium.com/p/da8c2ef8a843</guid>
            <dc:creator><![CDATA[Gaurav Jain]]></dc:creator>
            <pubDate>Sun, 10 Aug 2025 10:38:22 GMT</pubDate>
            <atom:updated>2025-08-11T05:14:49.421Z</atom:updated>
            <content:encoded><![CDATA[<h3>I Broke a Website’s Email System by Injecting a Link — Here’s What Happened</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*44v2kmB-a5f9eCRipUDvWg.jpeg" /><figcaption>Hellllllloooooooo Hackerzzzz…………🙋🏻‍</figcaption></figure><h3>&gt;&gt; Whoami</h3><p>Hey, I’m Gaurav Jain — a passionate bug hunter who loves exploring web apps, finding bugs, and helping fix them. I’m always learning new tricks and sharing with the hacking community. Making the internet safer, one bug at a time!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*r8lGKY6XGYeyQkJ8.gif" /></figure><p>Welcome hackers to my new article - new finding</p><h3>Chapter 1: The Start — Just Browsing or Bug Hunting?</h3><p>One fine day, I was casually exploring Target.com (its private program) — a platform where you can submit support requests if you get stuck or have questions.</p><p><em>“Hmm,”</em> I thought, <em>“What if I try to mess with their support form? Maybe I can find some bugs!”</em><br> (Because bug hunting is basically trying to politely break things.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*EFyyFlBkb0S1LD3G.gif" /><figcaption>Browsing the functionalities of program……</figcaption></figure><h3>Chapter 2: The Sneaky Idea — Injecting an Evil Link</h3><p>I found the form where you submit your query. It asked for my username, email, and message — pretty standard stuff.</p><p>Then I got mischievous — <em>“What if I put a link to a shady website inside my username?”</em></p><p>So I typed:</p><p>&lt;a href=evil.com&gt;Click me&lt;/a&gt;</p><p>Classic hacker vibes. 😂</p><p>Then I got curious and tried another variation — with quotes this time:</p><p>&lt;a href=”<a href="https://evil.com/">https://evil.com</a>&quot;&gt;Click me&lt;/a&gt;</p><p>Because hey, why not test both ways?</p><h3>Chapter 3: The Magic (Or Disaster) Happens — The Email!</h3><p>After submitting my “support request,” I waited for the confirmation email. When it arrived…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/374/0*y-D9bHwAw4vLqIAP.gif" /><figcaption>waiting………….</figcaption></figure><p>Boom! My username showed up as a clickable link in the email!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*uUzWKljO0Nq3zJTz.gif" /></figure><p>For the first payload (no quotes), the link clicked me straight to http://evil.com <strong>without any warning</strong>.<br> For the second one (with quotes), the email client did show a redirect warning — good job email security!</p><p>But still, both links worked and were clickable. That’s a big problem.</p><h3>Chapter 4: The Weird Part — No Redirect Warning?!</h3><p>Usually, clicking weird links in emails triggers a warning:<br> <em>“Hey! Are you sure you want to go to this site?”</em></p><p>For my quoted link (&lt;a href=&quot;https://evil.com&quot;&gt;Click me&lt;/a&gt;), I got this warning. Good!</p><p>But for my unquoted sneaky link (&lt;a href=evil.com&gt;Click me&lt;/a&gt;), <strong>no warning popped up</strong> — it redirected me straight away. Yikes!</p><h3>Chapter 5: What’s Really Going On? (The Geeky Explanation)</h3><p>Beginners, pay attention:</p><ul><li>When a site puts your input directly into an HTML email without cleaning it, that’s called <strong>HTML Injection</strong>.</li><li>It can also be a kind of <strong>Stored Cross-Site Scripting (XSS)</strong> — but in emails, not browsers.</li><li>Attackers can sneak malicious links into emails users trust.</li><li>If users click these links without warnings, they risk phishing, malware, and worse.</li></ul><h3>Chapter 6: How I Reported It Nicely</h3><p>Instead of yelling “You’re hacked!”, I wrote a polite and clear report:</p><ul><li>Explained how I injected the link</li><li>Showed what happened in the email</li><li>Highlighted the risk of no redirect warnings on some links</li><li>Suggested sanitizing inputs and validating URLs</li></ul><p>Being nice helps — they actually took me seriously!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/0*MSiQvlomf66lJslA.gif" /><figcaption>Lessons for beginners like me…</figcaption></figure><h3>Chapter 7: Lessons for Beginner Bug Hunters</h3><ul><li><strong>Find places where your input is used later</strong> — forms, emails, profiles.</li><li><strong>Try injecting HTML or scripts</strong> and see if it’s filtered or rendered.</li><li><strong>Test different payload styles:</strong> quotes, no quotes, uppercase tags.</li><li><strong>Remember:</strong> email clients handle links differently; test carefully.</li><li><strong>Write reports that are clear, respectful, and helpful.</strong></li><li><strong>Most importantly: Have fun and be responsible!</strong></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/0*XNV0Mcy5icIeKRZr.gif" /></figure><h3>Chapter 8: Final Thoughts — Wanna Be a Bug Bounty Hunter?</h3><p>Bug hunting is detective work with a keyboard — fun, frustrating, and rewarding.</p><p>Start small. Experiment. Learn. Every bug you find helps make the web safer.</p><p>And if you ever get an email with a suspicious <strong>“Click me”</strong> link… maybe don’t click it unless you’re ready for an adventure. 😄</p><p>………………………………………………………………………………………………</p><p>simple rule of bug bounty is:</p><h3><strong>Hack, find, report, repeat — that’s the bug hunter’s grind.</strong>👍🏻</h3><p><strong>Thanks for reading my bug bounty story! Please clap and follow for more…</strong></p><p><strong>Got questions or your own hacking tales? Hit me up! in comment section or on </strong><a href="https://www.linkedin.com/in/gaurav-jain-9s24c1008p/"><strong>linkedin</strong></a></p><p>…………………………………….…Happy Hacking……………………………………</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=da8c2ef8a843" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Breaking Reset Flows and Popping XSS: How I Got My First Hall of Fame]]></title>
            <link>https://medium.com/@gj20052007/breaking-reset-flows-and-popping-xss-how-i-got-my-first-hall-of-fame-27dcea35c99a?source=rss-5185c4d369a1------2</link>
            <guid isPermaLink="false">https://medium.com/p/27dcea35c99a</guid>
            <dc:creator><![CDATA[Gaurav Jain]]></dc:creator>
            <pubDate>Thu, 17 Jul 2025 19:24:08 GMT</pubDate>
            <atom:updated>2025-07-17T19:47:23.046Z</atom:updated>
            <content:encoded><![CDATA[<p>Hello readers,</p><h3>&gt; whoami?</h3><p><strong>I ( Gaurav Jain ) , </strong>a cybersecurity researcher and ethical hacker specializing in web application penetration testing WAPT and bug bounty hunting. I actively identifies and reports critical security vulnerabilities to help companies improve their security posture. With hands-on experience in real-world exploitation and responsible disclosure, I am dedicated to making the internet a safer place while continuously learning and sharing knowledge within the hacking community.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/320/1*XEBDZj0_boSkYLpALMKoJw.gif" /></figure><h3>&gt; Introduction</h3><p>In this write-up, I’ll share how I found <strong>two simple but serious bugs</strong> while testing target.com:</p><ul><li>A <strong>missing rate limit</strong> in the <strong>password reset confirmation</strong> process</li><li>A <strong>reflected XSS</strong> vulnerability</li></ul><p>These were not advanced bugs. Anyone learning bug hunting can find things like this by just being careful and testing small details.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oS1JGV_z7cJILTMk" /></figure><h3>1️⃣ Rate Limiting in Password Reset — Account Takeover Risk</h3><p>When a system allows unlimited password reset attempts without restrictions, it can lead to:</p><ul><li><strong>Brute-force attacks on reset tokens</strong></li><li><strong>Account takeover</strong> if the tokens are short or predictable</li><li><strong>Email flooding abuse</strong></li></ul><h4>References:</h4><ul><li><strong>OWASP Brute Force Attack Prevention</strong><br> <a href="https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks">https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks</a></li><li><strong>CWE-307: Improper Restriction of Excessive Authentication Attempts</strong><br> <a href="https://cwe.mitre.org/data/definitions/307.html">https://cwe.mitre.org/data/definitions/307.html</a></li><li><strong>OWASP Forgot Password Cheat Sheet</strong> (Talks about rate limiting reset requests)<br> <a href="https://cheatsheetseries.owasp.org/cheatsheets/Forgot_Password_Cheat_Sheet.html">https://cheatsheetseries.owasp.org/cheatsheets/Forgot_Password_Cheat_Sheet.html</a></li></ul><h3>2️⃣ Reflected Cross-Site Scripting (XSS)</h3><p>While testing other parts of the website, I found a <strong>Reflected XSS</strong>.<br> I simply sent this input in a URL parameter:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/428/1*WUPseOt_zhd9unFF7ZTUWQ.png" /></figure><p>When I visited the page, the script ran directly in the browser. There was <strong>no input filtering</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*UZRoqOwpqX0iLvym" /></figure><p>Reflected XSS happens when user input is directly shown in the webpage response <strong>without proper sanitization</strong>.</p><p>This can lead to:</p><ul><li><strong>Session theft</strong></li><li><strong>Phishing attacks</strong></li><li><strong>Running malicious scripts in the user’s browser</strong></li></ul><h4>References:</h4><ul><li><strong>OWASP XSS Cheat Sheet</strong><br> <a href="https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html">https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html</a></li><li><strong>CWE-79: Improper Neutralization of Input During Web Page Generation (XSS)</strong><br> <a href="https://cwe.mitre.org/data/definitions/79.html">https://cwe.mitre.org/data/definitions/79.html</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*b81SZgSAMJQqK-OYym5oyg.gif" /></figure><h3>&gt; Impact</h3><p>Both bugs were important because they affected <strong>account security</strong> and <strong>user safety</strong>.</p><p>AND AFTER 7–8 DAYS LATER I GOT THEIR MAIL OF ADDING MY NAME IN HALL OF FAME !</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RQaLEqyIrkDbskBtoh5NnA.png" /><figcaption>😁</figcaption></figure><h3>&gt; What You and I Learned</h3><p>You don’t always need advanced skills to find good bugs.<br> Sometimes just <strong>testing the basics</strong> like:</p><ul><li><strong>Rate limiting</strong></li><li><strong>Input sanitization</strong></li></ul><p>can lead to valuable findings.</p><h3>&gt; Thanks for reading!</h3><p>If you liked this, you can connect with me on:</p><ul><li><a href="https://www.linkedin.com/in/gaurav-jain-9s24c1008p/">LinkedIn</a></li><li><a href="https://github.com/GauravJain1008">Github</a></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*jA4USQAQ-FpbqDKAWGMX1g.gif" /></figure><h4><strong><em>AND PLEASE HIT THE CLAP BUTTON AGAIN AND AGAIN<br>IT BOOOOSTS MY CONFIDENCE PLEASE….</em></strong>😁</h4><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=27dcea35c99a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I Tracked Lightning Strikes in Real Time with R?]]></title>
            <link>https://medium.com/@gj20052007/how-i-tracked-lightning-strikes-in-real-time-with-r-695199063830?source=rss-5185c4d369a1------2</link>
            <guid isPermaLink="false">https://medium.com/p/695199063830</guid>
            <dc:creator><![CDATA[Gaurav Jain]]></dc:creator>
            <pubDate>Fri, 11 Jul 2025 17:24:54 GMT</pubDate>
            <atom:updated>2025-07-11T17:24:54.277Z</atom:updated>
            <content:encoded><![CDATA[<p>Hello readers,</p><h3>&gt; whoami?</h3><p><strong>I ( Gaurav Jain ) , </strong>a cybersecurity researcher and ethical hacker specializing in web application penetration testing WAPT and bug bounty hunting. I actively identifies and reports critical security vulnerabilities to help companies improve their security posture. With hands-on experience in real-world exploitation and responsible disclosure, I am dedicated to making the internet a safer place while continuously learning and sharing knowledge within the hacking community.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*MZiAuZUb-23witFJmTFszA.gif" /></figure><h3>&gt; Why this task is …C0oo0LLL!!</h3><p>Ever wondered where lightning is striking the Earth right now? I did too. So, I made an R script that taps into a live stream of lightning data from <strong><em>Blitzortung.org </em></strong>using <em>WebSockets</em>. <strong>No paid APIs</strong>, no external services. Just me, my laptop, and a direct connection to the sky.</p><p>So called “ <em>I hacked the Sky with R </em>😂<em> And you can also do this</em>” just read this carefully ….. YES seriously</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/628/1*LKO8yrIWjz8BgahFLkahJw.png" /></figure><h3>&gt; What This Project Does</h3><p>This project listens to a WebSocket stream that sends real-time lightning strike data. It then:</p><ul><li>Decompresses the incoming encoded data</li><li>Parses and structures the data into a dataframe (template_df) — where we got our results.</li><li>Logs each strike in the R console</li><li>Lets me stop the collection at any time.</li></ul><p>when you visit to that above website that we use today <strong><em>blitzortung.org -&gt; inspect -&gt; Network-&gt; Socket -&gt; messages</em></strong></p><p>YOU SEE…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Qag_naJKXUphqLG2HBlLgg.png" /></figure><p>These are the messages data of real time lightening strikes in all over the world but these information are in encoded form and there is no API available to get this data. <br>But you are writing an article that gives you step by step process to do in free…………. let’s goooooooooooooooo</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/349/1*CEw8bLsfnRr88Unyu9LHjA.gif" /></figure><h3>&gt; How to Reproduce This Project ( follow these steps to hack by your own 😂)</h3><ol><li><strong>Download and install R and RStudio</strong> on your computer.</li><li><strong>Open RStudio</strong> and go to the Console area.</li><li><strong>Install these packages</strong> by typing:</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/350/1*WguBIReUjMYsy2qqsh7ntw.png" /></figure><p>4. <strong>Create a new script</strong> and paste the full lightning tracking code into it.</p><p><strong><em>this below is the code</em></strong></p><p>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —-</p><p>library(websocket)<br>library(ggplot2)<br>library(jsonlite)</p><p>template_df = data.frame(time = character(),<br> lat = character(),<br> lon = character(),<br> alt = character(),<br> pol = character(),<br> mds = character(),<br> status = character(),<br> region = character(),<br> delay = character(),<br> lonc = character(),<br> latc = character())</p><p>lzw_decompress &lt;- function(code_str) {<br> codes &lt;- utf8ToInt(code_str)<br> dict_size &lt;- 256<br> dictionary &lt;- as.list(sapply(0:(dict_size — 1), intToUtf8))<br> <br> result &lt;- character()<br> prev_code &lt;- codes[1]<br> result &lt;- c(result, dictionary[[prev_code + 1]])<br> <br> for (i in 2:length(codes)) {<br> code &lt;- codes[i]<br> if (code &lt; length(dictionary)) {<br> entry &lt;- dictionary[[code + 1]]<br> } else if (code == dict_size) {<br> entry &lt;- paste0(dictionary[[prev_code + 1]], substring(dictionary[[prev_code + 1]], 1, 1))<br> } else {<br> stop(paste(“Bad LZW code:”, code))<br> }<br> <br> result &lt;- c(result, entry)<br> <br> dictionary[[dict_size + 1]] &lt;- paste0(dictionary[[prev_code + 1]], substring(entry, 1, 1))<br> dict_size &lt;- dict_size + 1<br> <br> prev_code &lt;- code<br> }<br> <br> paste(result, collapse = “”)<br>}</p><p># Create websocket client<br>ws &lt;- WebSocket$new(“wss://ws7.blitzortung.org/”, autoConnect = FALSE)</p><p># On connection open: send subscription message<br>ws$onOpen(function(event) {<br> cat(“WebSocket connection opened. Sending subscription message…\n”)<br> ws$send(‘{“a”:111}’) # Send the same message your browser sends</p><p>})</p><p>strike_counter = 1<br># On message received<br>ws$onMessage(function(event) {<br> <br> # Decompress using LZW function<br> decompressed &lt;- tryCatch({<br> lzw_decompress(event$data)<br> }, error = function(e) {<br> paste(“Decompression error:”, e$message)<br> })<br> <br> print(paste0(“strike collected: “, strike_counter))<br> strike_counter = strike_counter + 1<br> assign(“strike_counter”,strike_counter,.GlobalEnv)<br> <br> x = fromJSON(decompressed)<br> x = x[names(x) != “sig”]<br> x = data.frame(x)<br> <br> # template_df = get(“template_df”, envir = .GlobalEnv)<br> template_df = rbind(template_df, x)<br> <br> assign(“template_df”,template_df,.GlobalEnv)<br> <br>})</p><p># On error<br>ws$onError(function(event) {<br> cat(“Error:”, event$message, “\n”)<br>})</p><p># On close<br>ws$onClose(function(event) {<br> cat(“WebSocket closed\n”)<br>})</p><p># Connect and start the event loop<br>ws$connect()</p><p># DON’T RUN THIS LINE UNTIL YOU WANT TO STOP COLLECTING<br>#ws$close()</p><p>timestamp_ns &lt;- as.numeric(template_df$time)<br>timestamp_sec &lt;- timestamp_ns / 1e9<br>template_df$time = as.POSIXct(timestamp_sec, origin = “1970–01–01”, tz = “UTC”)</p><p>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —</p><p><em>Copy And Paste in your RStudio scrpit.</em></p><p>5. Now hit the RUN button…..</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*3IvVZPKoonbdh69kH8pQow.gif" /></figure><p>6. You will start seeing messages in console like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/675/1*IHtvcpk6yms9mKbK-QOLZQ.png" /></figure><p>if yes then <strong>BOOOOOMMMMM!!!</strong> you successfully fetch the data of lightening strikes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/1*p0NyVsbSMyl6Qj3-g17Hcg.gif" /></figure><p>7. Let the code run for a few minutes so it collects data.</p><p>8. When you want to stop it, just type ( in console):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/178/1*YCoZ-CWYjUs7UXu7OyKVMA.png" /></figure><p>— — — — — — — — — — — — — —<strong>Now Your screen is like </strong>— — — — — — — — -— — —</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yqGK2xmzZEDwB0pnQRGXCw.png" /></figure><p>9. To <strong>see the data</strong>, type:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/243/1*2hqRgfH9dhXOo0eE5OZmfw.png" /></figure><p>and you see your data screen is like</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MAZH1E1J8LbGhq9Hz4R5NQ.png" /></figure><p>IF YES then………..</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*Gd-7xggTRqw7eNAElIh_Ag.gif" /></figure><h3>&gt; How This Task Works</h3><p>that is most important to understand</p><p>Okay, So let’s imagine you’re on a secret mission to eavesdrop on the sky. You connect to a hidden WebSocket used by weather nerds, send a tiny handshake that says “Hey, I’m listening,” and suddenly — BOOM — you’re getting a flood of encoded lightning strike data. My R script catches each message, decodes it with a fancy LZW function (a.k.a. lightning decoder ring), and saves it all neatly into a dataframe. Every strike gets logged like a live news ticker. And when I’ve had enough, I type ws$close() and walk away like a storm-chasing ninja.</p><h3>&gt; <strong>Lessons we have learned by this task -</strong></h3><ul><li>R can handle real-time <em>WebSocket </em>streams</li><li><em>Blitzortung </em>uses compressed LZW messages, but they can be decoded</li><li>Live weather data is addictive</li><li>Watching “strike collected” roll through the console is surprisingly satisfying</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*nAMQBm678Kskdhj3IN-lAg.gif" /></figure><p>Bro/Sis if you get stuck in any step or any issue while doing this hacking 😂just ping me on <a href="https://www.linkedin.com/in/gaurav-jain-64a24b306/">linkedin</a>. I will reply instantly.</p><p>And if no doubts let’s connect…..</p><p><em>https://www.linkedin.com/in/gaurav-jain-64a24b306/</em></p><h3>&gt; Final Thoughts-</h3><p>This was one of the most fun and unexpected uses of R I and you have tried today.</p><p>It combined networking, data handling, real-time streaming, and visualization in one lightweight script. If you love working with data, and want to feel like you’re monitoring the Earth’s atmosphere, give this a shot.</p><p>Please <strong><em>Follow </em></strong>for more articles….And <strong><em>Like </em></strong>the article If it helps you, even just a little.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/1*JL9TFouMI2xBo01bc9Xn0Q.gif" /></figure><p>— — — — — — — — — — — -THANK YOU FOR READING — — — — — — — — — — — —</p><p>Byeeee byee………</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=695199063830" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>