<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SSRF on an's security blog</title><link>https://panman4040.github.io/training/portswigger/ssrf/</link><description>Recent content in SSRF on an's security blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 22 Jul 2026 14:18:56 +0700</lastBuildDate><atom:link href="https://panman4040.github.io/training/portswigger/ssrf/index.xml" rel="self" type="application/rss+xml"/><item><title>Blind SSRF with Shellshock exploitation | &lt;span style="color:#9b59b6">Expert&lt;/span></title><link>https://panman4040.github.io/training/portswigger/ssrf/ssrf_expert2/</link><pubDate>Wed, 22 Jul 2026 13:59:16 +0800</pubDate><guid>https://panman4040.github.io/training/portswigger/ssrf/ssrf_expert2/</guid><description>&lt;p>The lab&amp;rsquo;s problem statement hints that the site fetches whatever inside the &lt;code>Referer&lt;/code> header as analytics whenever a product page is loaded. But will it accept arbitrary domains? Let&amp;rsquo;s try spoofing the &lt;code>Referer&lt;/code> header to one of our Burp Collaborator subdomains and see what&amp;rsquo;s up:
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-22_13-53-02-702.jpg" alt="">
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-22_13-53-09-157.jpg" alt="">
Interestingly, the server approves this request and makes two DNS callbacks as well as one HTTP callback to our Collaborator subdomain! Notice that in one of the HTTP callback, notice that &lt;code>User-Agent&lt;/code> is also included. This will be our entry point.&lt;/p></description></item><item><title>SSRF with filter bypass via open redirection vulnerability | &lt;span style="color:#3498db">Practitioner&lt;/span></title><link>https://panman4040.github.io/training/portswigger/ssrf/ssrf_practitioner2/</link><pubDate>Wed, 22 Jul 2026 09:26:16 +0800</pubDate><guid>https://panman4040.github.io/training/portswigger/ssrf/ssrf_practitioner2/</guid><description>&lt;p>This lab has a stock check feature which interestingly fetches data from an internal system, here is an example of an intercepted stock check request:
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-22_09-06-22-271.png" alt="">&lt;/p>
&lt;p>Let&amp;rsquo;s try inserting something arbitrary into the &lt;code>stockApi&lt;/code> param to see whether it still honors our request or not:
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-22_09-12-22-773.png" alt="">
Looks like the filter is a lot more rigorous this time, in fact if it doesn&amp;rsquo;t start with &lt;code>/product&lt;/code>, the server will block our request. Seems like they only allow the stock checker to access the &lt;strong>local application&lt;/strong> only, so maybe we can look elsewhere for an open redirection vulnerability.&lt;/p></description></item><item><title>SSRF with blacklist-based input filter | &lt;span style="color:#9b59b6">Expert&lt;/span></title><link>https://panman4040.github.io/training/portswigger/ssrf/ssrf_expert1/</link><pubDate>Tue, 21 Jul 2026 16:42:16 +0800</pubDate><guid>https://panman4040.github.io/training/portswigger/ssrf/ssrf_expert1/</guid><description>&lt;p>Similar to &lt;a href="https://panman4040.github.io/training/portswigger/ssrf/ssrf_practitioner1/">this problem&lt;/a>, there is an SSRF vulnerability in the stock check feature, and our desired endpoint is &lt;code>http://localhost/admin&lt;/code>.
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-21_15-58-05-840.png" alt="">&lt;/p>
&lt;p>Let&amp;rsquo;s try inserting some arbitrary stuff (yes literally) inside &lt;code>stockApi&lt;/code> param to see what&amp;rsquo;s up:
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-21_15-58-55-845.png" alt="">&lt;/p>
&lt;p>Interesting. Rather than a blacklist, this app utilise a whitelist that only accepts &lt;code>stock.weliketoshop.net&lt;/code>. Otherwise, the request is dropped. This seems impenetrable on paper, but not so in practice.&lt;/p>
&lt;p>I&amp;rsquo;ve tried all kinds of bypass I could think of, like:&lt;/p></description></item><item><title>SSRF with blacklist-based input filter | &lt;span style="color:#3498db">Practitioner&lt;/span></title><link>https://panman4040.github.io/training/portswigger/ssrf/ssrf_practitioner1/</link><pubDate>Tue, 21 Jul 2026 14:51:16 +0800</pubDate><guid>https://panman4040.github.io/training/portswigger/ssrf/ssrf_practitioner1/</guid><description>&lt;p>This lab has a stock check feature which fetches data from an internal system, below is how the intercepted request looks like:
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-21_15-11-00-694.png" alt="">&lt;/p>
&lt;p>The lab hints that there is an admin interface at &lt;code>http://localhost/admin&lt;/code>, and that there are two anti-SSRF defenses in place which we must bypass. And indeed there is a filter in use, straight up requesting for &lt;code>localhost/admin&lt;/code> will result in the request being blocked. This is also the case for only &lt;code>http://localhost&lt;/code>:
&lt;img src="https://panman4040.github.io/images/viber_image_2026-07-21_14-53-27-599.png" alt="">&lt;/p></description></item></channel></rss>