SQL Injection (Enjeksiyon) ByPass Detaylı Bilgi Beyin Fırtınası

JohnDoe

Kıdemli Üye
29 Eyl 2013
2,710
6
Teşkilat
Merhabalar,

Değerli arkadaşlarım, Öncelikle ufak bir bilgi aktarmak istiyorum. Burada yer alan makale tamamen tarafıma ait olmakla beraber bir kaç tane alıntı olsa bile bu alıntılar

mecburi union ve table için alındığını göz önüne alacak olursak mecburi alıntı olduğunu anlamış oluruz. TurkHackTeam.ORG harici hiç bir platform'da mevcut olmayan bu

makale tarafımca özgün olarak sizlerle paylaşmak adına hazırlanmıştır. Okuduğunuz için teşekkür ederim.

Tek tek bilgi aktaracağım. Öncelikle SQL Injection'dan başlayalım ve sonraki aşamalara doğru ilerleyelim.

SQL Injection Nedir ?

Belirtilen bir web sitesine saldırı yapmak için öncelikli olarak kullanılan bir attack saldırısıdır. Verileri kopyalamak veyahutta değiştirmek adına işlem yapılan Injection

sıklıkla kullanılan bir yöntemdir. Web üzerinden bir siteye saldırı yapılacağı zaman etkin bir şekilde kullanılan saldırı metodu'dur.

Örnek vermek gerekirse eğer'ki günümüz'de en çok kullanılan tekniklerden birisidir. SQL Injection konusunda bir çok arkadaşımız tam olarak bilgi sahibi değil. Biz bu

bilgi paylaşımını sırf bu yüzden sizlerle paylaşıyoruz'ki hem bilgimizi çoğaltmak adına sizlerin huzuruna özgün makale yazarak paylaşıyoruz. Hemde sizlerin bir şeyleri

ögrenmenizi istediğimiz için sizlerle ortak bir yolda yürüyoruz. Lütfen bu paylaşımların değerini biliniz. Bir gün olabilir muhakkak size lazım olabilir. Neyin ne olacağını

elbette bilemeyiz fakat ummadığımız bir taş gün gelir baş yarar. Kulak arkası etmemekte fayda olduğunu düşünerek devam ediyorum.

Web uygulamalarındaki güvensiz kodlama yapısından oluşan hatalar'dan yola çıkarak bizlerin'de bu açık zaafiyetlerinden faydalanarak login formu veya tablolama

aşamalarından kullanıcı giriş metodlarına kadar SQL sorgularında kullanıldığı yerlerde SQL komutları eklenmesi ile veritabanı yetkisiz erişim sağlamaktadır.

SQL Injection / Detaylı Açıklama

Web(sunucu) uygulamaları web sitesini ziyaret etmekte olan bir veya birden fazla kullanıcıların web tarayıcıları ile bir veritabanından veri görüntülemelerini sağlarlar.

Veritabanı çoğu web(sunucusu) sitesinde kullanılır. Bilhaslaki ziyaretçilere spesifik bilgilerin sunulması için veri depolama amaçlı'da kullanılabilir.

Kod:
Kullanıcı Bilgileri
Finansal Bilgiler
Ödeme Metodları
Firma İstatistlikleri
Kayıtlı Kullanıcılar

Üst kısımda sizlere vermiş olduğum örnek (var olan tablolar) bir veritabanında bulunabilir. Tabi önemli olan bu tabloları bulmaktır. Hazır ve/ya özel yazılmış olan

script/yazılım uygulamalar ile erişilebilir. SQL Injection; bir web(sunucu) uygulamarı üzerinden arka plandaki veritabanın'da çalıştırılması için SQL komutlarının

gönderilmesidir. Eğer web uygulamasın'da kullanıcı tarafından gelen tüm parametreler doğru olarak filtrelenmiş ise saldırganlar tüm veritabanının içeriğini görebilir ve/ya

silebilir. Şiddetli zararlar vererek mağdur durma düşürebilirler.

Login(giriş) sayfaları destek ve/ya ürün istek gibi formlar yorum/iletişim formları, arama(search) sayfaları, alışveriş(button) sayfaları, dinamik(web) içeriğinin sunulduğu

çeşitli sayfalardır. Bu tip web siteleri SQL Injection saldırılarından etkileniyor olabilir. Tabi kesin diye bir şey yok, deneyerek bunu anlayacağız.

SQL Injection / Basit Örnek 1. Aşama

Normal bir kullanıcının(üye) kendi kullanıcı(user) ve şifre(password) kombinasyonu ile giriş yaptığı bir login(giriş) sayfası düşünelim.

loginekrani.png


Normal kullanıcı bilgilerini gönderdiğinde bu bilgilerden bir SQL sorgusu yaratılarak doğrulama için veritabanına gönderilir. Eğer geçerli ise kullanıcının erişimine izin verilir. Diğer bir deyişle login sayfasını kontrol eden web uygulaması kullanıcı adı şifre kombinasyonunu doğrulamak için planlanmış komutları kullanarak veritabanı ile haberleşir. Doğrulandığında da kullanıcının erişimine izin verilir.

SQL Enjeksiyon ile saldırganlar login formu engelini aşarak arkasındakileri görmek için özel olarak hazırlanmış SQL komutları girerler. Bu sadece eğer kullanıcı tarafından sağlanan girişler doğru olarak filtrelenmiyor ve direk olarak SQL sorgusu ile veritabanına gönderiliyorsa mümkün olabiliyor. SQL Enjeksiyon açıkları saldırganların direk olarak veritabanı ile haberleşmesini sağlarlar.

Bu tip saldırılardan etkilenen teknolojiler ASP, ASP.NET, PHP, JSP ve CGI gibi dinamik script dilleridir. SQL Enjeksiyon saldırısı yapacak olan bir saldırganın tek ihtiyacı olan bir web tarayıcısı, SQL sorguları hakkında bilgidir. SQL Enjeksiyonun basitliği onu popüler yapan en büyük etkendir.

Nasıl olurda bir güvenlik duvarı veya diğer güvenlik mekanizması arkasındaki bir veritabanına direk olarak SQL sorguları geçer? Güvenlik duvarları ve benzer saldırı tespit mekanizmaları tam ölçekli bir SQL enjeksiyon web saldırısına karşı çok az hatta bazen hiç koruma sağlamazlar.

Web sitenizin herkese açık olması gerektiği için güvenlik mekanizmaları web uygulamanıza erişime (genelde port 80/443) izin verecektir. Ve web uygulamasının istenilen bilgileri gösterebilmesi için veritabanına erişim yapabilmesi gerekir.

SQL veya Structured Query Language verileri bir veritabanına depolamanızı, değiştirmenizi ve çağırabilmenizi sağlar. SQL, gerçekten de, bir web uygulamasının (ve kullanıcıların) veritabanı ile etkileşebilmeleri için tek yoldur. Veritabanlarına örnek olarak Oracle, Microsoft Access, MS SQL Server, MySQL ve Filermaker Pro verilebilir.

SQL komutları arasında belli başlı olarak SELECT, INSERT, DELETE ve DROP TABLE sayılabilir. DROP TABLE kelime anlamı olarak da görüleceği gibi belirli isimdeki bir tablonun silinmesini sağlar.

Yukarıdaki login sayfası örneğinde normal bir senaryoda web uygulaması için planlanan SQL komutları aşağıdaki gibi olabilir.

Kod:
SELECT count(*)
FROM kullanici_listesi_tablosu
WHERE kullanici='KULLANICI_ALANI'
AND sifre='SIFRE_ALANI'

Bu SQL komutu veritabanı sunucusunda depolanan bilgi ile kullanıcının girdiğini eşleştirmeyi dener. Çoğu web uygulamasının içine veritabanı ile haberleşebilmesi ve fonksiyonlarını gerçekleştirebilmesi için belirli bazı SQL sorguları gömülür. Eğer web uygulamasının herhangi bir giriş alanı doğru olarak filtrelenmez ise, bir saldırgan ek SQL komutları enjekte ederek web uygulamasının çalıştıracağı SQL komutlarını artırabilir, böylece orjinal dizayn ve fonksiyonun ötesine geçer. Böylece saldırganların veritabanı ile arasında temiz bir haberleşme kanalı kurulacaktır.

Veritabanı(tablo) SQL Injection'dan Etkilenirmi?

SQL Enjeksiyon şu an Internet'te kullanılan en genel uygulama katmanı saldırılarından biridir. SQL Enjeksiyon saldırılarına karşı korunmak kolay olsa da halen bu açıktan etkilenen çok sayıda web uygulaması var. Web Uygulama Güvenliği Konsorsiyum'una (WASC) göre 27 Temmuz 2006 tarihine kadar medyada rapor edilen hack olaylarının %9'u SQL Enjeksiyon saldırılarından kaynaklanmıştı. Araştırmalarımızdan elde ettiğimiz daha güncel veriler web sitelerinin %50'sinin SQL Injection saldırılarından etkilendiğini ortaya koydu.

Eğer programcı değilseniz veya web uygulamanızı siz kodlamadıysanız web sitenizin ve uygulamanızın SQL Enjeksiyondan etkilenip etkilenmediği sorusunu cevaplamak biraz zor olabilir. Bir saldırganın veritabanında depolanmış olan verilerinizi görüp göremeyeceği web sitenizin nasıl kodlandığına bağlı. Kesin olan şey saldırganların etkilenen sistemlerde, sistemi ele geçirmek için veya bilgi edinmek için, istedikleri SQL komutlarını çalıştırabileceğidir.
Eğer düzgün kodlanmadıysa müşteri veya firma verilerinizin ele geçirilmesi riski söz konusudur.

Bir saldırganın nelere erişebileceği de veritabanında ayarlanmış olan güvenlik seviyesine bağlıdır. Veritabanı sadece belirli bazı komutların çalıştırılmasına izin veriyor olabilir. Normalde web uygulamaların ön yüzleri için sadece okuma izni verilir. Saldırgan sistemde veya verilerde değişiklik yapamasada hala değerli bilgileri okuyabilir.

Bir saldırganın nelere erişebileceği de veritabanında ayarlanmış olan güvenlik seviyesine bağlıdır. Veritabanı sadece belirli bazı komutların çalıştırılmasına izin veriyor olabilir. Normalde web uygulamaların ön yüzleri için sadece okuma izni verilir. Saldırgan sistemde veya verilerde değişiklik yapamasada hala değerli bilgileri okuyabilir.

SQL Injection (Etkiler/Zararlar) Nedir ?

Bir saldırgan sistemin SQL Enjeksiyon saldırısından etkilendiğini tespit ettiğinde bir giriş alanından SQL sorgu ( komutlarını çalıştırmaya başlar. Bu veritabanınızı saldırganın eline verip istediği SQL komutlarını çalıştırmasına, istediği verileri silmesine ve değiştirebilmesine izin vermek gibidir. Saldırganın istediği komutları çalıştırması veritabanı bütünlüğünün bozulmasına ve önemli bilgilerin görülmesi ile sonuçlanır.

Arka planda kullanılan veritabanına bağlı olarak SQL enjeksiyon açıkları saldırgan için değişik seviyelerde veri/sistem erişimi sunar. Bazı durumlarda dosyalardan okumak veya dosyalara yazmak, ya da işletim sisteminde komutlar çalıştırmak mümkün olabilir. Micorosft SQL sunucusu gibi bazı SQL sunucuları stored ve extended prosedürler (veritabanı sunucusu fonksiyonları) içerirler. Eğer bir saldırgan bu prosedürlere ulaşabilirse bu tam bir felaket olacaktır. Malesef SQL enjeksiyon etkileri sadece veri hırsızlığı veya hack sonrası farkediliyor.

SQL Injection Örnek;

login(kullanıcı) ve şifre(password)'dan oluşan iki giriş kabul eden basit bir HTML formunu inceleyelim.

Kod:
<form method="post" action="http://ankasaldiritimi.kaan.com/login.asp"> 
<input name="tfUName" type="text" id="tfUName"> 
<input name="tfUPass" type="password" id="tfUPass"> 
</form>

login.asp'nin en kolay çalışma şekli aşağıdaki gibi bir veritabanı sorgusu hazırlamakla olabilir.

Kod:
SELECT id
FROM logins
WHERE username = -$username'
AND password = -$password’
Eğer $username ve $password değişkenleri kullanıcı girişinden direk olarak alınıp SQL sorgusunda kullanılıyorsa çok kolay bir şekilde hack edilebilir demektir. Kullanıcı adı olarak "TurkHackTeam" verdiğimizi ve şifre için de aşağıdakini yazdığımızı varsayalım:
falan' OR 'x'='x
SELECT id
FROM logins
WHERE username = 'TurkHackTeam'
AND password = 'falan' OR 'x'='x'

Web uygulamasında kullanıcı girişleri doğru olarak filtrelenmediği için, tek tırnak kullanımı WHERE SQL komutunu iki-bileşenli bir sorguya dönüştürdü. 'x'='x' bölümü ilk bölüm ne olursa olsun şartın doğru olmasını garantiler. Bu da saldırganın login form'unu geçerli bir kullanıcı / şifre kombinasyonu bilmesine gerek kalmadan aşabilmesini sağlar.

SQL Injection (Zararını Engelleme) SQL Saldırısını Engelleme

Güvenlik duvar(ları) ve benzer saldırı tespit mekanizmasına sahip yapısal düzeyler bu konuda tam bir koruma sağlamaktadır. Ancak yinede her ihtimale karşı tam emin olmamak gerekiyor. Yani neyin ne olacağını elbette bilemeyiz. Temsili konuştuğumuzu lütfen göz önünde bulunduralım. Bu büyük bir sorumluluktur. Web siteleri veya web sitenizin herkese açık (giriş) olması gerektiği için güvenlik mekanizmaları web trafik (bandwith) veritabanı sunucularınız ile web uygulaması aracılığı ile yapılan haberleşmesine izin verecektir. Buna dikkat etmemiz gerekmektedir. Zaten bu işlevi kodlayan kişiler'de bu amaç ile sunmadılarmı? Elbette cevap EVET.

Kod:
Dedicated (Fiziksel)
VDS (Sanal)
VPS (Sanal)
Reseller (Sanal)

Sunucularınızı veritabanlarını ve programlama dillerini işletim sistemlerinizi mutlaka güncelleyip yamalarını geçmeniz (patch) kritik öneme sahiptir. SQL Injection (Enjeksiyon) saldırıları engellemede tam bir çözüm değildir. Yani her ne olursa olsun mutlaka bir sıkıntı doğacak ve buna çözüm için tamamen bilgimiz ve deneyim birikimimiz bizimle beraber seferber olacaktır.
 
Moderatör tarafında düzenlendi:

Coosy

Yeni üye
2 Ocak 2016
23
0
Havij programinin calisma prensiplerini nerden bulabilirim eyvallah simdiden
 

tysz5561

Üye
28 Ocak 2016
72
0
Eline sağlık gerçekten detaylı bir bilgi paylaşmıssın hepsini okudum yalnız sql engelleme hariç :)
 
Ü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.