0% found this document useful (0 votes)
6 views7 pages

SQL Injection

Uploaded by

Yunus Emre
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views7 pages

SQL Injection

Uploaded by

Yunus Emre
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

SQL Inject on Ned r?

SQL Inject on, kullanıcı g rd s n n SQL cümles ne ham şek lde eklenmes sonucu saldırganın
sorgunun mantığını değ şt rmes ne veya yen sorgular çalıştırmasına z n veren uygulama katmanı
güvenl k açığıdır.

Nasıl gerçekleş r?

Uygulama: SQL şablonu + kullanıcı_g rd s → ver tabanına gönder r.

Saldırgan: kullanıcı_g rd s ne SQL sözd z m ekleyerek şablonun anlamını değ şt r r.

Sonuç: yetk s z okuma, değ şt rme, s lme veya şlet m s stem düzey nde ek etk ler.

Adım adım, gerçek b r örnek

Varsayılan uygulama kodu (kırılgan, pseudo-code):

nput_username = kullanıcıdan_al()

nput_password = kullanıcıdan_al()

sql = "SELECT * FROM users WHERE username = '" + nput_username + "' AND password = '" +
nput_password + "';"

[Link](sql)

Normal çalışmada (kullanıcı: ertugrul, parola:12345):

SELECT * FROM users WHERE username = ' ertugrul ' AND password = '12345';

sorgu doğru kullanıcıyı döndürür.

Saldırgan username alanına şu g rd y yazar:

‘ OR ‘1’=’1’ --

Sorgu met n b rleş m sonrası:

SELECT * FROM users WHERE username = '' OR '1'='1' -- ' AND password = '...';
Açıklama:

 '' OR '1'='1' kısmı her zaman true olur

 -- şaret SQL yorum satırı; ger kalan AND password = ... kısmı görmezden gel n r.

 Sonuç: sorgu, lk bulunan (veya tüm) kullanıcı satırlarını döner, k ml k doğrulama


atlatılmıştır.

Kaynak : [Link] .com/2076-3417/15/2/571

Örnek
Örnek

Toplu SQL İfadeler ne Dayalı SQL Inject on

Toplu SQL fadeler (ör. SQL1; SQL2;) ver tabanı motorunun aynı çağrıda b rden fazla komutu
çalıştırmasına olanak ver r. Eğer uygulama kullanıcı g rd s n doğrudan SQL şablonuna ekl yorsa,
saldırgan tek b r g r ş le hem tüm kullanıcı ver ler n çekeb l r hem de ardından DROP TABLE
Tedar kç ler; g b yıkıcı b r komut çalıştırarak tabloyu s leb l r.

Aynı saldırının daha yıkıcı varyantı (ver s lme örneğ )

Kullanıcı g r ş şöyle olsaydı: '; DROP TABLE users; --

Sorgu:

SELECT * FROM users WHERE username = ''; DROP TABLE users; -- ' AND password = '...';
Örnek

SQL Inject on Önleme Adımları

1) Parametrel sorgular / prepared statements

Ne yapar: Sorgu metn n ve parametreler ayırır; kullanıcı g rd s sorgu mantığını değ şt remez.

Neden: DB motoru parametreler l teral değer olarak şler.

Örnekler

Python (psycopg2 / PostgreSQL)

[Link]("SELECT * FROM users WHERE ema l = %s", (ema l,))

PHP (PDO)

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");

$stmt->execute([$username]);

C# ([Link])

us ng var cmd = new SqlCommand("SELECT * FROM Users WHERE username=@u", conn);

[Link] thValue("@u", username);

[Link] (pg)

const res = awa t cl [Link]('SELECT * FROM products WHERE d=$1', [ d]);

Test: Test ortamında ema l = "' OR '1'='1' --" le dene; parametrel olup olmadığına bak — ver
döndürmemel .
2) G rd doğrulama — beyaz l ste (wh tel st ng)

Ne yapar: Beklenen format dışındak g rd ler reddeder; saldırı yüzey n daraltır.

Örnekler

ID ç n (sadece rakam):

f(!/^\d{1,10}$/.test([Link]. d)) return [Link](400).send(' nval d d');

E-posta:

var regex = new Regex(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$");

f(![Link](ema l)) throw new Val dat onExcept on();

Enum (kategor ):

f category not n ("Books","G fts","Tools"): ra se ValueError

Test: Beklenen dışı nput 400 dönmel ; nject on str ngler redded lmel veya str ng l teral olarak
şlenmel .

3) ORM / query bu lder / stored procedures

Ne yapar: Otomat k parametre bağlaması sağlar; raw SQL kullanımını azaltır.

Örnek (Ent ty Framework / Dapper / H bernate):

var user = [Link].F rstOrDefault(u => [Link] l == ema l);

Stored proc (parametre le)

CREATE PROCEDURE GetUserByEma l @ema l NVARCHAR(255) AS

SELECT * FROM Users WHERE ema l=@ema l;

Uyarı: ORM ç nde raw SQL kullanıyorsanız mutlaka parametre bağlayın.

Test: Raw query kullanımını kod taraması le tesp t et; mümkünse refactor et.

4) Mult -statement / stacked quer es engelleme

Ne yapar: Tek stekte b rden fazla SQL çalıştırılmasını engeller; ; DROP TABLE ... r sk n azaltır.

Konf g örneğ : MySQL dr ver’da mult pleStatements=false; MSSQL/other dr ver konf glarını
kontrol et.
Test: '; DROP TABLE users; -- payload’ı tek parametre olarak ver ld ğ nde b rden fazla komut
çalışmamalı.

5) En az ayrıcalık (least pr v lege)

Ne yapar: Uygulama DB kullanıcısına sadece gereken z nler ver r; ele geç r lse b le zarar kısıtlı
olur.

SQL örneğ :

CREATE USER app_user IDENTIFIED BY '...';

GRANT SELECT, INSERT, UPDATE ON mydb.* TO app_user;

-- DROP/ALTER yetk s verme

Test: app_user le DROP denend ğ nde perm ss on den ed olmalı.

6) Hata mesajlarını maskeleme; logg ng & mon tor ng

Ne yapar: Kullanıcıya tekn k hata vermey keser; detaylı hata kaydı SIEM’e g der.

Uygulama: Prod’da gener c mesaj: “Sunucu hatası”; detay stack trace sadece secure log.

Mon tor ng: SIEM/WAF alarmı: aynı IP’den çok sayıda ', UNION, SLEEP çeren steklerde uyarı.

Test: B l nçl hatada kullanıcıya ayrıntı göster lmed ğ n ve log kaydının oluştuğunu doğrula.

7) WAF, DAST, SAST, pentest — katmanlı savunma

Ne yapar: B r katman kaçarsa d ğerler yakalar; otomat k tarama düzenl güvenl k ger b ld r m
sağlar.

CI entegrasyonu: Jenk ns/G tHub Act ons → OWASP ZAP veya Acunet x taraması, başarısızsa
merge bloke.

Test: CI p pel ne’da nject on testler çalışmalı; kr t k bulgu varsa fa l/ ssue açılmalı.

8) D nam k SQL’ azalt / parametreleşt r

Ne yapar: Str ng concat le oluşturulan SQL’den kaçın.


Kötü örnek:

EXEC('SELECT * FROM users WHERE name = ''' + @name + '''');

İy örnek: parametrel stored proc (yukarıda).

Test: Kod taraması le dynam c SQL kullanım sayısı azaltılmalı.

9) Prat k payload örnekler (sadece z nl test ortamı)

 Auth bypass: ' OR '1'='1' --

 UNION exf l: ' UNION SELECT username, password FROM users --

 Stacked: '; DROP TABLE users; --

 T me-based bl nd (Postgres): '; SELECT pg_sleep(5); --

Test prosedürü: stag ng ortamında payload l stes n çalıştır, logları ve DB davranışını ncele.

10) Kısa check-l st (hızlı denet m)

 Tüm SQL sorguları parametr zed mı?

 Mult -statement engellenm ş m ?

 G rd beyaz-l steleme uygulanmış mı?

 Uygulama DB hesabı least-pr v lege mı?

 Prod hata mesajları maskel , loglama akt f m ?

 CI’da DAST/SAST + yıllık pentest planı var mı?

You might also like