Admin Panel Login Bypass! (Detaylı)

Bunjo

Uzman üye
14 Ara 2020
1,591
1,894
I Won
oqk18ir.png


c0sawob.png


lbn20fm.png
2q250vr.png


Merhabalar ben saldırı timlerinden Bunjo, bu konuda bir mysql sunucusu kurup içine gerekli veirleri yerleştirip bir login bypass yapacağız.

Veritabanının ne olduğunu anlatmayı tercih etmiyorum. Burada hali hazırda anlattığım bir konu var inceleyebilirsiniz.
Konu için tıklayınız


MySQL Sunucusu Kurulması

Eğer Kali Linux veya Parrot OS gibi gibi sistemler kullanıyorsanız "mysql" kurulu olarak gelecektir.
İşlemleri yaparken root kullanıcı içerisinde olmanızı öneririm.

MySQL sunucumuzu başlatalım.

Bash:
sudo service mysql start

qt72c4s.png


Şimdi ise sunucumuza giriş yapalım

Bash:
mysql -u root

92to077.png


databaseleri görüntüleyelim.

SQL:
SHOW DATABASES;

k79bgdz.png


default olarak kurulu gelen databaseler;


CoffeeScript:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

bizim bunlarla işimiz kendi databasemizi oluşturalım.

SQL:
CREATE DATABASE bunjo;


g2aypw3.png


Şimdi de kullanıcı verilerimizi bulunduracağımız tablomuzu oluşturalım.


SQL:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

ie8543g.png


kontrol edelim.

SQL:
SHOW COLUMNS FROM users;

7x5exwr.png


evet kolonlarımız ve tablolarımız başarılı bir şekilde oluşturuldu şimdi ise içerilerine admin kullanıcısını ekleyelim.

SQL:
INSERT INTO users (username,password) VALUES ("admin", "12345")

cyrwml9.png


şuan işlem tamamlandı kapatabilirsiniz terminali fakat değerleri görüntülemek istiyorum derseniz;

SQL:
SELECT * FROM users;

a67y1e4.png


Evet bu kısımlık her şey hazır şimdi ise herhangi bir websitesi kodlayalım.

Not:

SQL:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yeni_şifre';

komutu ile root kullanıcı şifrenizi değiştirebilirsiniz.


Login Panel Kısmı

Dosya ağacı:

mhtktwr.png


şimdi ise basit bir admin login paneli kodlayacağız.

admin.php


HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 8px;
        }

        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 16px;
            box-sizing: border-box;
        }

        input[type="submit"] {
            background-color: #3498db;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #2980b9;
        }
    </style>
</head>
<body>

    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <input type="submit" value="Login" name="login">
    </form>

</body>
</html>

Site:

qt7or3s.png


evet böyle tatlı gözüken bir site yazdık. Şimdi php ile database içerisinde sorgu yapan kodu yazalım.

aklı yerinde olan bir admin sql sorgusu için root kullanıcısı kullanmaz, bunun
farklı bir kullanıcı oluşturur ve yetkilerini ona göre ayarlar.
Mesela database oluşturma veya silme yetkisini eklemez :) ( umarım )

Ben örnek bir anlatım yaptığım için root kullanıcısı ile direkt oturumu sağlıyorum.

PHP:

PHP:
<?php
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $servername = "localhost";
                $dbname = "bunjo";
                $db_usr = "root";
                $db_pass = "";

                $conn = new mysqli($servername, $db_usr, $db_pass, $dbname);

                if ($conn->connect_error) {
                    die("Error:" . $conn->connect_error);
                }

                $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) {
                    echo "Logged in.";
                    exit();
                } else {
                    $error = "Invalid username or password.";
                }

                $conn->close();
            }
        ?>

Tüm Kod:
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 8px;
        }

        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 16px;
            box-sizing: border-box;
        }

        input[type="submit"] {
            background-color: #3498db;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #2980b9;
        }
    </style>
</head>
<body>

    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <input type="submit" value="Login" name="login">

        
        <?php
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $servername = "localhost";
                $dbname = "bunjo";
                $db_usr = "root";
                $db_pass = "";

                $conn = new mysqli($servername, $db_usr, $db_pass, $dbname);

                if ($conn->connect_error) {
                    die("Error:" . $conn->connect_error);
                }

                $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) {
                    echo "Logged in.";
                    exit();
                } else {
                    $error = "Invalid username or password.";
                    echo "<div style='color: red;'>$error</div>";
                }

                $conn->close();
            }
        ?>
    </form>
</body>
</html>

bu kodda form ile alınan username ve password değişkenleri oturum açılan sql sunucusunda sorgulanıyor, eşleşme bulunursa giriş yapıldı yazdırıyor.
Başka sitelerde admin panele yönlendirir sayfa ekle sil gibi birçok menü bulunur.

Şimdi kodumuzu test edelim.

bildiğimiz admin ve 12345 şifresi ile oturum açıyoruz.


igk5tfy.png


2d6m3xy.png


Evet oturum açma işlemi başarıyla çalışıyor.

Evet artık database yazmayı ve üstüne de php ile sorgu yapmayı öğrendiğimize göre şimdi bu güvenlik açığı barındıran kodda nasıl bir enjeksiyon işlemi yapılıyor bunu görelim.


Admin Panel İçin Bypass

Burada kafanıza "admin paneli nasıl bulacağız?" gibi bir soru takılırsa hemen onunda cevabını vereyim.

piyasada çeşitli admin panel finderler var bunları kullanabilirsiniz ayrı olarak dizin bulma araçlarını da kullanabilirsiniz mesela dirsearch

Bash:
apt install dirsearch

4dzuhvg.png


bu komutla indirdikten sonra hedef siteyi -u parametresi ile veriyoruz.

buyurun efendim size admin panel.


g74s77n.png


evet şimdi hiçbir şey bilmiyormuş gibi sayfaya giriş yapalım.

m7djoi8.png


giriş yapıp random bir şeyler denediniz ama çalışmadı elbette

şimdi siz bu random işlemleri yapınca arka da dönen php sorgusunu inceleyelim.

PHP:
$username = $_POST["username"];
$password = $_POST["password"];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";

bakın burada post input kutularından yani kullanıcı adı ve şifre girdiğiniz o kutucuklardan yazdığınız veri değişkene aktarılıyor örneğin

username: admin

password: roketatar

şeklinde yazarsanız arka da dönen php sorgusu şu olacaktır:

SQL:
SELECT * FROM users WHEREN username='admin' AND password='roketatar'

evet dönen sorgu bu.

Peki ya bu sorgu yapılırken saldırganın girebileceği AND OR ' gibi karakterler engellenmezse ne olur?

SQL:
SELECT * FROM users WHEREN username='admin' AND password='roketatar' OR 1=1-- -

bakın burada yazdığım şey şu:

roketatar' OR 1=1-- -

' ile roketatarın başında bulunan tırnağı kapattım.

daha sonra eğer şifre yanlışsa false dönecek fakat OR operatöründe en az bir adet doğru bulunduğunda bile tüm sorguyu true yapar.

1 değeri de 1 e eşit olduğundan dolayı buradan true dönecek yani kod şöyle olacak:

fasle OR true-- -

burada -- - ifadesi de yorum satırı haline getirilir yani yorum satırları detleyici ya da yorumlayıcı tarafından çalıştırılmaz

bunu eklemeseydik

'roketatar' OR 1=1' şeklinde sorgu olacaktı ve bir adet ' fazla olduğu için hata alacaktık ama biz -- - ekleyerek bu tırnağı yorum satırına alıyoruz ve sorun çözülüyor.

şimdi bakalım password kısmına:

username: admin

password: roketatar' OR 1=1-- -

yazalım ve deneyelim.


m7kpbzm.png


gastk8r.png


artık siz de bir adminsiniz hemde şifreyi bilmeden :D

Okuduğunuz için teşekkür ederim.

emeğe karşılık konuyu beğenip yorum atınız.

 
Son düzenleme:

Gazeteci Şerif

Katılımcı Üye
9 Eyl 2023
309
569
Trablusgarp Cephesi
oqk18ir.png


c0sawob.png


lbn20fm.png
2q250vr.png


Merhabalar ben saldırı timlerinden Bunjo, bu konuda bir mysql sunucusu kurup içine gerekli veirleri yerleştirip bir login bypass yapacağız.

Veritabanının ne olduğunu anlatmayı tercih etmiyorum. Burada hali hazırda anlattığım bir konu var inceleyebilirsiniz.
Konu için tıklayınız


MySQL Sunucusu Kurulması

Eğer Kali Linux veya Parrot OS gibi gibi sistemler kullanıyorsanız "mysql" kurulu olarak gelecektir.
İşlemleri yaparken root kullanıcı içerisinde olmanızı öneririm.

MySQL sunucumuzu başlatalım.

Bash:
sudo service mysql start

qt72c4s.png


Şimdi ise sunucumuza giriş yapalım

Bash:
mysql -u root

92to077.png


databaseleri görüntüleyelim.

SQL:
SHOW DATABASES;

k79bgdz.png


default olarak kurulu gelen databaseler;


CoffeeScript:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

bizim bunlarla işimiz kendi databasemizi oluşturalım.

SQL:
CREATE DATABASE bunjo;


g2aypw3.png


Şimdi de kullanıcı verilerimizi bulunduracağımız tablomuzu oluşturalım.


SQL:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

ie8543g.png


kontrol edelim.

SQL:
SHOW COLUMNS FROM users;

7x5exwr.png


evet kolonlarımız ve tablolarımız başarılı bir şekilde oluşturuldu şimdi ise içerilerine admin kullanıcısını ekleyelim.

SQL:
INSERT INTO users (username,password) VALUES ("admin", "12345")

cyrwml9.png


şuan işlem tamamlandı kapatabilirsiniz terminali fakat değerleri görüntülemek istiyorum derseniz;

SQL:
SELECT * FROM users;

a67y1e4.png


Evet bu kısımlık her şey hazır şimdi ise herhangi bir websitesi kodlayalım.

Not:

SQL:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yeni_şifre';

komutu ile root kullanıcı şifrenizi değiştirebilirsiniz.


Login Panel Kısmı

Dosya ağacı:

mhtktwr.png


şimdi ise basit bir admin login paneli kodlayacağız.

admin.php


HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 8px;
        }

        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 16px;
            box-sizing: border-box;
        }

        input[type="submit"] {
            background-color: #3498db;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #2980b9;
        }
    </style>
</head>
<body>

    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <input type="submit" value="Login" name="login">
    </form>

</body>
</html>

Site:

qt7or3s.png


evet böyle tatlı gözüken bir site yazdık. Şimdi php ile database içerisinde sorgu yapan kodu yazalım.

aklı yerinde olan bir admin sql sorgusu için root kullanıcısı kullanmaz, bunun
farklı bir kullanıcı oluşturur ve yetkilerini ona göre ayarlar.
Mesela database oluşturma veya silme yetkisini eklemez :) ( umarım )

Ben örnek bir anlatım yaptığım için root kullanıcısı ile direkt oturumu sağlıyorum.

PHP:

PHP:
<?php
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $servername = "localhost";
                $dbname = "bunjo";
                $db_usr = "root";
                $db_pass = "";

                $conn = new mysqli($servername, $db_usr, $db_pass, $dbname);

                if ($conn->connect_error) {
                    die("Error:" . $conn->connect_error);
                }

                $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) {
                    echo "Logged in.";
                    exit();
                } else {
                    $error = "Invalid username or password.";
                }

                $conn->close();
            }
        ?>

Tüm Kod:
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 8px;
        }

        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 16px;
            box-sizing: border-box;
        }

        input[type="submit"] {
            background-color: #3498db;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #2980b9;
        }
    </style>
</head>
<body>

    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <input type="submit" value="Login" name="login">

        <?php
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $servername = "localhost";
                $dbname = "bunjo";
                $db_usr = "root";
                $db_pass = "";

                $conn = new mysqli($servername, $db_usr, $db_pass, $dbname);

                if ($conn->connect_error) {
                    die("Error:" . $conn->connect_error);
                }

                $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) {
                    echo "Logged in.";
                    exit();
                } else {
                    $error = "Invalid username or password.";
                }

                $conn->close();
            }
        ?>
    </form>
</body>
</html>

bu kodda form ile alınan username ve password değişkenleri oturum açılan sql sunucusunda sorgulanıyor, eşleşme bulunursa giriş yapıldı yazdırıyor.
Başka sitelerde admin panele yönlendirir sayfa ekle sil gibi birçok menü bulunur.

Şimdi kodumuzu test edelim.

bildiğimiz admin ve 12345 şifresi ile oturum açıyoruz.


igk5tfy.png


2d6m3xy.png


Evet oturum açma işlemi başarıyla çalışıyor.

Evet artık database yazmayı ve üstüne de php ile sorgu yapmayı öğrendiğimize göre şimdi bu güvenlik açığı barındıran kodda nasıl bir enjeksiyon işlemi yapılıyor bunu görelim.


Admin Panel İçin Bypass

Burada kafanıza "admin paneli nasıl bulacağız?" gibi bir soru takılırsa hemen onunda cevabını vereyim.

piyasada çeşitli admin panel finderler var bunları kullanabilirsiniz ayrı olarak dizin bulma araçlarını da kullanabilirsiniz mesela dirsearch

Bash:
apt install dirsearch

4dzuhvg.png


bu komutla indirdikten sonra hedef siteyi -u parametresi ile veriyoruz.

buyurun efendim size admin panel.


g74s77n.png


evet şimdi hiçbir şey bilmiyormuş gibi sayfaya giriş yapalım.

m7djoi8.png


giriş yapıp random bir şeyler denediniz ama çalışmadı elbette

şimdi siz bu random işlemleri yapınca arka da dönen php sorgusunu inceleyelim.

PHP:
$username = $_POST["username"];
$password = $_POST["password"];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";

bakın burada post input kutularından yani kullanıcı adı ve şifre girdiğiniz o kutucuklardan yazdığınız veri değişkene aktarılıyor örneğin

username: admin

password: roketatar

şeklinde yazarsanız arka da dönen php sorgusu şu olacaktır:

SQL:
SELECT * FROM users WHEREN username='admin' AND password='roketatar'

evet dönen sorgu bu.

Peki ya bu sorgu yapılırken saldırganın girebileceği AND OR ' gibi karakterler engellenmezse ne olur?

SQL:
SELECT * FROM users WHEREN username='admin' AND password='roketatar' OR 1=1-- -

bakın burada yazdığım şey şu:

roketatar' OR 1=1-- -

' ile roketatarın başında bulunan tırnağı kapattım.

daha sonra eğer şifre yanlışsa false dönecek fakat OR operatöründe en az bir adet doğru bulunduğunda bile tüm sorguyu true yapar.

1 değeri de 1 e eşit olduğundan dolayı buradan true dönecek yani kod şöyle olacak:

fasle OR true-- -

burada -- - ifadesi de yorum satırı haline getirilir yani yorum satırları detleyici ya da yorumlayıcı tarafından çalıştırılmaz

bunu eklemeseydik

'roketatar' OR 1=1' şeklinde sorgu olacaktı ve bir adet ' fazla olduğu için hata alacaktık ama biz -- - ekleyerek bu tırnağı yorum satırına alıyoruz ve sorun çözülüyor.

şimdi bakalım password kısmına:

username: admin

password: roketatar' OR 1=1-- -

yazalım ve deneyelim.


m7kpbzm.png


gastk8r.png


artık siz de bir adminsiniz

Okuduğunuz için teşekkür ederim.

emeğe karşılık konuyu beğenip yorum atınız.

Hocam emeğine sağlık mükemmel olmuş 👏👏
 

Bunjo

Uzman üye
14 Ara 2020
1,591
1,894
I Won
Eline emeğine sağlık böyle güzel konular açman forum için çok değerli tekrardan eline sağlık tebrikler 👏
Teşekkür ederim dostum.
Hocam emeğine sağlık mükemmel olmuş 👏👏
Teşekkürler dostum :)
Emeğinize sağlık. Oldukça bilgilendirici olmuş :)
Teşekkür ederim :)
Eline emeğine sağlık cano bir zafiyetin arka tarafında ne olduğunu, neler döndüğünü bilmenin saldırgana ne kadar kolaylık sağladığını anlatan çok güzel bir konu olmuş devamını dört gözle bekliyorum
Çok teşekkür ederim Gölge Hocam :)
 
23 Eki 2023
116
31
oqk18ir.png


c0sawob.png


lbn20fm.png
2q250vr.png


Merhabalar ben saldırı timlerinden Bunjo, bu konuda bir mysql sunucusu kurup içine gerekli veirleri yerleştirip bir login bypass yapacağız.

Veritabanının ne olduğunu anlatmayı tercih etmiyorum. Burada hali hazırda anlattığım bir konu var inceleyebilirsiniz.
Konu için tıklayınız


MySQL Sunucusu Kurulması

Eğer Kali Linux veya Parrot OS gibi gibi sistemler kullanıyorsanız "mysql" kurulu olarak gelecektir.
İşlemleri yaparken root kullanıcı içerisinde olmanızı öneririm.

MySQL sunucumuzu başlatalım.

Bash:
sudo service mysql start

qt72c4s.png


Şimdi ise sunucumuza giriş yapalım

Bash:
mysql -u root

92to077.png


databaseleri görüntüleyelim.

SQL:
SHOW DATABASES;

k79bgdz.png


default olarak kurulu gelen databaseler;


CoffeeScript:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

bizim bunlarla işimiz kendi databasemizi oluşturalım.

SQL:
CREATE DATABASE bunjo;


g2aypw3.png


Şimdi de kullanıcı verilerimizi bulunduracağımız tablomuzu oluşturalım.


SQL:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

ie8543g.png


kontrol edelim.

SQL:
SHOW COLUMNS FROM users;

7x5exwr.png


evet kolonlarımız ve tablolarımız başarılı bir şekilde oluşturuldu şimdi ise içerilerine admin kullanıcısını ekleyelim.

SQL:
INSERT INTO users (username,password) VALUES ("admin", "12345")

cyrwml9.png


şuan işlem tamamlandı kapatabilirsiniz terminali fakat değerleri görüntülemek istiyorum derseniz;

SQL:
SELECT * FROM users;

a67y1e4.png


Evet bu kısımlık her şey hazır şimdi ise herhangi bir websitesi kodlayalım.

Not:

SQL:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yeni_şifre';

komutu ile root kullanıcı şifrenizi değiştirebilirsiniz.


Login Panel Kısmı

Dosya ağacı:

mhtktwr.png


şimdi ise basit bir admin login paneli kodlayacağız.

admin.php


HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 8px;
        }

        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 16px;
            box-sizing: border-box;
        }

        input[type="submit"] {
            background-color: #3498db;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #2980b9;
        }
    </style>
</head>
<body>

    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <input type="submit" value="Login" name="login">
    </form>

</body>
</html>

Site:

qt7or3s.png


evet böyle tatlı gözüken bir site yazdık. Şimdi php ile database içerisinde sorgu yapan kodu yazalım.

aklı yerinde olan bir admin sql sorgusu için root kullanıcısı kullanmaz, bunun
farklı bir kullanıcı oluşturur ve yetkilerini ona göre ayarlar.
Mesela database oluşturma veya silme yetkisini eklemez :) ( umarım )

Ben örnek bir anlatım yaptığım için root kullanıcısı ile direkt oturumu sağlıyorum.

PHP:

PHP:
<?php
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $servername = "localhost";
                $dbname = "bunjo";
                $db_usr = "root";
                $db_pass = "";

                $conn = new mysqli($servername, $db_usr, $db_pass, $dbname);

                if ($conn->connect_error) {
                    die("Error:" . $conn->connect_error);
                }

                $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) {
                    echo "Logged in.";
                    exit();
                } else {
                    $error = "Invalid username or password.";
                }

                $conn->close();
            }
        ?>

Tüm Kod:
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Admin</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }

        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        label {
            display: block;
            margin-bottom: 8px;
        }

        input {
            width: 100%;
            padding: 8px;
            margin-bottom: 16px;
            box-sizing: border-box;
        }

        input[type="submit"] {
            background-color: #3498db;
            color: #fff;
            padding: 10px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        input[type="submit"]:hover {
            background-color: #2980b9;
        }
    </style>
</head>
<body>

    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <input type="submit" value="Login" name="login">

        <?php
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $servername = "localhost";
                $dbname = "bunjo";
                $db_usr = "root";
                $db_pass = "";

                $conn = new mysqli($servername, $db_usr, $db_pass, $dbname);

                if ($conn->connect_error) {
                    die("Error:" . $conn->connect_error);
                }

                $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) {
                    echo "Logged in.";
                    exit();
                } else {
                    $error = "Invalid username or password.";
                }

                $conn->close();
            }
        ?>
    </form>
</body>
</html>

bu kodda form ile alınan username ve password değişkenleri oturum açılan sql sunucusunda sorgulanıyor, eşleşme bulunursa giriş yapıldı yazdırıyor.
Başka sitelerde admin panele yönlendirir sayfa ekle sil gibi birçok menü bulunur.

Şimdi kodumuzu test edelim.

bildiğimiz admin ve 12345 şifresi ile oturum açıyoruz.


igk5tfy.png


2d6m3xy.png


Evet oturum açma işlemi başarıyla çalışıyor.

Evet artık database yazmayı ve üstüne de php ile sorgu yapmayı öğrendiğimize göre şimdi bu güvenlik açığı barındıran kodda nasıl bir enjeksiyon işlemi yapılıyor bunu görelim.


Admin Panel İçin Bypass

Burada kafanıza "admin paneli nasıl bulacağız?" gibi bir soru takılırsa hemen onunda cevabını vereyim.

piyasada çeşitli admin panel finderler var bunları kullanabilirsiniz ayrı olarak dizin bulma araçlarını da kullanabilirsiniz mesela dirsearch

Bash:
apt install dirsearch

4dzuhvg.png


bu komutla indirdikten sonra hedef siteyi -u parametresi ile veriyoruz.

buyurun efendim size admin panel.


g74s77n.png


evet şimdi hiçbir şey bilmiyormuş gibi sayfaya giriş yapalım.

m7djoi8.png


giriş yapıp random bir şeyler denediniz ama çalışmadı elbette

şimdi siz bu random işlemleri yapınca arka da dönen php sorgusunu inceleyelim.

PHP:
$username = $_POST["username"];
$password = $_POST["password"];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";

bakın burada post input kutularından yani kullanıcı adı ve şifre girdiğiniz o kutucuklardan yazdığınız veri değişkene aktarılıyor örneğin

username: admin

password: roketatar

şeklinde yazarsanız arka da dönen php sorgusu şu olacaktır:

SQL:
SELECT * FROM users WHEREN username='admin' AND password='roketatar'

evet dönen sorgu bu.

Peki ya bu sorgu yapılırken saldırganın girebileceği AND OR ' gibi karakterler engellenmezse ne olur?

SQL:
SELECT * FROM users WHEREN username='admin' AND password='roketatar' OR 1=1-- -

bakın burada yazdığım şey şu:

roketatar' OR 1=1-- -

' ile roketatarın başında bulunan tırnağı kapattım.

daha sonra eğer şifre yanlışsa false dönecek fakat OR operatöründe en az bir adet doğru bulunduğunda bile tüm sorguyu true yapar.

1 değeri de 1 e eşit olduğundan dolayı buradan true dönecek yani kod şöyle olacak:

fasle OR true-- -

burada -- - ifadesi de yorum satırı haline getirilir yani yorum satırları detleyici ya da yorumlayıcı tarafından çalıştırılmaz

bunu eklemeseydik

'roketatar' OR 1=1' şeklinde sorgu olacaktı ve bir adet ' fazla olduğu için hata alacaktık ama biz -- - ekleyerek bu tırnağı yorum satırına alıyoruz ve sorun çözülüyor.

şimdi bakalım password kısmına:

username: admin

password: roketatar' OR 1=1-- -

yazalım ve deneyelim.


m7kpbzm.png


gastk8r.png


artık siz de bir adminsiniz hemde şifreyi bilmeden :D

Okuduğunuz için teşekkür ederim.

emeğe karşılık konuyu beğenip yorum atınız.

Hocam elinize sağlık konularınız gerçekten ilgimi çekiyor çok başarılı.
 

WHITERUBY

Uzman üye
20 Şub 2023
1,662
1,512
🔱
Eline sağlık Bunjo, direkt bypassa geçmeden interaktif olması adına database ve diğer faktörleri de ekleyip konu bütünlüğünü sağladığın için ayrıca tebrik ederim. 💯💯💯
 

Rebelkan

Blue Team Lider Yrd.
12 Şub 2019
1,847
923
Emek verilerek hazırlanmış , kaliteli, detaylı ve okuması keyif veren bir konu olmuş. 👍 Eline sağlık Bunjo
 

Çokgen

Katılımcı Üye
4 Eyl 2023
413
194
Ellerinize ve emeğinize sağlık, web ile ilgilenmesemde konunuz çok açıklayıcı ve detaylı olmuş. Teşekkürler:)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.