Giriş
Kimlik doğrulama atlatma, saldırganın kimlik doğrulaması gerektiren kaynaklara, kimlik doğrulaması yapmadan erişebilmesini sağlayan bir güvenlik açığıdır. Bu güvenlik açığı, saldırganın hedef uygulamanın korumaya çalıştığı uygulama bölümlerine veya verilere erişmesine olanak tanır. Bu tür bir açık, web uygulamalarında kritik bir sorun olabilir çünkü saldırganın erişebileceği alanlar, uygulamanın güvenlik seviyesine ciddi zararlar verebilir.Kimlik Doğrulama Atlatma Nedir?
Kimlik doğrulama atlatma, uygulamanın kimlik doğrulama kontrolünü atlayarak, saldırganın yetkilendirilmiş kullanıcıların erişebileceği kaynaklara erişmesine izin verir. Bu tür bir güvenlik açığı, uygulamanın kimlik doğrulama mekanizmasının yetersiz olması veya tamamen eksik olması durumunda ortaya çıkar.Kimlik Doğrulama Atlatma Yöntemleri
Kimlik doğrulama atlatma, iki ana yöntemle gerçekleştirilebilir: manuel erişim ve otomatik betik kullanımı.Manuel Erişim:
Manuel erişim yöntemi, uygulamanın site haritasını inceleyerek ve bu haritada bulunan sayfalara doğrudan erişim sağlayarak gerçekleştirilir. Bu yöntemle, menü akışını takip etmek yerine doğrudan sayfa URL'lerine gidilerek yetkilendirilmiş alanlara erişim sağlanır. Bu yöntem şu adımları içerir:- Tarayıcı kullanarak sayfalara erişim sağlama
- URL parametrelerini inceleme ve kullanma
- Anahtarlar ve ID'ler kullanarak erişim sağlama
Otomatik Betik Kullanımı:
Otomatik betik kullanımı, kimlik doğrulama atlatma işlemini daha kolay hale getirir. Bu yöntemle, betikler kullanılarak dizin ve dosya adları brute force yöntemiyle tahmin edilir ve geçerli dosya adları bulunmaya çalışılır. Bu yöntemin adımları şunlardır:- Betik yazarak ID'ler ve anahtarları brute force yöntemiyle deneme
- Sayfa adlarını brute force tahmin etme ve doğrudan erişim izni veren sayfaları bulma
Kimlik Doğrulama Atlatma Açığının Tespiti
Bir güvenlik uzmanı kimlik doğrulama atlatma açığını tespit ettiğinde, bu açığın neye erişim sağladığını belirlemesi gerekir. Bu erişim tüm siteye mi yoksa sadece bir bölümüne mi sağlanıyor? Bu sorunun cevabı, açığın ne kadar kritik olduğunu belirlemek için önemlidir.Kimlik doğrulama atlatma zafiyetine sahip basit bir Flask uygulaması oluşturacağız.
Python:
from flask import Flask, request, redirect, url_for, session, render_template
app = Flask(__name__)
app.secret_key = 'supersecretkey'
users = {
'admin': 'password123',
'user': 'userpass'
}
@app.route('/')
def home():
if 'username' in session:
return render_template('home.html', username=session['username'])
return render_template('home.html', username=None)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username in users and users[username] == password:
session['username'] = username
return redirect(url_for('home'))
return render_template('login.html', error=True)
return render_template('login.html', error=False)
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('home'))
@app.route('/admin')
def admin():
return render_template('admin.html')
if __name__ == '__main__':
app.run(debug=True)
HTML Şablonları
HTML:
#BASE.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{% block title %}Flask App{% endblock %}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="{{ url_for('home') }}">FlaskApp</a>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
{% if username %}
<li class="nav-item">
<a class="nav-link" href="#">{{ username }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ url_for('logout') }}">Logout</a>
</li>
{% else %}
<li class="nav-item">
<a class="nav-link" href="{{ url_for('login') }}">Login</a>
</li>
{% endif %}
</ul>
</div>
</nav>
<div class="container mt-4">
{% block content %}{% endblock %}
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
HTML:
#HOME.HTML
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
<div class="jumbotron">
<h1 class="display-4">Welcome{% if username %}, {{ username }}{% endif %}!</h1>
{% if username %}
<p class="lead">You are logged in. <a href="{{ url_for('logout') }}" class="btn btn-primary btn-lg">Logout</a></p>
{% else %}
<p class="lead">You are not logged in. <a href="{{ url_for('login') }}" class="btn btn-primary btn-lg">Login</a></p>
{% endif %}
</div>
{% endblock %}
HTML:
#LOGIN.HTML
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% block content %}
<h2>Login</h2>
{% if error %}
<div class="alert alert-danger" role="alert">
Invalid credentials. Please try again.
</div>
{% endif %}
<form method="post">
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<button type="submit" class="btn btn-primary">Login</button>
</form>
{% endblock %}
HTML:
#ADMIN.HTML
{% extends "base.html" %}
{% block title %}Admin{% endblock %}
{% block content %}
<h2>Admin Page</h2>
<p>Welcome to the admin page. <a href="{{ url_for('home') }}" class="btn btn-secondary">Home</a></p>
{% endblock %}
Uygulamayı Test Edin
Tarayıcınızda http://127.0.0.1:5000 adresine gidin ve modernize edilmiş uygulamanızı test edin. /admin sayfasına gitmek için doğrudan URL'yi http://127.0.0.1:5000/admin olarak yazın. Giriş yapmadan bu sayfaya erişebildiğinizi göreceksiniz.

Daha spesifik Authentication Bypass yöntemleri var. Talep olursa bu konuda ilerleriz. Ne zamandır bir şeyler paylaşmıyordum, çerezlik bişeyler olsun dedim. Good DAY!
Son düzenleme:

