
Selamlar yine ben
Çeşitli konuların açıldığını görüyorum ve işin arka kısmının anlatılmadığını görüyorum, bu da beni rahatsız etti ve yine klavyeye sarıldım.
Konumuz başlıkta da yazdığı gibi SQL Injection Login Bypass ?
Teori kısmını anlatmayacağım, sql injection ile tonlarca konu yazılmıştır, öğrenmek isteyen okuyabilir.
Dork verip 10 tane login bypass payloadı da vermeyeceğim, kendiniz payloadlarınızı yazacaksınız
Gereksinimler: Databaselerin çalışma mantığı ve basit seviyede sql ve php bilirseniz daha iyi anlarsınız ben en kolay seviyede anlatacağım iyi okumalar.
Geçen sefer bir arkadaşımızın ilettiği bir takım fazla illegal işlerin döndüğü bir site atmıştı (fazla illegal dedim herkes nelerin döndüğünü anlar
Soran olursa sitenin db sıfırlandı sunucudaki yedekleri sildik indexi bıraktık, 1 hafta sonra kapatıldı domain.
O arkadaşa da buradan selam çakalım.

Ben sitenin frontunu http track ile çekmiştim ,backendi de kendim yazdım sıra geldi anlatmaya;
CSS kayması olmuş kusura bakmayın, site bu şekilde idi bir kaç şeyi ben salladım. Genel görünüm bu şekilde idi forum yazmaya kalkmışlar akıllarınca.
Görüldüğü gibi bir panel var karşımız da şimdi buranın admin paneli olması şart değil, admin.php şekilde dork arayan arkadaşların aramasının sebebi eğer admin.php den login bypass ile girerler ise direk admin paneline ulaşırlar lakin düz kullanıcıların login olduğu kısımlardan da çok güzel şeyler çıkabiliyor benden öneridir.
Kullanıcı adım "admin" şifrem "admin" olarak giriş yapmaya çalıştım.
Sonuç başarısız oldu ama neden gelin arkada dönen sorguya bakalım.
SQL:
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
SQL:
$sql = "SELECT * FROM users WHERE username = 'admin' AND password = 'admin'";
peki biz bunu nasıl istismar ediyoruz ?
biz herhangi bir payload girdiğimizde ne oluyor?
Payload: ' or 1=1 --
Bu payloadımı yazdım bakalım arka tarafta ne oldu ?
Giriş yap butonuna bastığımda Success yazsını aldım daha sonra;
Admin panele eriştiğimi öğrendim payloadı yazdıktan sonra sql sorgumuz bu şekile döndü,
SQL:
$sql = "SELECT * FROM users WHERE username = '' or 1=1 --' AND password = '' or 1=1 --'";
Yukarıdaki sorguda şu şekilde işlem oluyor normal şartlar da bizim yazdığımız username ve password iki tırnağın arasına yazılır biz burada bir tane daha tırnak atarak sorgudaki ' lardan çıkmış oluyoruz. daha sonra database'in toplama çıkarma gibi işlemler yaptığını bildiğimiz için ( üslü ifadeler ile işlemler yapmaz. ) ona bir koşul yazıyorum tıpkı lise de gördüğümüz mantık konusu gibi,

biz burada or kullandık yani veya, istesek and de kullanabilirdik yani ve ,
database burada 1=1 eşitmi diye bakıyor yani doğru bir ifade sondaki -- çift tre de kalan satırı yorum satırına alıyor ve çalışmıyor.
Bizde bu şekilde doğru bir sql sorgusu yazıp kalan sorguyu yorum satırına alıp kalan sorguyu ofsayt çizgisinin gerisinde bırakıyoruz gol geçerli.
yorum satırına almamızın bir nedeni de biz normalde iki tırnak içine yazdığımız da bu şekilde oluyor.
' ' or 1=1 -- ' yani yazdığımız payload 2 tırnağın arasına yazıldığı için sonra bir tırnak oluyor, o tırnak bize sql syntax hatasını veren tırnaktır bu yüzden sql tespiti için ' atarız.
Syntax hatası almayıp giriş yapıyoruz.
Buraya kadar okuduysan yoruma gözlüklü emoji

Sorusu olanlar için dm kutum açıktır, müsait oldukça dönerim.
BACKEND ' DE KULLANDIĞIM KOD:
PHP:
<?php
session_start();
$dbhost = "pasa.php";
$dbuser = "ne_bakıyon_kardes";
$dbpass = "la_git";
$dbname = "db_yok";
$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if ($conn->connect_error) {
die("Bağlantı Hatası: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$password = $_POST["password"];
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$_SESSION["username"] = $username;
echo "<script>
alert('Success');
window.location.href = 'success.php';
</script>";
exit;
} else {
echo "<script>
alert('Try Login');
window.location.href = 'admin.php';
</script>";
exit;
}
}
$conn->close();
?>