BilgisayarlarProgramlama

SQL enjeksiyon nedir?

Web'deki site ve sayfa sayısı gittikçe artıyor. Çünkü gelişim herkesi elinden alıyor. Acemi web programcıları genellikle güvensiz ve eski kodu kullanmaktadır. Ve bu, davetsiz misafirlere ve bilgisayar korsanlarına çok fazla boşluk bırakıyor. Onlar da kullanıyorlar. En klasik güvenlik açıklarından biri, SQL enjeksiyonudur.

Biraz teori

Çoğu kimse, ağdaki çoğu sitenin ve hizmetin, veritabanını depolamak için SQL kullandığını bilir. Bu, veri depoları yönetmenize ve yönetmenize olanak tanıyan yapılandırılmış bir sorgu dili . Veritabanı yönetim sistemlerinin birçok farklı sürümü vardır - Oracle, MySQL, Postgre. Ad ve türün ne olursa olsun, veri taleplerini eşit derecede kullanırlar. Potansiyel güvenlik açığı burada yatar. Geliştirici isteği doğru ve güvenli bir şekilde işleyemezse, saldırgan bu durumdan yararlanabilir ve veritabanına erişmek için buradan tüm sitenin yönetimine geçmek için özel taktikler uygulayabilir.

Bu gibi durumlardan kaçınmak için akıllıca kodu optimize etmeniz ve hangi sorgunun hangi yoldan işlendiğini dikkatlice izlemeniz gerekir.

SQL enjeksiyon testi

Ağda güvenlik açığı olup olmadığını tespit etmek için, hazırlanmış birçok otomatik yazılım sistemi var. Ancak basit bir testi manuel olarak gerçekleştirebilirsiniz. Bunu yapmak için, araştırılan sitelerden birine gidin ve adres çubuğunda bir veritabanı hatasına neden olmaya çalışın. Örneğin, bir sitedeki bir komut dosyası istekleri işlemez ve bunları kırpamaz.

Örneğin, some_site / index.php? Id = 25 var

En kolay yol, 25 tırnak işareti koyup bir istek göndermektir. Herhangi bir hata oluşmadıysa, sitedeki tüm istekler filtrelenir ve doğru şekilde işlenir veya çıktılar çıkışlarda devre dışı bırakılır. Sayfa sorunlarla yeniden başlatıldıysa, SQL enjeksiyonu için bir güvenlik açığı var.

Bulduktan sonra, ondan kurtulmayı deneyebilirsiniz.

Bu güvenlik açığı uygulamak için SQL sorgu komutlarıyla ilgili biraz bilgi sahibi olmalısınız . Bunlardan biri BİRLİK. Birkaç sorgu sonuçlarını bir araya getirir. Böylece tablodaki alanların sayısını hesaplayabilirsiniz. İlk sorgunun örneği şuna benzer:

  • Some_site / index.php? Id = 25 BİRLİĞİ SEÇİMİ 1.

Çoğu durumda, böyle bir girdi hata oluşturmalıdır. Bu, alanların sayısının 1'e eşit olmadığı anlamına gelir. Böylece, 1'den ve daha fazlasından seçenekleri seçerek, tam sayısını belirleyebilirsiniz:

  • Some_site / index.php? Id = 25 UNION SELECT 1,2,3,4,5,6.

Yani, hata görünmeye son verildiğinde, alan sayısının tahmin edildiği anlamına gelir.

Bu sorunun alternatif bir çözümü de var. Örneğin, alanların sayısı büyük olduğunda - 30, 60 veya 100. Bu GROUP BY komutu. Sorgunun sonuçlarını, örneğin kimliği gibi bazı özelliklere göre gruplar:

  • Some_site / index.php? Id = 25 GROUP BY 5.

Hatalar alınmadıysa, 5'ten fazla alan vardır. Dolayısıyla, oldukça geniş bir aralıktaki varyantların yerine, kaç tanesinin gerçekte olduğunu hesaplamak mümkündür.

Bu SQL enjeksiyon örneği, sitelerini test etmek için kendilerini denemek isteyen yeni başlayanlar içindir. Başkasına yetkisiz erişim için Ceza Yasası'nın bir maddesi olduğunu unutmamak önemlidir.

Enjeksiyon tipleri

Güvenlik açıklarını SQL enjeksiyonu ile uygulamak birkaç yoldan yapılabilir. Sıradaki en popüler teknikler şunlardır:

  • UNION sorgusu SQL enjeksiyonu. Bu tipin basit bir örneği yukarıda da düşünülmüştür. Herhangi bir şekilde filtrelenmeyen gelen verileri kontrol etmede bir hata nedeniyle uygulanmaktadır.

  • Hata tabanlı SQL enjeksiyonu. Adından da anlaşılacağı gibi, bu tür de sözdizimsel olarak yanlıştır ifadeleri göndererek hatalar kullanır. Ardından yanıt başlıkları kesilir, analiz edilerek daha sonra SQL enjeksiyonunu gerçekleştirebilirsiniz.

  • Yığılmış sorgular SQL enjeksiyonu. Bu güvenlik açığı ardışık isteklerin yürütülmesi ile belirlenir. ";" Işaretinin sonundaki ek ile karakterizedir. Bu yaklaşım, çoğunlukla, ayrıcalıklar izin veriyorsa, veri okuma ve yazma uygulamasına erişmek veya işletim sisteminin işlevlerini yönetmek için uygulanmaktadır.

SQL açıklarını aramak için yazılım kompleksleri

SQL enjeksiyonları için kullanılabilen programların genellikle iki bileşeni vardır: Olası güvenlik açıkları için siteyi tarama ve bunlara veri erişmek için kullanma. Neredeyse tüm bilinen platformlar için böyle araçlar vardır. İşlevleri, sitenin SQL enjeksiyonuna hack olasılığı açısından doğrulamasını kolaylaştırır.

sqlmap

Bilinen DBMS ile çalışan çok güçlü bir tarayıcı. SQL enjeksiyonunu uygulamak için çeşitli teknikleri destekler. Parola karma türünü otomatik olarak algılama ve sözlüğe yazma becerisi var. Ayrıca sunucudan dosya yükleme ve yükleme işlevselliği de vardır.

Linux ortamında kurulum aşağıdaki komutları kullanarak gerçekleştirilir:

  • Git klonu https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • Cdsqlmap-dev /,
  • ./sqlmap.py - sihirbazı.

Windows için, bir komut satırı ve bir grafik kullanıcı arabirimi olan bir seçenek var.

JSQL Enjeksiyon

JSQL Enjeksiyonu, SQL güvenlik açıklarının kullanımını test etmek için kullanılan çapraz platform bir araçtır. Java'da yazılmış, bu nedenle sistemin JRE yüklü olması gerekir. GET, POST, başlık, çerez taleplerini işleyebilir. Kullanışlı bir grafik arayüze sahiptir.

Bu yazılımın kurulumu aşağıdaki gibidir:

Wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | Grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] {1,2}. [0-9] {1,2} .jar '| Baş-1 numaralı

Başlatmak için java -jar komutunu kullanınız ./jsql-injection-v*.jar

Bir sitenin bir SQL güvenlik açığı olup olmadığını kontrol etmeye başlamak için adresini en üstteki alana girmeniz gerekir. GET ve POST için ayrıdırlar. Sonuç olumluysa, sol pencerede mevcut tabloların bir listesi görüntülenir. Onlara bakılabilir ve bazı gizli bilgiler öğrenebilirler.

Yönetim panellerini aramak için "Yönetici sayfası" sekmesini kullanın. Ayrıcalıklı kullanıcıların sistem kayıtlarını otomatik olarak aramak için özel şablonlar kullanır. Bunlardan sadece bir şifre karması alabilirsiniz. Ancak programın araçlarında da bulunur.

Tüm güvenlik açıklarını tespit ettikten ve gerekli soruları enjekte ettikten sonra, yardımcı program dosyanızı sunucudan yüklemenize veya tersi halde dosyanızı oradan indirmenize izin verir.

SQLi Dumper v.7

Bu program SQL'de güvenlik açıklarını arama ve uygulama için kullanımı kolay bir araçtır. Sözde matkaplar temelinde üretir. Onların listeleri internette bulunabilir. Dorky for SQL injection, arama sorgularının özel bir modelidir. Yardımları sayesinde, herhangi bir arama motoruyla potansiyel olarak savunmasız bir site bulabilirsiniz.

Eğitim araçları

Itsecgames.com sitesindeki örnek, bir SQL enjeksiyonunun nasıl yapılacağını ve test edileceğini gösteren özel bir araç setine sahiptir. Kullanabilmek için indirilmesi ve yüklenmesi gerekir. Arşiv, sitenin yapısıyla ilgili bir dizi dosya içeriyor. Yüklemek için mevcut web sunucusu Apache, MySQL ve PHP kümesine ihtiyacınız olacaktır.

Arşivi web sunucusu klasörüne açtıktan sonra, bu yazılım ürününü yüklerken girilen adrese gitmeniz gerekir . Kullanıcı kaydı olan bir sayfa açılır. Burada bilgilerinizi girmeniz ve "Oluştur" u tıklamanız gerekir. Kullanıcı, yeni bir pencereye tercüme ederek, test seçenekleri arasından birini seçmenizi ister. Bunların arasında açıklanan enjeksiyonlar ve diğer birçok test görevi vardır.

SQL enjeksiyon tipi GET / Search örneğini dikkate almaya değer. Burada onu seçip "Hack" e basmanız gerekiyor. Kullanıcı bir arama dizesi ve belirli bir sitenin filmlerle taklit edilmesinden önce. Filmleri uzun süre izleyebilirsin. Ama sadece 10 var. Örneğin, Demir Adam girmeye çalışabilirsin. Sitenin çalıştığı ve içindeki tabloların mevcut olduğu anlamına gelen bir film belirecektir. Şimdi, komut dosyasının özel karakterleri, özellikle de tırnak işaretini filtreleyip saklamadığını kontrol etmemiz gerekiyor. Bunu yapmak için, adres satırına '' ekleyin. Ve bunu film başlığından sonra yapmanız gerekir. Site hata yapacaktır Hata: SQL sözdiziminde bir hata var; Doğru sunum için MySQL sunucusu sürümüne karşılık gelen el kitabını, karakterlerin hâlâ yanlış işlendiğini söyleyen 1 satırında '%' 'yakınında kullanmasını kontrol edin. Yani, isteğinizi değiştirmeyi deneyebilirsiniz. Ancak önce alan sayısını hesaplamalısınız. Bunu yapmak için, fiyattan sonra tanıtılan sipariş kullanın: http://testsites.com/sqli_1.php?title=Iron+Man 'tarafından siparişe 2 & & action = search.

Bu komut, filmle ilgili bilgileri basitçe gösterecektir, yani alanların sayısı 2'den büyüktür. Çift tire, sunucuya kalan isteklerin atılması gerektiğini bildirir. Şimdi, bir hata çıktı olana kadar tüm büyük değerlerin yerini almamız gerekir. Sonunda, alanların 7 olacağı ortaya çıktı.

Şimdi, veritabanından yararlı bir şey almanın zamanı geldi. Sorguyu adres çubuğunda biraz değiştirmek suretiyle bu forma getirmek gerekecek: http://testsites.com/sqli_1.php?title=Iron+Man 'sendika 1, veritabanı (), kullanıcı (), 4, şifre, 6, 7 kullanıcılardan - & eylem = arama. Uygulandıktan sonra çevrimiçi hizmetlerden birini kullanarak kolayca anlaşılabilir karakterlere dönüştürülebilen şifre kareleri içeren satırlar göreceksiniz. Biraz pokoldovav ve bir oturum açma ile alan adını toplayarak, başkasının kaydına, örneğin, yönetici sitesine erişebilirsiniz.

Üründe, uygulayabileceğiniz birçok enjeksiyon çeşidi bulunmaktadır. Unutulmamalıdır ki bu becerilerin ağda, gerçek sitelerde uygulanması cezai olabilir.

Enjeksiyon ve PHP

Kural olarak, kullanıcı tarafından gelen taleplerin işlenmesinden PHP kodu sorumludur. Bu nedenle, bu seviyede PHP'de SQL enjeksiyonlarına karşı koruma oluşturmanız gerekiyor.

İlk olarak, bunu yapmak için ihtiyaç duyduğunuz temel birkaç basit öneri vermek faydalı olacaktır.

  • Veriler, veritabanına konmadan önce daima işlenmelidir. Bunu mevcut ifadeleri kullanarak veya sorguları manuel olarak organize ederek uygulayabilirsiniz. Burada da, sayısal değerlerin ihtiyaç duyulan türe dönüştürülmesi göz önüne alınmalıdır;
  • Çeşitli kontrol yapılarının görünmesi talebinden kaçının.

Şimdi MySQL'de SQL enjeksiyonlarına karşı koruma sorgulama kuralları hakkında biraz.

Bir sorgu için herhangi bir ifade yazarken, verileri SQL anahtar kelimelerinden ayırmanız önemlidir.

  • SELECT * FROM tablo WHERE name = Zerg.

Bu tasarımda, sistem Zerg'in bir alanın adı olduğunu düşünebilir, bu nedenle tırnak işaretleri içine almanız gerekir.

  • SELECT * FROM tablo WHERE name = 'Zerg'.

Bununla birlikte, değerin kendisinde tırnak işaretleri bulunan durumlar vardır.

  • SELECT * FROM tablo WHERE name = 'Fildişi Sahilleri'.

Burada, kedinin yalnızca bir kısmı işlenir ve geriye kalan, doğal olarak değil, bir takım olarak algılanabilir. Bu nedenle, bir hata oluşur. Dolayısıyla bu tür verileri taramanız gerekiyor. Bunu yapmak için ters çizgi - \ kullanın.

  • SELECT * FROM tablo WHERE name = 'cat-e' Fildişi. '

Yukarıdakilerin hepsi dizeler için geçerlidir. Eylem bir sayı ile ortaya çıkarsa, tırnak işaretlerine veya eğik çizgiye ihtiyaç duymaz. Bununla birlikte, zorunlu olarak zorunlu olarak gerekli veri türüne yol açmalıdır.

Alan adının bir geri alıntıya eklenmesi önerilir. Bu simge, klavyenin sol tarafında ve parmak iziyle birlikte "~" ile birlikte gelir. Bu, MySQL'in alan adını anahtar kelimesinden doğru bir şekilde ayırt edebilmesi için gereklidir.

Verilerle dinamik çalışma

Genellikle, veritabanından herhangi bir veri elde etmek için dinamik olarak oluşturulan sorgular kullanılır. Örneğin:

  • SELECT * FROM tablo WHERE sayı = '$ sayı'.

Burada, $ numarası bir alan değeri tanımı olarak geçirilir. Kedi-iskele vurursa ne olacak? Bir hata oluştu.

Bu sorundan kaçınmak için elbette ayarları "sihirli teklifler" ekleyebilirsiniz. Fakat şimdi veriler gerektiği yerde taranacak ve gerekli olmayacak. Buna ek olarak, kod elle yazılmışsa, kendinize bir soyguna dayanıklı sistem yaratmaya çalışırken biraz zaman harcayabilirsiniz.

Kendiniz eğik çizgi eklemek için mysql_real_escape_string'i kullanabilirsiniz.

$ Sayı = mysql_real_escape_string ($ sayı);

$ Yıl = mysql_real_escape_string ($ yıl);

$ Sorgu = "INSERT INTO tablosuna (sayı, yıl, sınıf) DEĞERLER ('$ sayı', 'yıl yılı', 11)".

Kod, hacim olarak büyümüş olmasına rağmen, potansiyel olarak daha güvenli çalışacaktır.

tutucuları

Yer tutucular orijinal göstergelerdir, buna göre sistem bu bölgeye özel bir işlev konması gerektiğini öğrenir. Örneğin:

$ Sate = $ mysqli-> hazırla ("SEÇENEKLERDEN FROM Sayı WHERE Ad =?");

$ Sate-> bind_param ("s", $ sayı);

$ Sate-> execute ();

Kodun bu kısmı, sorgu şablonunu hazırlar, ardından değişken numarasını bağlar ve yürütür. Bu yaklaşım, talebin işleme ve uygulanmasına ayrılmanızı sağlar. Böylece, kendinizi SQL sorgularında kötü amaçlı kod enjeksiyonu kullanmanıza karşı koruyabilirsiniz.

Bir saldırgan ne yapabilir?

Sistemin korunması ihmal edilemeyecek kadar önemli bir faktördür. Tabii ki basit bir web sitesi-kartviziti geri getirmek daha kolay olacaktır. Ve bu harika bir portal, servis, forum ise? Güvenliği düşünmüyorsanız bunun sonuçları ne olabilir?

Birincisi, bilgisayar korsanı hem veritabanının bütünlüğünü bozabilir hem de tamamen kaldırabilir. Ve site yöneticisi veya hosteri yedekleme yapmadıysa, o zaman kolay olmayacaktır. Buna ek olarak, bir siteye saldıran bir saldırgan, aynı sunucudaki diğer kişilere geçiş yapabilir.

Sonraki ziyaretçilerin kişisel verilerin çalınmasıdır. Onların kullanımı - her şey sadece bilgisayar korsanının hayal gücü ile sınırlıdır. Fakat her durumda sonuç çok hoş olmayacak. Özellikle mali bilgiler içeriyorsa.

Ayrıca, bir saldırgan veritabanını kendisi ile birleştirip dönüşü için para harcayabilir.

Sahtekârlığın mümkün olması nedeniyle, site yöneticisi adına kullanıcıların bilgisizliğinin bozulması da olumsuz sonuçlara neden olabilir.

Sonuç

Bu makaledeki tüm bilgiler yalnızca bilgi amaçlı verilmektedir. Bunu, yalnızca güvenlik açıkları algılanıp düzeltildiğinde kendi projelerinizi test etmek için kullanın.

SQL enjeksiyonunun nasıl gerçekleştirileceği tekniğinin daha derinlemesine bir çalışması için, SQL dili özelliklerini ve özelliklerini keşfetmeye başlamanız gerekir. Sorgular nasıl yapılır, anahtar kelimeler, veri türleri ve bunların tümü.

Ayrıca, PHP işlevleri ve HTML öğelerinin çalışmasını anlamadan yapamazsınız. Enjeksiyonları kullanmanın temel savunmasız noktaları adres çubuğu, arama ve çeşitli alanlardır. PHP işlevlerinin incelenmesi, uygulanma şekli ve olasılıklar, hataların nasıl önleneceğini anlamanıza yardımcı olacaktır.

Pek hazır yazılım araçlarının varlığı, bilinen güvenlik açıkları konusunda sitenin derinlemesine analizini yapmanıza izin verir. En popüler ürünlerden biri kali linux'dur. Bu, alanın güç için kapsamlı bir analizini yapabilen çok sayıda yardımcı program ve programı içeren Linux tabanlı bir işletim sisteminin bir görüntüsüdür.

Siteyi nasıl keseceğimi neden bilmem gerekiyor? Çok basit - bu, projenizin veya sitenizin potansiyel olarak hassas bölgeleriyle ilgili bir fikrinizin olması için gereklidir. Özellikle, çevrimiçi ödeme kabiliyeti olan, kullanıcıların ödeme verilerinin bir saldırgan tarafından tehlikeye atıldığı bir çevrimiçi mağazaysa.

Mesleki araştırma için, siteyi farklı kriterlere ve derinliğe göre kontrol edebilecek bilgi güvenliği hizmetleri bulunmaktadır. Basit HTML enjeksiyonundan sosyal mühendislik ve kimlik avına kadar.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 unansea.com. Theme powered by WordPress.