So here's the thing.
You're testing a target. You're clicking around, checking endpoints, running your recon tools… and then you see something like this in the URL:
https://sub.example.com/static/images/anything.png
And your brain goes: *meh. Static image. Nothing here. Move on.*
I get it. I used to think the same way.
But what if I told you that URL could be your entry point?
What Even Is LFI?
LFI stands for Local File Inclusion. In simple terms — it's when a web server is dumb enough to let you read files from its own system through a vulnerable parameter or path.
Think of it like this: the server is supposed to serve you one specific file. But because of bad input validation, you can trick it into serving you any file on its system — including sensitive ones like /etc/passwd.
The Static URL Trick
Here's what most beginners (including old me) miss:
That /static/images/ path? Sometimes the server isn't just serving that file statically. Sometimes it's including it dynamically behind the scenes — and if there's no sanitization, you can escape the intended directory using path traversal.
The classic payload looks like this:
https://sub.example.com/static/images/../../../../../../../etc/passwd
Those `../` sequences are telling the server: go up a directory. And again. And again. Until you're at the root of the filesystem — and then you ask for `/etc/passwd`.
If the server is vulnerable, instead of an image… you get a list of system users. That's LFI.
This Isn't Just Theory
This exact technique was used to find a real LFI bug in Google— discovered by Jafar Abo Nada. A static-looking URL. A few `../` later. A critical finding on one of the biggest targets in bug bounty.
Shoutout to Vivek PS for breaking it down in a way that actually made sense to beginners like me.
So What Do You Do Next Time?
Next time you're on a target and you spot a static image, JS file, or any file being loaded through a path — don't just scroll past it.
Open it in a new tab. Try adding `../../../../../../../etc/passwd` after the base path. Try different depths. Watch how the server responds.
- Does it throw an error? What kind? - Does it return something unexpected? - Does it just hang?
All of that is information.
Quick Checklist
- Spot a static file URL ✅ - Try path traversal with `../` sequences ✅ - Test different traversal depths ✅ - Check for `/etc/passwd`, `/etc/hosts`, `/proc/self/environ` ✅ - Document everything and report responsibly ✅
Final Thought
Bug bounty taught me one thing more than anything else: never assume something is boring just because it looks boring.
The most interesting findings often hide behind the most unassuming URLs.
Stay curious. Stay ethical. Happy hunting. 🎯
Credit:
Jafar Abo Nada (original Google LFI discovery) | Vivek PS (simplification)
Written by [b-vain] — still learning, always sharing.