Hoşgeldin Misafir

CTION Ve Man İn The Middle(MiTM)

Mustafa73

20 Eyl 2023
423 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:

SQL İnjection Atağı

SQL Injection, bir web uygulamasının veri tabanı ile iletişim kurmak için kullandığı SQL dilini kötüye kullanarak yapılan bir siber saldırı yöntemidir. SQL dilinde bazı özel karakterler veya söz dizimi kuralları vardır. Bu karakterler veya kurallar, SQL sorgusunun anlamını veya işlevini değiştirebilir. Bir saldırgan, web uygulamasının veri tabanına gönderdiği SQL sorgusuna bu karakterler veya kuralları ekleyerek, veri tabanının beklenmedik şekilde davranmasını sağlayabilir. Böylece saldırgan, veri tabanındaki gizli veya hassas verileri okuyabilir, değiştirebilir, silebilir veya kopyalayabilir. SQL Injection, veri tabanının güvenliğini tehlikeye atan çok ciddi bir zafiyettir. SQL Injection saldırısı başarılı olduğunda, saldırganın veri tabanı üzerinde tam kontrolü olabilir. Saldırgan, veri tabanını bozabilir, verileri çalabilir, sisteme zarar verebilir veya sisteme sızabilir. SQL Injection saldırısı, web uygulamasının kullanıcı girişi, form doldurma, arama yapma gibi işlemler sırasında gerçekleşebilir. Saldırgan, bu işlemlerde kullanılan alanlara SQL sorgusunu değiştirecek karakterler veya kurallar girerek, veri tabanına istediği komutları gönderebilir. Bu yüzden web uygulamalarının, kullanıcı girdilerini doğrulamak ve filtrelemek için SQL parametrelerini kullanması gerekir. SQL parametreleri, SQL sorgusunun sabit ve değişken kısımlarını ayırarak, saldırganın SQL sorgusuna müdahale etmesini engeller. SQL Injection, web uygulamalarının güvenliğini sağlamak için önlenmesi gereken bir saldırı türüdür.
SQL Injection Atak Türleri
SQL Injection, bir web uygulamasının veri tabanına gönderdiği SQL sorgularına zararlı kodlar ekleyerek veri tabanını manipüle etmeye çalışan bir saldırı yöntemidir. SQL Injection atak türleri, saldırganın veri tabanından aldığı yanıtlara göre farklılık gösterir.
- In-Band SQL Injection (Classic): Bu atak türünde saldırgan, web uygulamasının veri tabanına gönderdiği HTTP Post veya Get isteklerine zararlı SQL kodları ekler ve veri tabanından gelen yanıtları aynı iletişim kanalı üzerinden görür. Bu atak türünün iki çeşidi vardır:
- Error Based SQL Injection: Bu atak türünde saldırgan, veri tabanına hatalı veya geçersiz SQL sorguları göndererek veri tabanının hata mesajları vermesini sağlar. Bu hata mesajları, saldırganın veri tabanı hakkında bilgi edinmesine yardımcı olur. Örneğin, veri tabanının versiyonu, tablo adları, sütun adları, veri tipleri gibi bilgileri hata mesajlarından öğrenebilir. Bu bilgileri kullanarak daha doğru ve etkili SQL sorguları yazabilir. Ayrıca, veri tabanının güncel olmayan bir versiyonunu kullandığını tespit ederse, bu versiyona özgü zafiyetleri araştırabilir ve bunlardan yararlanabilir.
- Union Based SQL Injection: Bu atak türünde saldırgan, veri tabanına gönderilen SQL sorgusuna "UNION" anahtar kelimesi ile başka bir SQL sorgusu ekler. Böylece, iki veya daha fazla SQL sorgusunun sonuçlarını birleştirerek veri tabanından daha fazla veri çekebilir. Bu atak türünde dikkat edilmesi gereken nokta, ana sorgudan dönen sütun sayısı ile eklenen sorgudan dönen sütun sayısının eşit olmasıdır. Aksi takdirde, veri tabanı bir hata mesajı verecektir. Ana sorgudan kaç sütun döndüğünü tespit etmek için, saldırgan "ORDER BY" anahtar kelimesi ile sütun numaralarını artırarak deneme yapabilir. Veri tabanı bir hata mesajı verene kadar devam eder. Böylece, ana sorgudan dönen sütun sayısını bulur. Alternatif olarak, saldırgan "UNION SELECT NULL" sorgusu ile de sütun sayısını bulabilir. Burada, NULL değerleri sütun sayısını eşitlemek için kullanılır. Sütun sayısı eşit olduğunda, veri tabanı bir hata mesajı vermez.
- Blind SQL Injection: Bu atak türünde saldırgan, web uygulamasının veri tabanına gönderdiği HTTP Post veya Get isteklerine zararlı SQL kodları ekler ancak veri tabanından gelen yanıtları aynı iletişim kanalı üzerinden göremez. Çünkü web uygulaması, veri tabanından gelen hata mesajlarını veya verileri göstermez. Bu durumda, saldırgan veri tabanı hakkında bilgi edinmek için farklı yöntemler kullanır. Bu atak türünün iki çeşidi vardır:
- Boolean Based SQL Injection: Bu atak türünde saldırgan, veri tabanına mantıksal (boolean) ifadeler içeren SQL sorguları gönderir. Bu ifadeler, doğru (true) veya yanlış (false) değerlerine sahiptir. Saldırgan, web uygulamasının bu ifadelere göre nasıl davrandığını gözlemleyerek veri tabanı hakkında bilgi edinir. Örneğin, saldırgan "AND 1=1" veya "AND 1=2" gibi ifadeler ekleyerek web uygulamasının normal veya anormal davranmasını sağlar. Böylece, veri tabanının versiyonu, tablo adları, sütun adları, veri tipleri gibi bilgileri mantıksal ifadeleri değiştirerek öğrenebilir.
- Time Based SQL Injection: Bu atak türünde saldırgan, veri tabanına zaman geciktirici (time delay) fonksiyonları içeren SQL sorguları gönderir. Bu fonksiyonlar, veri tabanının belirli bir süre beklemesini sağlar. Saldırgan, web uygulamasının bu fonksiyonlara göre nasıl davrandığını gözlemleyerek veri tabanı hakkında bilgi edinir. Örneğin, saldırgan "SLEEP(10)" veya "WAITFOR DELAY '00:00:10'" gibi fonksiyonlar ekleyerek web uygulamasının 10 saniye gecikmesini sağlar. Böylece, veri tabanının versiyonu, tablo adları, sütun adları, veri tipleri gibi bilgileri zaman geciktirici fonksiyonları değiştirerek öğrenebilir.
- Out Of Band SQL Injection: Bu atak türünde saldırgan, web uygulamasının veri tabanına gönderdiği HTTP Post veya Get isteklerine zararlı SQL kodları ekler ve veri tabanından gelen yanıtları farklı bir iletişim kanalı üzerinden görür. Bu atak türü, In-Band veya Blind SQL Injection yöntemlerinin işe yaramadığı durumlarda kullanılır. Bu atak türünün çalışması için, saldırganın kontrol ettiği bir sunucu veya servis olması gerekir. Bu atak türünde, saldırgan veri tabanına veri gönderen veya veri alan fonksiyonlar kullanır. Örneğin, saldırgan "xp_cmdshell" veya "sp_oacreate" gibi fonksiyonlar kullanarak veri tabanından kendi sunucusuna veri gönderebilir. Ya da saldırgan "LOAD_FILE" veya "OPENROWSET" gibi fonksiyonlar kullanarak kendi sunucusundan veri tabanına veri gönderebilir.
1. UYGULAMA
DVWA KURULUMU
DVWA, OWASP tarafından hazırlanmış, web uygulamalarının güvenliğini test etmek için kullanılan bir sistemdir. DVWA kurulumu için aşağıdaki adımları takip edin:
1. Adım: DVWA kurulum dosyasını indirip, Apache, PHP ve MySQL gibi gerekli yazılımları yükledikten sonra, tarayıcınızda 127.0.0.1 adresine gidiniz. Bu, DVWA'nın ana sayfasıdır.
2. Adım: Ana sayfada, DVWA'nın varsayılan kullanıcı adı ve şifresi olan admin ve password ile giriş yapınız. Giriş yaptıktan sonra, sayfanın en alt kısmında Create/Reset Database butonunu göreceksiniz. Bu butona tıklayarak, DVWA için gerekli veri tabanını oluşturunuz. Bu işlem birkaç saniye sürecektir.
3. Adım: Veri tabanı oluşturulduktan sonra, sayfa yenilenecek ve size başarılı bir şekilde kurulduğunu bildirecektir. Bu aşamada, tekrar giriş yapmanız gerekebilir. Yine aynı kullanıcı adı ve şifreyi kullanınız.
4. Adım: Giriş yaptıktan sonra, sol tarafta DVWA'nın içerdiği farklı güvenlik açıklıklarını görebilirsiniz. Bunlardan biri de SQL Injection adı altında bulunmaktadır. SQL Injection, veri tabanı sorgularını manipüle etmek için kullanılan bir saldırı tekniğidir. Bu seçeneği tıklayarak, SQL Injection saldırılarını nasıl gerçekleştirebileceğinizi ve nasıl önleyebileceğinizi öğrenebilirsiniz.
2. UYGULAMA
Error Based SQL Injection Atağı
Error Based SQL Injection, veri tabanından hata mesajı alarak veri tabanının yapısını ve içeriğini öğrenmeye yarayan bir saldırı tekniğidir. Bu teknikte, saldırgan, veri tabanına gönderilen SQL sorgusuna zararlı kodlar ekleyerek, veri tabanının hata vermesini sağlar. Hata mesajı, veri tabanının hangi yazılımı kullandığını, hangi tablo ve sütunlara sahip olduğunu, hangi verileri sakladığını ve daha fazlasını saldırgana gösterir.
Bu saldırıyı gerçekleştirmek için, aşağıdaki adımları izleyebilirsiniz:
1. Adım: Veri tabanının hata vermesini sağlayan kodları enjekte etmek için, User ID kutusuna tek tırnak (') işareti koyunuz. Bu işaret, SQL sorgusunun sonlandırıldığını belirtir. Eğer veri tabanı, bu işareti tanımıyorsa, bir hata mesajı geri dönecektir. Örneğin, MySQL veri tabanı kullanan bir uygulamada, tek tırnak işareti koyduğunuzda, şöyle bir hata mesajı alabilirsiniz:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''VALUE''.
Bu hata mesajı, veri tabanının MySQL kullandığını, hata oluşturan kodun tek tırnak işareti olduğunu ve hata oluştuğu yerin sorgunun sonunda olduğunu saldırgana gösterir. Böylece, saldırgan, veri tabanı yazılımının tipini öğrenmiş olur. Bu bilgi, saldırganın daha ileri seviyede saldırılar yapmasına yardımcı olur.
2. Adım: Veri tabanı yazılımının tipini öğrendikten sonra, saldırgan, veri tabanının yapısını ve içeriğini öğrenmek için daha karmaşık kodlar enjekte etmeye çalışır. Bu kodlar, veri tabanının özel fonksiyonlarını, komutlarını veya özelliklerini kullanarak, hata mesajında istenen bilgileri gösterir. Örneğin, MySQL veri tabanında, veri tabanının adını öğrenmek için, User ID kutusuna şöyle bir kod koyabilirsiniz:
' OR 1=1 AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT DATABASE()),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)--
Bu kod, veri tabanının adını, bir rastgele sayı ile birleştirerek, hata mesajında gösterir. Örneğin, şöyle bir hata mesajı alabilirsiniz:
Duplicate entry 'testdb:1' for key 'group_key'
Bu hata mesajı, veri tabanının adının testdb olduğunu saldırgana gösterir. Benzer şekilde, saldırgan, veri tabanının tablo ve sütun adlarını, veri tabanında saklanan verileri ve daha fazlasını öğrenebilir.
Bu şekilde, Error Based SQL Injection tekniği ile, saldırgan, veri tabanının yapısını ve içeriğini öğrenerek, veri tabanına zarar verebilir, verileri çalabilir veya değiştirebilir. Bu saldırıyı önlemek için, veri tabanına gönderilen girdilerin doğrulanması, hazırlanmış ifadelerin veya saklı yordamların kullanılması, en az ayrıcalık ilkesinin uygulanması ve hata mesajlarının gizlenmesi gibi yöntemler kullanılabilir.
3. UYGULAMA
Union Based SQL Injection Atağı
Union Based SQL Injection Atağı, bir web uygulamasının veri tabanına zararlı sorgular göndererek veri çalmayı veya değiştirmeyi amaçlayan bir saldırı türüdür. Bu saldırıyı gerçekleştirmek için aşağıdaki adımları takip edebilirsiniz:
1. İlk olarak, saldırı yapmak istediğiniz web uygulamasının URL'sine bir order by komutu ekleyerek, veri tabanının kaç tane sütuna sahip olduğunu bulmalısınız. Order by komutu, verileri belirli bir sütuna göre sıralamak için kullanılır. Örneğin, http://example.com/index.php?id=1 order by 1# şeklinde bir URL yazarsanız, verileri 1. sütuna göre sıralar. Burada # işareti, sorgunun sonunu belirtir ve veri tabanına gönderilmez. Eğer bu URL çalışıyorsa, veri tabanında en az bir sütun olduğunu anlayabilirsiniz. Sonra, sütun sayısını artırarak devam edersiniz. Örneğin, http://example.com/index.php?id=1 order by 2#, http://example.com/index.php?id=1 order by 3# gibi. Eğer bir URL çalışmıyorsa ve hata veriyorsa, veri tabanında o kadar sütun olmadığı anlamına gelir. Örneğin, http://example.com/index.php?id=1 order by 3# hata verirse, veri tabanında 2 sütun olduğunu anlayabilirsiniz.
2. İkinci olarak, veri tabanındaki sütun sayısını bildikten sonra, union komutu kullanarak, veri tabanından istediğiniz bilgileri alabilirsiniz. Union komutu, iki veya daha fazla sorgunun sonuçlarını birleştirmek için kullanılır. Örneğin, http://example.com/index.php?id=1 union select 1,2# şeklinde bir URL yazarsanız, ilk sorgunun sonucu ile ikinci sorgunun sonucunu birleştirir. Burada ikinci sorguda 1 ve 2 sayıları, sütun sayısına eşit olmalıdır. Aksi halde hata alırsınız. Bu URL çalıştığında, web uygulamasının sayfasında 1 ve 2 sayılarını görebilirsiniz. Bu sayılar, hangi sütunun görünür olduğunu gösterir. Örneğin, sadece 2 sayısını görüyorsanız, 2. sütunun görünür olduğunu anlayabilirsiniz.
3. Üçüncü olarak, union komutu ile veri tabanından istediğiniz bilgileri seçebilirsiniz. Örneğin, veri tabanının adını ve versiyonunu öğrenmek istiyorsanız, http://example.com/index.php?id=1 union select database(), version()# şeklinde bir URL yazabilirsiniz. Burada database() fonksiyonu, veri tabanının adını döndürür. Version() fonksiyonu ise, veri tabanının versiyonunu döndürür. Bu URL çalıştığında, web uygulamasının sayfasında veri tabanının adı ve versiyonu görünecektir. Örneğin, dvwa ve 10.1.26 gibi.
4. Dördüncü olarak, veri tabanındaki kullanıcı adı ve şifre bilgilerine ulaşmak için, information_schema adlı özel bir veri tabanını kullanabilirsiniz. Bu veri tabanı, diğer veri tabanlarının yapısını ve içeriğini saklar. Örneğin, http://example.com/index.php?id=1 union select table_name, column_name from information_schema.columns where table_schema=database()# şeklinde bir URL yazarsanız, veri tabanındaki tüm tablo ve sütun isimlerini görebilirsiniz. Burada table_name ve column_name, tablo ve sütun isimlerini döndürür. Information_schema.columns, tüm sütun bilgilerini içerir. Table_schema=database(), sadece mevcut veri tabanını filtreler. Bu URL çalıştığında, web uygulamasının sayfasında tablo ve sütun isimlerini görebilirsiniz. Örneğin, users ve password gibi. Eğer kullanıcı adı ve şifre bilgilerinin bulunduğu tablo ve sütun isimlerini bulduysanız, http://example.com/index.php?id=1 union select user, password from users# şeklinde bir URL yazarak, bu bilgileri alabilirsiniz. Burada user ve password, kullanıcı adı ve şifre sütunlarının isimleridir. Users, kullanıcı bilgilerinin bulunduğu tablonun ismidir. Bu URL çalıştığında, web uygulamasının sayfasında kullanıcı adı ve şifre bilgileri görünecektir. Ancak, şifreler genellikle md5 formatında şifrelenmiştir. Bu şifreleri çözmek için, Kali Linux üzerindeki john veya hashcat gibi araçlar kullanabilirsiniz. Bu araçlar, md5 şifrelerini kırarak, orijinal şifreleri bulmaya çalışır.
Bu şekilde, Union Based SQL Injection Atağı gerçekleştirmiş olursunuz. Bu saldırı, web uygulamalarının güvenliğini tehdit eden ciddi bir sorundur. Bu yüzden, web uygulamalarını geliştirirken veya kullanırken, SQL Injection saldırılarına karşı önlem almak gerekir. Bunun için, parametreli sorgular, veri doğrulama, veri şifreleme gibi yöntemler kullanılabilir. Ayrıca, web uygulamalarının güvenliğini test etmek için, sqlmap gibi araçlar da kullanılabilir.
4. UYGULAMA
Boolean Based SQL Injection Atağı
Aşağıdaki işlem adımlarını izleyerek Time Based SQL Injection atağı gerçekleştiriniz.
1. Adım: User ID bölümüne yazılan bir sorgu sonucu cevap döner. Bir başka deyişle sorgu sonucu True ise kayıtlar ile karşılaşılır. Burada yazacağınız 1’ or ‘1’=’1 sorgusu ile cevabın her zaman True olarak dönmesini ve sorgunun her koşulda çalışmasını amaçlayınız.
Bu adımda, User ID bölümüne bir SQL enjeksiyonu yaparak, uygulamanın veritabanından tüm kayıtları getirmesini sağlamaya çalışıyoruz. Örneğin, User ID bölümüne şöyle bir değer girersek:
1' OR '1'='1
Bu, veritabanına şöyle bir sorgu gönderir:
SELECT * FROM users WHERE id = 1' OR '1'='1'
Bu sorgu, id değeri 1 olan kullanıcıyı seçmek yerine, '1'='1' ifadesi her zaman doğru olduğu için tüm kullanıcıları seçer. Böylece, uygulama bize veritabanındaki tüm kayıtları gösterir.
2. Adım: yazılan sorgu sonucu hep True değerleri elde edilir. Tüm kayıtlara ulaşınız.
Bu adımda, bir önceki adımda elde ettiğimiz tüm kayıtları inceleyerek, veritabanının yapısı ve içeriği hakkında bilgi edinmeye çalışıyoruz. Örneğin, kayıtların içinde kullanıcı adı, parola, e-posta gibi hassas bilgiler olabilir. Bu bilgileri elde etmek için, sorgumuzu daha da detaylandırabiliriz. Örneğin, şöyle bir değer girersek:
1' AND (SELECT SUBSTR(username,1,1) FROM users LIMIT 1) = 'a'
Bu, veritabanına şöyle bir sorgu gönderir:
SELECT * FROM users WHERE id = 1' AND (SELECT SUBSTR(username,1,1) FROM users LIMIT 1) = 'a'
Bu sorgu, id değeri 1 olan kullanıcıyı seçmek yerine, veritabanındaki ilk kullanıcının kullanıcı adının ilk harfinin 'a' olup olmadığını kontrol eder. Eğer 'a' ise, sorgu doğru döner ve uygulama bize kayıtları gösterir. Eğer 'a' değilse, sorgu yanlış döner ve uygulama bize kayıt göstermez. Böylece, saldırgan veritabanındaki kullanıcı adlarını tek tek tahmin etmeye çalışarak, doğru olanları bulabilir. Aynı şekilde, parola, e-posta gibi diğer bilgileri de elde edebilir.
Bu şekilde, Boolean Based SQL Injection Atağı ile veritabanına sızma işlemi gerçekleştirilir.

Sqlmap Komutunun Kullanımı

Sqlmap komutu, SQL Injection saldırılarını gerçekleştirmek için kullanılan bir araçtır. SQL Injection, web uygulamalarının veri tabanlarına zararlı SQL sorguları göndererek güvenlik açıklarını istismar etme yöntemidir. Bu sayede, saldırgan veri tabanının yapısını, içeriğini, kullanıcı bilgilerini ve hatta işletim sistemi komutlarını çalıştırabilmektedir.
Sqlmap komutu, Kali Linux dağıtımında varsayılan olarak kuruludur. Kali Linux, güvenlik testleri ve siber saldırılar için özel olarak tasarlanmış bir Linux dağıtımıdır. Sqlmap komutunu kullanmak için, komut satırına sqlmap yazarak başlayabilirsiniz. Komutun farklı seçenekleri ve parametreleri vardır. Bunlardan bazıları şunlardır:
- -u: Hedef web uygulamasının URL'sini belirtir. Örneğin, sqlmap -u http://example.com/index.php?id=1
- --dbs: Hedef veri tabanının adını listeler. Örneğin, sqlmap -u http://example.com/index.php?id=1 --dbs
- -D: Hedef veri tabanının adını belirtir. Örneğin, sqlmap -u http://example.com/index.php?id=1 -D exampledb
- --tables: Hedef veri tabanının tablolarını listeler. Örneğin, sqlmap -u http://example.com/index.php?id=1 -D exampledb --tables
- -T: Hedef veri tabanının bir tablosunu belirtir. Örneğin, sqlmap -u http://example.com/index.php?id=1 -D exampledb -T users
- --columns: Hedef veri tabanının bir tablosunun sütunlarını listeler. Örneğin, sqlmap -u http://example.com/index.php?id=1 -D exampledb -T users --columns
- -C: Hedef veri tabanının bir tablosunun bir sütununu belirtir. Örneğin, sqlmap -u http://example.com/index.php?id=1 -D exampledb -T users -C username
- --dump: Hedef veri tabanının bir tablosunun bir sütununun içeriğini gösterir. Örneğin, sqlmap -u http://example.com/index.php?id=1 -D exampledb -T users -C username --dump
- --os-shell: Hedef bilgisayarın işletim sistemi komutlarını çalıştırmak için bir kabuk açar. Örneğin, sqlmap -u http://example.com/index.php?id=1 --os-shell
- --os-pwn: Hedef bilgisayara sızarak tam kontrol sağlamak için bir arka kapı açar. Örneğin, sqlmap -u http://example.com/index.php?id=1 --os-pwn
- -h: Komutun tüm seçeneklerini ve parametrelerini gösteren bir yardım sayfası açar. Örneğin, sqlmap -h
6. UYGULAMA
Sqlmap Komutu
Sqlmap, SQL Injection saldırılarını otomatik olarak gerçekleştirmek için kullanılan bir araçtır. SQL Injection, veri tabanına zararlı SQL sorguları göndererek veri çalmak veya değiştirmek için kullanılan bir tekniktir. Sqlmap, hedef web sitesinde SQL Injection açıkları olup olmadığını tespit edebilir, veri tabanı yapısını ve içeriğini görüntüleyebilir, veri tabanı yöneticisi hesabına erişebilir ve daha fazlasını yapabilir.
Aşağıda, sqlmap komutunun nasıl kullanılacağına dair bir örnek verilmiştir. Bu örnekte, hedef web sitesi http://127.0.0.1/vulnerabilities/sqli_blind/ olarak varsayılmıştır. Bu web sitesi, SQL Injection açıklarını test etmek için kullanılan DVWA (Damn Vulnerable Web Application) adlı bir uygulamadır. Bu web sitesinde, id parametresi ile SQL sorgusu yapılabilen bir sayfa bulunmaktadır. Bu sayfaya, http://127.0.0.1/vulnerabilities/sqli_blind/?id=1&Submit=Submit şeklinde erişilebilir.
1. Adım: Sqlmap komutu ile hedefteki SQL Injection açıklarını tespit etmek için, aşağıdaki komutu kullanabiliriz:
$ sqlmap -u "http://127.0.0.1/vulnerabilities/sqli_blind/?id=1&Submit=Submit" --dbs
Bu komutta, -u parametresi ile sqlmap'e hedef URL'yi belirtiyoruz. URL içindeki id parametresinin değerini 1 olarak veriyoruz. Bu, sqlmap'in bu parametreyi SQL Injection yapmak için kullanacağı anlamına gelir. --dbs parametresi ile de sqlmap'e hedef web sitesinin bağlı olduğu veri tabanlarının listesini ekrana yazdırmasını söylüyoruz. Bu komutu çalıştırdığımızda, sqlmap bize hedef web sitesinin MySQL veri tabanı sunucusuna bağlı olduğunu ve dvwa adında bir veri tabanı olduğunu söyleyecektir.
2. Adım: Veri tabanı tablolarını ve tablo isimlerini ekrana yazdırmak için, aşağıdaki komutu kullanabiliriz:
$ sqlmap -u "http://127.0.0.1/vulnerabilities/sqli_blind/?id=1&Submit=Submit" -D dvwa --tables
Bu komutta, -D parametresi ile sqlmap'e hangi veri tabanına odaklanacağını belirtiyoruz. Bizim örneğimizde, dvwa veri tabanını seçiyoruz. --tables parametresi ile de sqlmap'e bu veri tabanındaki tabloların isimlerini ekrana yazdırmasını söylüyoruz. Bu komutu çalıştırdığımızda, sqlmap bize dvwa veri tabanında users, guestbook, uploads ve captcha tabloları olduğunu söyleyecektir.
3. Adım: Veri tabanı kolonlarını ekrana getirmek için, aşağıdaki komutu kullanabiliriz:
$ sqlmap -u "http://127.0.0.1/vulnerabilities/sqli_blind/&id=1&Submit=Submit" -D dvwa -T users --columns
Bu komutta, -T parametresi ile sqlmap'e hangi tabloya odaklanacağını belirtiyoruz. Bizim örneğimizde, users tablosunu seçiyoruz. --columns parametresi ile de sqlmap'e bu tablodaki kolonların isimlerini ve tiplerini ekrana yazdırmasını söylüyoruz. Bu komutu çalıştırdığımızda, sqlmap bize users tablosunda user_id, first_name, last_name, user, password ve avatar kolonları olduğunu ve bunların tiplerinin sırasıyla int, varchar, varchar, varchar, varchar ve varchar olduğunu söyleyecektir. Ayrıca, sqlmap bize password kolonundaki değerlerin hashlenmiş olduğunu ve bunların MD5, SHA1 veya SHA512 algoritmaları ile çözülebileceğini söyleyecektir.
4. Adım: Kolonlardaki değerleri ekrana yazdırmak için, aşağıdaki komutu kullanabiliriz:
$sqlmap -u "http://127.0.0.1/vulnerabilities/sqli_blind/?id=1&Submit" -D dvwa -T users -C user,password --dump
Bu komutta, -C parametresi ile sqlmap'e hangi kolonlara odaklanacağını belirtiyoruz. Bizim örneğimizde, user ve password kolonlarını seçiyoruz. --dump parametresi ile de sqlmap'e bu kolonlardaki değerleri ekrana yazdırmasını söylüyoruz. Bu komutu çalıştırdığımızda, sqlmap bize users tablosunda bulunan kullanıcı isimlerini ve şifrelerini (hem hashlenmiş hem de çözülmüş olarak) gösterecektir.
8.1.2. SQL Injection Atağına Karşı Alınacak Önlemler
SQL Injection saldırıları, bir web uygulamasının veritabanına gönderilen SQL sorgularını manipüle ederek veri tabanındaki verileri okumak, değiştirmek veya silmek gibi işlemler yapmaya çalışan saldırılardır. Bu saldırılar, web uygulamalarının güvenliğini tehdit eder ve ciddi zararlara yol açabilir. Bu nedenle, web uygulamalarının SQL Injection saldırılarına karşı korunması çok önemlidir. SQL Injection saldırılarına karşı alınabilecek bazı önlemler şunlardır:
- Kullanıcı girişlerini mutlaka doğrulamak: Web uygulamalarında kullanıcıların girdiği verilerin doğruluğunu ve beklenen formatta olup olmadığını kontrol etmek gerekir. Bu sayede, kullanıcı girişlerinde SQL kodu içeren veya zararlı karakterler barındıran verilerin web uygulamasına gönderilmesi engellenir. Kullanıcı girişlerinin doğrulanması, sunucu tarafında yapılmalıdır. Ayrıca, kullanıcı girişlerinin uzunluğu, tipi ve içeriği gibi kriterlere göre filtrelenmesi de gereklidir.
- Özel karakter kullanımını kontrol etmek ve sınırlandırmak: SQL sorgularında özel anlamı olan karakterler, SQL Injection saldırılarında sıkça kullanılır. Bu karakterler, tek tırnak ('), çift tırnak ("), yorum işareti (--), noktalı virgül (;), yüzde işareti (%) gibi karakterlerdir. Bu karakterler, SQL sorgusunun sonunu veya başını belirtmek, birden fazla SQL sorgusunu birleştirmek, SQL sorgusunu yorumlamak veya SQL sorgusunda arama yapmak gibi işlevlere sahiptir. Bu nedenle, kullanıcı girişlerinde bu karakterlerin kullanımını kontrol etmek ve sınırlandırmak gerekir. Bu işlem, sunucu tarafında veya veritabanı tarafında yapılabilir. Sunucu tarafında, kullanıcı girişlerindeki özel karakterlerin kaçış işlemi (\) ile geçersiz kılınması veya silinmesi sağlanabilir. Veritabanı tarafında ise, veritabanı ayarlarında özel karakterlerin kullanımı kısıtlanabilir veya parametreli sorgular kullanılabilir.
- Veri tabanına sorguları yazmak için değişken kullanmak ve parametreli sorgular ile hazırlanan ifadelerle daha korumalı bir veri çekme işlemi sağlamak: SQL Injection saldırılarında, saldırganlar genellikle web uygulamasının veritabanına gönderdiği SQL sorgularını değiştirerek veri tabanındaki verileri elde etmeye çalışırlar. Bu nedenle, web uygulamalarının veritabanına gönderdiği SQL sorgularının güvenli olması gerekir. Bu amaçla, veritabanına sorguları yazmak için değişken kullanmak ve parametreli sorgular ile hazırlanan ifadelerle daha korumalı bir veri çekme işlemi sağlamak gerekir. Değişken kullanmak, SQL sorgusunun sabit bir yapıda olmasını ve kullanıcı girişlerinin SQL sorgusunun bir parçası olmamasını sağlar. Parametreli sorgular ise, SQL sorgusunun yapısını ve parametrelerini ayrı ayrı tanımlar ve kullanıcı girişlerinin SQL sorgusunu etkilemesini önler. Bu sayede, SQL sorgusunun manipüle edilmesi zorlaşır ve SQL Injection saldırılarına karşı bir koruma sağlanır.
- Parametreleştirmeye benzer şekilde stored procedure yapısı kullanılarak sorgular değişken yapısına bağlanabilir: Stored procedure, veritabanında saklanan ve tekrar tekrar kullanılabilen SQL sorgularıdır. Stored procedure kullanmak, SQL Injection saldırılarına karşı bir başka önlemdir. Stored procedure, parametreli sorgulara benzer şekilde, SQL sorgusunun yapısını ve parametrelerini ayrı ayrı tanımlar ve kullanıcı girişlerinin SQL sorgusunu etkilemesini önler. Ayrıca, stored procedure, veritabanı tarafında çalıştığı için, web uygulamasının veritabanına gönderdiği SQL sorgularını gizler ve saldırganların SQL sorgusunu görmesini engeller. Bu sayede, SQL sorgusunun manipüle edilmesi zorlaşır ve SQL Injection saldırılarına karşı bir koruma sağlanır.
- Çıkan veri tabanı yamalarını kurmak ve işletim sistemini güncel tutmak: SQL Injection saldırılarına karşı alınabilecek önlemlerden biri de, veritabanı ve işletim sisteminin güncel olmasıdır. Veritabanı ve işletim sisteminde zaman zaman güvenlik açıkları ortaya çıkabilir. Bu açıklar, saldırganların SQL Injection saldırıları yapmasına olanak tanıyabilir. Bu nedenle, veritabanı ve işletim sisteminin güncel yazılımlarını kullanmak ve güvenlik açıklarını düzeltmek için çıkan yamaları kurmak gerekir. Bu sayede, SQL Injection saldırılarına karşı bir koruma sağlanır.
- Gereksiz deyimler varsa kullanımı için ayrıcalıklı erişim yetki seviyeleri düzenlemek: SQL Injection saldırılarına karşı alınabilecek önlemlerden biri de, veritabanı kullanıcı izinlerinin sıkı bir şekilde yönetilmesidir. Veritabanında, farklı SQL deyimleri farklı işlevlere sahiptir. Örneğin, SELECT deyimi veri tabanından veri çekmek, UPDATE deyimi veri tabanındaki verileri güncellemek, INSERT deyimi veri tabanına yeni veri eklemek, DELETE deyimi veri tabanındaki verileri silmek için kullanılır. Bu deyimlerden bazıları, SQL Injection saldırılarında daha fazla zarar verebilir. Örneğin, DELETE deyimi veri tabanındaki tüm verileri silerek veri kaybına yol açabilir. Bu nedenle, veritabanında gereksiz deyimler varsa kullanımı için ayrıcalıklı erişim yetki seviyeleri düzenlemek gerekir. Bu işlem, web uygulamasının veritabanına bağlandığı kullanıcı hesabının izinlerini kısıtlamak veya veritabanında farklı kullanıcı hesapları oluşturmak şeklinde yapılabilir. Örneğin, bir web sitesinde sadece SELECT sorguları çalışacak ise, web uygulamasının veritabanına bağlandığı kullanıcı hesabının sadece SELECT iznine sahip olması sağlanabilir. Bu sayede, web uygulamasının veritabanına gönderdiği SQL sorgularının sadece veri çekmesi sağlanır ve veri tabanındaki verilerin değiştirilmesi veya silinmesi engellenir. Ayrıca, veritabanına gerektiğinde yönetici düzeyinde erişim sağlanmalıdır. Bu işlem, veritabanında farklı bir kullanıcı hesabı oluşturarak ve bu hesabın tüm izinlere sahip olmasını sağlayarak yapılabilir. Bu sayede, veritabanında gerekli işlemler yapılabilir ve veritabanının yönetimi kolaylaşır.
- Verileri korumak için şifreleme algoritmaları kullanmak: SQL Injection saldırılarına karşı alınabilecek önlemlerden biri de, veritabanındaki verilerin şifrelenmesidir. Veritabanında saklanan veriler, hassas veya gizli bilgiler içerebilir. Örneğin, kullanıcı adları, şifreler, kredi kartı numaraları, kişisel bilgiler gibi veriler, veritabanında şifreli olarak saklanmalıdır. Bu sayede, SQL Injection saldırıları sonucunda veritabanındaki veriler ele geçirilse bile, verilerin anlamlı olması engellenir. Verileri korumak için şifreleme algoritmaları kullanmak, veritabanı tarafında veya web uygulaması tarafında yapılabilir. Veritabanı tarafında, veritabanı ayarlarında şifreleme seçeneği aktif edilebilir veya veritabanı fonksiyonları ile veriler şifrelenebilir. Web uygulaması tarafında ise, web uygulamasının veritabanına gönderdiği veya veritabanından aldığı verileri şifrelemek veya çözmek için programlama dillerinin sağladığı şifreleme kütüphaneleri kullanılabilir.
- Hata mesajları düzenlenerek gereğinden fazla açıklama yapılmamalıdır: SQL Injection saldırılarına karşı alınabilecek önlemlerden biri de, hata mesajlarının düzenlenmesidir. Web uygulamalarında, SQL sorguları çalıştırılırken veya veritabanı ile iletişim kurulurken bazen hata mesajları ortaya çıkabilir. Bu hata mesajları, web uygulamasının veya veritabanının yapısı, sürümü, tablo adları, sütun adları, veri tipleri gibi bilgileri içerebilir. Bu bilgiler, saldırganlar için faydalı olabilir. Saldırganlar, bu bilgileri kullanarak SQL Injection saldırılarını daha etkili bir şekilde yapabilirler. Bu nedenle, hata mesajları düzenlenerek gereğinden fazla açıklama yapılmamalıdır. Bu işlem, web uygulamasının veya veritabanının ayarlarında hata mesajlarının görünürlüğünü kısıtlamak veya hata mesajlarını özelleştirmek şeklinde yapılabilir. Örneğin, web uygulamasında hata mesajları yerine kullanıcı dostu mesajlar gösterilebilir veya hata mesajları kayıt altına alınabilir. Bu sayede, SQL Injection saldırılarına karşı bir koruma sağlanır.
MAN IN THE MIDDLE (MITM) ATAĞI
Man in the middle (MITM) atağı, bir saldırganın iki bilgisayar arasındaki iletişimi kesintiye uğratıp, kendini onlardan biri gibi göstererek verileri izlemesi veya değiştirmesi anlamına gelir. Örneğin, bir istemci bir sunucuyla güvenli bir bağlantı kurmak istediğinde, saldırgan bu bağlantıyı ele geçirip, istemciye kendi sertifikasını sunarak onunla şifreli bir iletişim kurabilir. Bu şekilde, istemci sunucuyla konuştuğunu sanırken, aslında saldırganla konuşmaktadır. Saldırgan, istemcinin gönderdiği verileri okuyabilir, değiştirebilir veya başka bir yere yönlendirebilir. Aynı şekilde, saldırgan sunucuya da kendi sertifikasını sunarak onunla şifreli bir iletişim kurabilir. Bu şekilde, sunucu istemciyle konuştuğunu sanırken, aslında saldırganla konuşmaktadır. Saldırgan, sunucunun gönderdiği verileri de okuyabilir, değiştirebilir veya başka bir yere yönlendirebilir. Böylece, saldırgan iki bilgisayar arasındaki iletişimin tam kontrolünü elinde tutar ve onları kandırır. Bu, ortadaki adam (MITM) olarak adlandırılan saldırganın rolüdür.
MITM atağı, çok tehlikeli bir atak türüdür, çünkü saldırgan kişisel bilgilere (şifreler, hesaplar, kredi kartı bilgileri vb.) erişebilir, verileri bozabilir veya sahte veriler gönderebilir. Bu, hem istemcinin hem de sunucunun güvenliğini ve gizliliğini tehlikeye atar. MITM atağı, hem yerel ağda hem de uzak ağda yapılabilir. Yerel ağda, saldırgan ağ trafiğini dinleyerek veya ARP zehirleme gibi tekniklerle ağ cihazlarının MAC adreslerini değiştirerek MITM atağı yapabilir. Uzak ağda, saldırgan DNS zehirleme, sahte sertifika, SSL şeritleme gibi tekniklerle MITM atağı yapabilir. MITM atağından korunmak için, güvenli protokoller (HTTPS, SSL, TLS vb.) kullanmak, sertifikaları doğrulamak, ağ trafiğini şifrelemek, güvenli VPN servisleri kullanmak gibi önlemler alınabilir.
MITM Saldırı Türleri
Sahte Erişim Noktası (Fake Access Point)
Sahte erişim noktası, bir siber saldırı türüdür. Bu saldırıda, saldırgan, gerçek bir Wi-Fi ağını taklit ederek sahte bir Wi-Fi ağını kurar. Böylece, kullanıcılar gerçek ağa bağlı olduklarını sanarak sahte ağa bağlanırlar. Saldırgan, bu sayede kullanıcıların ağ üzerinden yaptıkları tüm işlemleri izleyebilir, verilerini çalabilir veya değiştirebilir.
Sahte erişim noktası saldırısının nasıl yapıldığını şöyle anlatabiliriz:
- Saldırgan, ücretsiz ve popüler Wi-Fi erişimine sahip bir yer seçer. Örneğin, bir havaalanı, kütüphane veya kafe.
- Saldırgan, gerçek ağ ile aynı adı (SSID) taşıyan sahte bir erişim noktası oluşturur. Bunu yapmak için, bir telefon, dizüstü bilgisayar, taşınabilir yönlendirici veya tablet gibi herhangi bir cihazı kullanabilir.
- Saldırgan, gerçek ağa bağlı olan kullanıcıları sahte ağına yönlendirmek için, de-authentication adı verilen bir yöntemle gerçek ağın sinyalini keser. Bu yöntemle, gerçek ağa bağlı olan cihazlara sahte bir mesaj göndererek ağdan ayrılmalarını ister.
- Saldırgan, sahte ağının sinyalini güçlendirerek, kullanıcıların gerçek ağ yerine sahte ağa bağlanmalarını sağlar. Bazı cihazlar, otomatik olarak en güçlü sinyali buldukları için, sahte ağa bağlanırlar.
- Saldırgan, sahte ağına bağlanan kullanıcılardan, ağa erişmek için bir parola veya diğer temel bilgileri girmelerini isteyen sahte bir oturum açma sayfası gösterir. Bu sayfayı, gerçek ağın oturum açma sayfasına çok benzetecek şekilde tasarlar. Kullanıcılar, bu sayfaya giriş bilgilerini girdiklerinde, saldırgan bu bilgileri ele geçirir.
- Saldırgan, sahte ağına bağlı olan kullanıcıların, internet üzerinde yaptıkları her şeyi görebilir, verilerini okuyabilir, değiştirebilir veya yönlendirebilir. Örneğin, kullanıcıların sosyal medya hesaplarına, banka hesaplarına, e-posta hesaplarına girmelerini isteyebilir ve bu hesapların şifrelerini çalabilir. Ayrıca, kullanıcıların gördüğü web sayfalarını değiştirebilir, sahte reklamlar veya mesajlar gösterebilir, zararlı yazılımlar indirmelerini sağlayabilir.
Sahte erişim noktası saldırısından korunmak için, şu önlemleri alabilirsiniz:
- Bilmediğiniz veya güvenmediğiniz Wi-Fi ağlarına bağlanmamaya çalışın. Özellikle, aynı adı taşıyan birden fazla ağ olduğunda, dikkatli olun.
- Wi-Fi ağlarına bağlanırken, HTTPS protokolünü kullanan web sitelerini tercih edin. Bu protokol, verilerinizi şifreleyerek, saldırganların okumasını veya değiştirmesini zorlaştırır. Web sitelerinin adres çubuğunda, bir kilit simgesi ve HTTPS yazısı görünüyorsa, bu protokolü kullandıkları anlamına gelir.
- Wi-Fi ağlarına bağlanırken, VPN (Sanal Özel Ağ) hizmetleri kullanın. Bu hizmetler, verilerinizi şifreleyerek, saldırganların erişmesini engeller. Ayrıca, ağ trafiğinizi başka bir sunucuya yönlendirerek, gerçek konumunuzu ve kimliğinizi gizler.
- Wi-Fi ağlarına bağlanırken, güvenlik yazılımları kullanın. Bu yazılımlar, zararlı yazılımları, sahte web sitelerini, sahte erişim noktalarını tespit ederek, sizi uyarır ve korur.
- Wi-Fi ağlarına bağlanırken, önemli işlemler yapmamaya veya önemli bilgiler paylaşmamaya çalışın. Örneğin, banka hesabınıza girmemek, kredi kartı bilgilerinizi vermemek, şifrelerinizi değiştirmemek gibi. Bu işlemleri, güvendiğiniz ağlarda veya kendi mobil veri bağlantınızda yapın.
ARP Sahtekârlığı (ARP Spoofing)
ARP Sahtekârlığı (ARP Spoofing), bir ağdaki cihazların kimliklerini taklit ederek veri akışını bozmak veya ele geçirmek için kullanılan bir saldırı yöntemidir. Bu saldırıda, saldırgan, ağdaki diğer cihazlara kendisini farklı bir cihaz olarak tanıtmak için ARP protokolünü kötüye kullanır. ARP protokolü, bir IP adresinin hangi MAC adresine karşılık geldiğini belirlemek için kullanılan bir iletişim protokolüdür. IP adresi, bir cihazın ağdaki konumunu belirtirken, MAC adresi, bir cihazın fiziksel kimliğini belirtir.
Saldırgan, ARP sahtekârlığı yapmak için, ağdaki bir cihazın IP adresini kendi MAC adresiyle eşleştiren sahte ARP yanıtları gönderir. Bu şekilde, saldırganın cihazı, ağdaki diğer cihazlar tarafından o IP adresine sahip cihaz olarak kabul edilir. Örneğin, saldırgan, ağ geçidinin IP adresini kendi MAC adresiyle eşleştiren sahte ARP yanıtları göndererek, ağdaki tüm cihazların ağ geçidi olarak kendisini görmesini sağlayabilir. Bu durumda, saldırgan, ağdaki tüm veri trafiğini izleyebilir, değiştirebilir veya engelleyebilir. Bu, saldırganın, cihazların gönderdiği veya aldığı hassas bilgileri, örneğin PII (Personal Identifiable Information) kişisel tanımlama bilgilerini, ele geçirmesine veya kötü amaçlı yazılım bulaştırmasına olanak tanır.
ARP sahtekârlığı, ağ güvenliğini tehdit eden ciddi bir sorundur. Bu saldırıyı önlemek veya tespit etmek için, ağ yöneticileri, ARP tablolarını izleyebilir, statik ARP girişleri kullanabilir, ARP sahtekârlığı tespit yazılımları kurabilir veya ağdaki cihazları şifreleyebilir.
DNS Sahtekârlığı (DNS Spoofing)
DNS sahtekârlığı, bir saldırganın internet kullanıcılarını yanlış web sitelerine yönlendirmek için DNS sunucularını veya istemcilerini manipüle ettiği bir siber güvenlik tehdididir. DNS, bir web sitesinin adını örneğin, www.google.com karşılık gelen IP adresine örneğin, 172.217.18.238 dönüştüren bir sistemdir. Bu sayede, kullanıcılar web sitelerine kolayca erişebilirler.
DNS sahtekârlığı saldırısında, saldırgan DNS sunucularına veya istemcilerine sahte DNS kayıtları gönderir. Bu kayıtlar, kullanıcının girmek istediği web sitesinin adını yanlış bir IP adresine işaret eder. Böylece, kullanıcı saldırganın kontrol ettiği sahte bir web sitesine yönlendirilir. Bu web sitesi, kullanıcının güvendiği web sitesinin kopyası olabilir veya kullanıcıyı başka bir web sitesine yönlendirebilir. Saldırgan, bu şekilde kullanıcının kişisel bilgilerini, şifrelerini, kredi kartı numaralarını veya diğer hassas verilerini çalabilir veya zararlı yazılım bulaştırabilir.
Örneğin, saldırgan DNS sahtekârlığı yaparak kullanıcıyı www.facebook.com yerine www.faceb00k.com gibi sahte bir web sitesine yönlendirebilir. Bu web sitesi, Facebook'un tasarımını ve işlevselliğini taklit edebilir. Kullanıcı, bu web sitesine giriş yapmaya çalıştığında, saldırgan kullanıcının e-posta adresini ve şifresini ele geçirebilir. Saldırgan, bu bilgileri kullanarak kullanıcının gerçek Facebook hesabına erişebilir veya başka amaçlar için kullanabilir.
DNS sahtekârlığı, internet kullanıcılarının güvenliğini ve gizliliğini tehlikeye atan ciddi bir sorundur. Bu saldırıdan korunmak için, kullanıcıların şunları yapması önerilir:
- Güvenilir bir DNS sunucusu kullanmak veya DNSSEC gibi DNS güvenlik protokollerini etkinleştirmek.
- Web sitelerinin HTTPS protokolünü kullandığından ve güvenli bir bağlantı simgesi gösterdiğinden emin olmak.
- Web sitelerinin adreslerini doğru yazdığından ve sahte web sitelerinin işaretlerine dikkat etmek (örneğin, yazım hataları, farklı uzantılar, şüpheli içerik).
- Antivirüs yazılımı ve güvenlik duvarı gibi güvenlik araçlarını güncel tutmak ve düzenli olarak taramak.
MITM Saldırı Teknikleri
MITM saldırıları için çeşitli teknikler vardır. Bunlardan bazıları şunlardır:
- Paket koklama: Saldırgan, ağ üzerinden geçen veri paketlerini yakalar ve içeriğini okur. Bu şekilde kurbanların kimlik bilgileri, şifreleri, e-postaları gibi hassas verileri çalabilir.
- Paket enjeksiyonu: Saldırgan, ağ üzerinden geçen veri paketlerini değiştirerek kendi istediği verileri ekler veya çıkarır. Bu şekilde kurbanların web sitelerine erişimini engelleyebilir, sahte sayfalara yönlendirebilir, zararlı yazılım bulaştırabilir veya veri bütünlüğünü bozabilir.
- Oturum çalma: Saldırgan, kurbanların web sitelerine giriş yaptıktan sonra oluşturulan oturum anahtarlarını veya çerezlerini ele geçirir. Bu şekilde kurbanların web sitelerindeki hesaplarına erişebilir, işlemler yapabilir veya kişisel bilgilerini alabilir.
- SSL açma: Saldırgan, kurbanların web sitelerine güvenli bir şekilde bağlanmalarını engelleyerek SSL/TLS şifrelemesini kırar. Bu şekilde kurbanların verilerini şifresiz bir şekilde görebilir, değiştirebilir veya sahte sertifikalar sunabilir.
Paket Koklama (Sniffing)
Paket koklama, bir ağ üzerindeki veri paketlerini yakalayıp analiz etmek için kullanılan bir yöntemdir. Bu paketler, internet üzerinden gönderilen ve alınan bilgileri içerir. Paket koklayıcılar, bu paketleri izlemek ve kaydetmek için hem donanım hem de yazılım araçlarıdır.
Paket koklama, ağ yöneticileri tarafından ağ performansını izlemek, sorunları gidermek ve güvenliği sağlamak için kullanılabilir. Ancak, paket koklama aynı zamanda kötü niyetli kişiler tarafından da kullanılabilir. Bu kişiler, paket koklama ile ağ üzerindeki hassas bilgilere erişebilir, ağ trafiğini bozabilir veya sahte paketler göndererek ağın çalışmasını engelleyebilir.
Paket koklama saldırıları iki türlü olabilir: aktif ve pasif. Aktif koklama, ağ üzerindeki paketleri değiştirmek, yönlendirmek veya engellemek için kullanılır. Bu şekilde, saldırgan ağın kontrolünü ele geçirebilir veya ağdaki diğer cihazları taklit edebilir. Pasif koklama, ağ üzerindeki paketleri sadece izlemek ve kaydetmek için kullanılır. Bu şekilde, saldırgan ağdaki bilgileri gizlice çalabilir veya izleyebilir.
Paket koklama, sık kullanılan ve tehlikeli bir tekniktir. Bu nedenle, ağ güvenliğine dikkat etmek ve paket koklama saldırılarını önlemek için bazı önlemler almak gerekir. Bunlardan bazıları şunlardır:
- Güvenilir bir VPN (Sanal Özel Ağ) kullanmak. VPN, ağ trafiğini şifreleyerek paket koklayıcıların içeriğini görmesini engeller.
- HTTPS (Hiper Metin Aktarım Protokolü Güvenli) siteleri kullanmak. HTTPS, web siteleri ile tarayıcı arasındaki iletişimi şifreleyerek paket koklayıcıların içeriğini görmesini engeller.
- Güçlü bir antivirüs programı kullanmak. Antivirüs, bilgisayara bulaşabilecek kötü amaçlı yazılımları tespit ederek paket koklayıcıların çalışmasını engeller.
Paket Enjeksiyonu
Paket enjeksiyonu, bir ağ saldırısı türüdür. Bu saldırıda, saldırgan, internete bağlı bir hedefin bilgisayarına zarar vermek veya bilgilerini çalmak için sahte veya değiştirilmiş paketler gönderir. Paket, bir bilgisayarın diğer bir bilgisayara gönderdiği veri birimidir. Örneğin, bir web sitesine girdiğinizde, bilgisayarınız web sunucusuna bir paket gönderir ve web sunucusu da size bir paket gönderir.
Paket enjeksiyonu yapmak için, saldırgan önce hedefin ağ trafiğini dinlemelidir. Bu, hedefin hangi web sitelerine girdiğini, hangi dosyaları indirdiğini, hangi mesajları gönderdiğini veya aldığını görmek için yapılır. Saldırgan, ağ cihazlarını dinleme moduna alarak, normalde kendisine gelmeyen paketleri de alabilir. Bu mod, ağdaki tüm paketleri görmek için kullanılır.
Saldırgan, hedefin ağ trafiğini dinledikten sonra, hedefe zararlı paketler göndermeye başlar. Bu paketler, hedefin indirmek istediği dosyaları taklit edebilir, hedefin gönderdiği veya aldığı mesajları değiştirebilir, hedefin bilgisayarına virüs bulaştırabilir veya hedefin bilgilerini çalabilir. Saldırgan, hedefin fark etmemesi için paketleri orijinal paketlere benzetmeye çalışır. Örneğin, hedef a.exe isimli bir programı indirmek istiyorsa, saldırgan da a.exe isimli ama zararlı bir programı hedefe gönderir. Hedef, bu programı indirip çalıştırdığında, bilgisayarına zararlı yazılım enjekte edilmiş olur.
Paket enjeksiyonu, ağ güvenliğini tehdit eden ciddi bir saldırıdır. Bu saldırıdan korunmak için, güvenilir kaynaklardan dosya indirmek, şifreli bağlantılar kullanmak, güncel antivirüs programları yüklemek ve ağ trafiğini izlemek önemlidir. Ayrıca, paket enjeksiyonu yapan saldırganları tespit etmek ve engellemek için çeşitli araçlar da mevcuttur.
Oturum Çalma
Oturum çalma, bir kullanıcının web sitesine giriş yaptığı zaman oluşturulan oturum açma belirteçlerini (session token) ele geçirerek, kullanıcının kimliğine bürünmek ve yetkisiz erişim sağlamak anlamına gelir. Oturum açma belirteçleri, web sunucusunun ve tarayıcının birbirini tanımasını sağlayan, genellikle rastgele üretilen bir dizi karakterdir. Bu belirteçler, URL'de, HTTP isteğinin başlığında veya gövdesinde, ya da çerez (cookie) olarak tarayıcıda saklanabilir.
Oturum çalma saldırısı yapmak için, saldırganın öncelikle oturum açma belirteçlerini ele geçirmesi gerekir. Bunun için çeşitli yöntemler vardır. En yaygın olanları şunlardır:
- Oturum sabitleme (session fixation): Saldırgan, kullanıcıya bilinen bir oturum açma belirteci gönderir, örneğin bir e-posta linki içinde. Kullanıcı bu linke tıkladığında, saldırganın belirlediği belirteçle oturum açar. Saldırgan da aynı belirteci kullanarak oturumu ele geçirir.
- Oturum yan çalma (session sidejacking): Saldırgan, paket yakalama (packet sniffing) yöntemiyle, iki taraf arasındaki ağ trafiğini izleyerek oturum açma belirteçlerini okur. Birçok web sitesi, saldırganların şifreyi görmesini engellemek için giriş sayfalarında SSL şifrelemesi kullanır, ancak kimlik doğrulandıktan sonra site geri kalanı için şifreleme kullanmaz. Bu durumda, saldırgan çerezleri (cookie) çalarak oturum çalma saldırısı yapabilir.
- İstemci tarafı saldırılar (client-side attacks): Saldırgan, kötü amaçlı kod veya programlar kullanarak, istemci tarafında oturum açma belirteçlerini ele geçirebilir. Örneğin, XSS (cross-site scripting) saldırısı, saldırganın kötü amaçlı bir JavaScript kodu göndermesini ve bu kodun kullanıcının tarayıcısında çalışmasını sağlar. Bu kod, oturum açma belirteçlerini saldırgana gönderebilir.
- Ortadaki adam saldırısı (man-in-the-middle attack): Saldırgan, A ve C arasındaki iletişime B noktasından müdahale ederek, A ve C'nin IP paketlerini kendi makinesine yönlendirir. Böylece, A ve C arasındaki veri alışverişini izleyebilir ve değiştirebilir. Bu saldırıda, saldırgan oturum açma belirteçlerini değiştirerek oturumu ele geçirebilir.
- Tarayıcıdaki adam saldırısı (man-in-the-browser attack): Saldırgan, tarayıcıda çalışan bir zararlı yazılım (malware) kullanarak, tarayıcının işlevlerini değiştirir ve oturum açma belirteçlerini ele geçirir. Bu saldırıda, saldırgan tarayıcının güvenlik önlemlerini aşabilir.
Oturum çalma saldırılarını önlemek için, web sitelerinin ve kullanıcıların bazı önlemler alması gerekir. Bunlar arasında şunlar sayılabilir:
- Web siteleri, oturum açma belirteçlerini rastgele ve güvenli bir şekilde üretmeli, belirteçleri şifrelemeli, belirteçlerin süresini kısa tutmalı, belirteçleri düzenli olarak yenilemeli, belirteçleri IP adresi veya tarayıcı bilgisiyle ilişkilendirmeli, belirteçleri URL'de değil çerezde saklamalı, çerezlere HttpOnly ve Secure bayraklarını eklemeli, tüm site için SSL/TLS şifrelemesi kullanmalıdır.
- Kullanıcılar, güvenli olmayan ağlarda (örneğin açık Wi-Fi) hassas işlemler yapmamalı, tarayıcılarını ve işletim sistemlerini güncel tutmalı, antivirüs ve güvenlik duvarı yazılımları kullanmalı, şüpheli e-posta veya linklere tıklamamalı, tarayıcı çerezlerini düzenli olarak temizlemelidir.
SSL Çalma (SSL Strip)
SSL Çalma (SSL Strip), bir web sitesinin güvenli HTTPS protokolünü güvensiz HTTP protokolüne dönüştürerek, aradaki trafiği dinlemek ve değiştirmek için kullanılan bir saldırı yöntemidir. Bu yöntem, saldırganın ağ üzerindeki paketleri yakalayıp, HTTPS bağlantılarını HTTP bağlantılarına çevirmesini sağlar. Böylece saldırgan, web sitesi ile kullanıcı arasındaki verileri okuyabilir ve manipüle edebilir.
HTTP ve HTTPS, web sitelerine erişmek için kullanılan iki farklı protokoldür. HTTP, açık metin olarak iletilen ve şifrelenmeyen bir protokoldür. HTTPS ise SSL (Secure Sockets Layer) adı verilen bir güvenlik katmanı kullanarak, verileri şifreleyen ve kimlik doğrulayan bir protokoldür. SSL, web sitesinin sertifikasını kontrol ederek, kullanıcının gerçekten doğru siteye bağlandığından emin olur. Ayrıca, verileri şifreleyerek, araya giren bir saldırganın verileri okumasını veya değiştirmesini engeller.
Son yıllarda, daha da güvenli bir protokol olan HSTS (HTTP Strict Transport Security) kullanılmaya başlanmıştır. HSTS, web sitesinin yalnızca HTTPS protokolü üzerinden erişilebileceğini belirten bir başlık göndererek, HTTP protokolünü tamamen devre dışı bırakır. Böylece, SSL Çalma gibi saldırı yöntemlerinin işe yaramasını önler.
SSL Çalma saldırısının nasıl çalıştığını anlamak için, aşağıdaki adımları takip edebilirsiniz:
1. Saldırgan, aynı ağ üzerindeki kullanıcının paketlerini yakalamak için bir araç kullanır. Bu araç, ARP spoofing, DNS spoofing, ICMP redirect gibi tekniklerle ağ trafiğini saldırganın bilgisayarına yönlendirir.
2. Saldırgan, SSL Strip adı verilen bir araç kullanarak, HTTPS bağlantılarını HTTP bağlantılarına dönüştürür. Bu araç, web sitesinden gelen HTTPS bağlantılarını yakalar ve HTTP bağlantıları olarak kullanıcıya gönderir. Aynı şekilde, kullanıcıdan gelen HTTP bağlantılarını yakalar ve HTTPS bağlantıları olarak web sitesine gönderir. Böylece, saldırgan hem web sitesi hem de kullanıcı ile arada bir köprü oluşturur.
3. Saldırgan, HTTP bağlantıları üzerinden geçen verileri okuyabilir ve değiştirebilir. Örneğin, kullanıcının girdiği kullanıcı adı ve şifreyi çalabilir, web sitesinin içeriğini değiştirebilir, sahte sayfalar gösterebilir, zararlı kodlar enjekte edebilir vb.
SSL Çalma saldırısından korunmak için, aşağıdaki önlemleri alabilirsiniz:
- Web sitelerine erişirken, adres çubuğunda HTTPS protokolünün ve kilit simgesinin olduğundan emin olun. Eğer HTTP protokolü görürseniz, güvenli olmayan bir bağlantı olduğunu anlayın ve hassas bilgilerinizi girmeyin.
- Web sitelerinin HSTS protokolünü desteklediğinden emin olun. HSTS protokolü, web sitesinin yalnızca HTTPS protokolü üzerinden erişilebileceğini belirtir ve HTTP protokolünü reddeder. Böylece, SSL Çalma saldırısının işe yaramasını engeller.
- Güvenilir olmayan ağlara bağlanmamaya çalışın. Özellikle, açık veya şifresiz Wi-Fi ağlarına bağlanırken, saldırganların paketlerinizi yakalamasına izin vermemiş olursunuz. Eğer bağlanmak zorunda kalırsanız, VPN (Virtual Private Network) gibi güvenli bir bağlantı yöntemi kullanın.
- Tarayıcınızın ve işletim sisteminizin güncel olduğundan emin olun. Güncellemeler, güvenlik açıklarını kapatmak ve yeni protokolleri desteklemek için önemlidir. Eski sürümler, saldırganların daha kolay saldırmasına neden olabilir.
MITM Araçları
MITM (Man-in-the-Middle) atakları, bir bilgisayar korsanının iki taraf arasındaki iletişimi izleyebildiği, yönlendirebildiği veya değiştirebildiği bir tür siber saldırıdır. Bu saldırılar, hassas verileri çalmak, sahte mesajlar göndermek veya trafiği başka bir siteye yönlendirmek gibi amaçlarla yapılabilir. MITM ataklarını gerçekleştirmek için kullanılan bazı araçlar şunlardır:
- bettercap: WiFi, Bluetooth, kablosuz HID ve IPv4 ve IPv6 ağları üzerinde keşif ve MITM saldırıları yapmak için tasarlanmış bir İsviçre çakısıdır. Hem komut satırı hem de web arayüzü sunar.
- hetty: HTTP ve HTTPS trafiğini yakalamak, filtrelemek ve değiştirmek için kullanılan bir web arayüzüdür. Ayrıca, web uygulamalarının güvenlik testi için faydalı olabilecek bazı özellikler sunar.
- proxy.py: HTTP ve HTTPS trafiğini yakalamak, filtrelemek ve değiştirmek için kullanılan bir Python kütüphanesi ve komut satırı aracıdır. Ayrıca, web sunucusu, ters proxy, DNS çözümleyici, TLS araya girme gibi ek özellikler sağlar.
- burp: Web uygulamalarının güvenlik testi için kullanılan bir yazılım paketidir. HTTP ve HTTPS trafiğini yakalamak, filtrelemek, değiştirmek ve tekrar oynatmak için araçlar sunar. Ayrıca, web zafiyet taraması, otomatik saldırılar, içerik keşfi gibi ek özellikler sağlar.
- mitmproxy: HTTP ve HTTPS trafiğini yakalamak, filtrelemek, değiştirmek ve tekrar oynatmak için kullanılan bir komut satırı aracıdır. Ayrıca, web arayüzü, Python API, eklenti desteği, TLS araya girme gibi ek özellikler sunar.
- ettercap: LAN üzerinde MITM saldırıları için kullanılan bir ağ güvenliği aracıdır. HTTP ve HTTPS trafiğini yakalamak, filtrelemek, değiştirmek ve tekrar oynatmak için araçlar sunar. Ayrıca, protokol analizi, ağ ve sunucu keşfi, şifre kırma, ARP zehirlenmesi gibi ek özellikler sunar.
Bettercap Aracı
Bettercap, bir ağdaki cihazlar arasındaki veri akışını izlemek, değiştirmek veya engellemek için kullanılan bir güvenlik aracıdır. Bu, ağ güvenliğini test etmek, hassas bilgileri çalmak veya diğer kötü amaçlı eylemleri gerçekleştirmek için yapılabilir. Bu tür saldırılara Man-in-the-Middle (MITM) saldırıları denir.
Bettercap, Go adı verilen bir programlama dili ile yazılmıştır. Go, Google tarafından geliştirilen, yüksek performanslı ve basit bir dil olarak tanımlanabilir. Go, hem açık kaynaklı hem de kapalı kaynaklı işletim sistemlerinde çalışabilir.
Bettercap, farklı ağ türlerinde ve cihazlarda çalışabilir. Wi-Fi ve Ethernet ağlarında, ağdaki cihazların IP adreslerini ve açık portlarını bulabilir. Bluetooth cihazlarında, yakındaki cihazları tespit edebilir ve bağlantılarını bozabilir.
Bettercap, Kali Linux adı verilen bir Linux dağıtımında varsayılan olarak yüklü değildir. Kali Linux, güvenlik testi ve etik hackleme için tasarlanmış bir işletim sistemidir. Bettercap'ı Kali Linux'a kurmak için, komut satırında sudo apt-get install bettercap komutunu kullanabilirsiniz. Bu komut, Bettercap'ı indirir ve yükler.
7. UYGULAMA
Bettercap Aracının Kullanımı ve Çalıştırılması
Aşağıdaki adımları takip ederek, bettercap aracını çalıştırın.
1. Adım: Bettercap aracını kurmak için, Kali Linux terminalinde sudo apt-get install bettercap komutunu yazın. Kurulum tamamlandıktan sonra, sudo bettercap iface eth0 komutu ile aracı çalıştırın. Bu komut, aracın eth0 adlı ethernet arayüzünü kullanarak ağa bağlanmasını sağlar. Eğer başka bir arayüz kullanmak isterseniz, iface parametresini değiştirebilirsiniz.
2. Adım: Aracın hangi servisleri sunduğunu ve hangi komutların nasıl kullanıldığını görmek için help komutunu yazın. Bu komut, aracın tüm modüllerini, parametrelerini ve seçeneklerini listeler. Ayrıca, help <modül adı> komutu ile belirli bir modül hakkında daha fazla bilgi alabilirsiniz.
3. Adım: Ağdaki cihazları tespit etmek ve MAC adresleri ile IP adresleri gibi bilgileri almak için net.probe on komutunu yazın. Bu komut, ağdaki cihazlara UDP paketleri göndererek, onların varlığını kontrol eder. Bu işlem bir süre devam eder ve sonuçlar araç tarafından kaydedilir.
4. Adım: net.show komutu ile net.probe modülünün sonuçlarını bir tablo halinde görüntüleyin. Bu tabloda, cihazların IP adresleri, MAC adresleri, ağ isimleri, üretici firmaları gibi bilgiler yer alır. Bu bilgiler, saldırı yapmak istediğiniz hedefi belirlemenize yardımcı olur.
5. Adım: help arp.spoof komutu ile arp.spoof modülünün nasıl çalıştırıldığını ve hangi parametreleri aldığını görün. arp.spoof modülü, ARP spoofing saldırısı yapmanızı sağlar. ARP spoofing saldırısı, ağdaki cihazların ARP tablolarını değiştirerek, onların ağ trafiğini yönlendirmenizi sağlar. Örneğin, bir cihazın internete bağlanmak için kullandığı modemin MAC adresini, sizin bilgisayarınızın MAC adresi ile değiştirirseniz, o cihazın internet trafiği sizin bilgisayarınızdan geçer. Böylece, o cihazın gönderdiği ve aldığı tüm verileri görebilir, değiştirebilir veya engelleyebilirsiniz. arp.spoof modülü, aşağıdaki komutlarla kontrol edilir:
- arp.spoof on: ARP spoofing saldırısını başlatır.
- arp.ban on: ARP spoofing saldırısı sırasında, hedef cihazın ağ ile bağlantısını keser. Bu, hedef cihazın internete erişimini engeller.
- arp.spoof off: ARP spoofing saldırısını durdurur.
- arp.ban off: ARP ban saldırısını durdurur.
arp.spoof modülü, aşağıdaki parametreleri alabilir:
- arp.spoof.fullduplex: Bu parametre true olarak ayarlanırsa, hem hedef cihaza hem de modeme ARP spoofing saldırısı yapılır. Bu, saldırının daha etkili olmasını sağlar.
- arp.spoof.internal: Bu parametre true olarak ayarlanırsa, aynı ağdaki cihazlar arasında ARP spoofing saldırısı yapılır. Bu, ağ içindeki trafiği izlemenizi sağlar. Aksi takdirde, ağ dışındaki trafiği izlersiniz.
- arp.spoof.targets: Bu parametre ile saldırı yapmak istediğiniz cihazların IP adreslerini belirtirsiniz. Birden fazla cihaz belirtmek için, IP adreslerini virgül ile ayırabilirsiniz.
6. Adım: set arp.spoof.fullduplex true ve set arp.spoof.targets <hedef IP> komutları ile arp.spoof modülünün parametrelerini ayarlayın. Burada, <hedef IP> yerine, saldırı yapmak istediğiniz cihazın IP adresini yazın. Örneğin, set arp.spoof.targets 10.0.2.15 gibi. Ardından, arp.spoof on komutu ile saldırıyı başlatın. Saldırı başladığında, araç tarafından log mesajları görüntülenir. Bu mesajlarda, modemin MAC adresi ile hedef cihazın MAC adresinin aynı olduğunu görebilirsiniz. Bu, saldırının başarılı olduğunu gösterir.
7. Adım: Hedef cihazın yaptığı tüm işlemleri izlemek ve verileri yakalamak (sniffing) için net.sniff on komutu ile net.sniff modülünü çalıştırın. Bu modül, ağdaki tüm trafiği analiz eder ve size gösterir. Gelen ve giden web sayfaları, HTTP istekleri, DNS sorguları gibi çok detaylı bilgileri görebilirsiniz. Bu bilgileri kullanarak, hedef cihazın ne yaptığını, hangi sitelere girdiğini, hangi verileri gönderdiğini veya aldığını öğrenebilirsiniz. Ayrıca, bu verileri değiştirerek, hedef cihazı yönlendirebilir, yanlış bilgilere ulaştırabilir veya zararlı kodlar gönderebilirsiniz.
MITM saldırıları, ağdaki cihazların güvenliğini tehdit eden çok tehlikeli saldırılardır. Çünkü saldırgan, ağa bağlı olan herhangi bir cihazın trafiğini ele geçirebilir, izleyebilir ve manipüle edebilir. Saldırganın yapabileceklerinin bir sınırı yoktur. Bu yüzden, ağ güvenliğine dikkat etmek ve saldırılara karşı önlem almak çok önemlidir.