โ† Back to list

๐Ÿšช How I Bypassed a 403 Forbidden WAF Protection (and What I Learned)

๐Ÿ•ต๏ธโ€โ™‚๏ธ The Beginning: Seeing a 403 on Feroxbuster

samael0x4 ยท 2025-09-11 19:41 ยท 4 claps ยท 2.5 min read
#waf-bypass #403-forbidden #403-bypass #403-error #bug-bounty-writeup
Open on Medium โ†—

๐Ÿšช How I Bypassed a 403 Forbidden WAF Protection (and What I Learned)

๐Ÿ•ต๏ธโ€โ™‚๏ธ The Beginning: Seeing a 403 on Feroxbuster

Every good story in hacking starts with a simple clue.

For me, it began with a feroxbuster scan. I was enumerating directories when I noticed multiple endpoints returning 403 Forbidden. To many people, that might look like a dead end. But for me, 403 is a signal. It means:

  • Thereโ€™s something valuable behind it.
  • Someone doesnโ€™t want you to see it.

And thatโ€™s exactly where I get curious.

๐Ÿ’ก The Thought Process: Can It Be Bypassed?

When I see a 403, I donโ€™t stop. I ask myself:

  • Is this just a WAF (Web Application Firewall) filter?
  • Can I trick it with encoding, path traversal, or header tampering?
  • What if I look at the raw request, strip it down, and replay it differently?

This mindset is crucial. A 403 is often just a badly configured rule โ€” and bad configs can be bypassed.

๐Ÿ›  The Tools I Used

  • feroxbuster โ†’ for directory discovery
  • 4zero3 / bypass-403 / NoMore403 โ†’ automated 403 bypass payload testing
  • curl โ†’ raw request testing (with --http1.1 and --path-as-is)
  • Burp Suite โ†’ for manual inspection, replay, and automation (Turbo Intruder)

๐Ÿ” The Breakthrough: curl Wins

I found that /wp-content/xmlrpc.php returned 403 normally. But when I sent the request with obfuscation, something changed.

Normal Request (Blocked)

curl -k -o /dev/null -s -w "Status: %{http_code} | Size: %{size_download}\n" \
'https://target.com/wp-content/xmlrpc.php'

Bypass Request (Allowed)

curl -k -o /dev/null -s -w "Status: %{http_code} | Size: %{size_download}\n" \
'https://target.com/wp-content/xmlrpc.php/../../../'

Suddenly, 403 โ†’ 200. The WAF was tricked.

Other encodings also worked:

.../xmlrpc.php/%2e%2e/
.../xmlrpc.php/..;/

This confirmed that the WAFโ€™s path normalization rules were flawed.

๐ŸŽฏ Why This Matters

Bypassing WAF restrictions isnโ€™t just a fun trick. It means:

  • Brute Force Amplification โ†’ Using system.multicall in XML-RPC for mass login attempts.
  • DDoS โ†’ Leveraging pingback.ping as an amplifier.
  • SSRF โ†’ Using XML-RPC to make internal requests.
  • Sensitive File Access โ†’ Extending the same bypass to /wp-config.php or /.htaccess.

In other words, a bypass like this removes the shield the WAF was supposed to provide.

๐Ÿ“œ Reporting It

Even though the company isnโ€™t running a bug bounty program, I documented my findings properly and Reported.

Because professionalism matters โ€” whether or not thereโ€™s a payout.

๐Ÿš€ Lessons Learned

  1. 403 isnโ€™t the end โ€” itโ€™s often the beginning.
  2. Think like a bypasser โ€” encoding, traversal, headers, methods.
  3. Keep requests minimal โ€” sometimes a single header change is all it takes.
  4. Document your findings like a pro โ€” even if the company has no bounty, you build credibility.

This journey wasnโ€™t about a reward โ€” it was about the thrill of turning a 403 into a 200 and learning something powerful along the way.

๐Ÿ”š Final Thoughts

If youโ€™re a beginner in bug bounty or pentesting, remember this:

  • When you see a 403 Forbidden, donโ€™t give up.
  • That โ€œforbiddenโ€ door is often unlocked if you just try the right key.

Sometimes, the difference between โ€œblockedโ€ and โ€œbypassedโ€ is just %2e%2e. ๐Ÿ˜‰


๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
post_id
b2bb859eddaf
slug
how-i-bypassed-a-403-forbidden-waf-protection-and-what-i-learned-b2bb859eddaf
url
https://medium.com/@samael0x4/how-i-bypassed-a-403-forbidden-waf-protection-and-what-i-learned-b2bb859eddaf
canonical_url
https://medium.com/@samael0x4/how-i-bypassed-a-403-forbidden-waf-protection-and-what-i-learned-b2bb859eddaf
author_url
https://medium.com/@samael0x4
status
ok
fetched_at
2026-09-09 08:15:46