SQL Enjeksiyonu Nedir? Tanıdıklarımın çok iyi olduğuna kendimi nasıl inandırabilirim?

Qia robotuє Chris Anley Advanced SQL Injection In çalışmasının bazı bölümlerinin çevirisi SQL Server Uygulamalar. ()
İlerleyen yazılarda büyük ihtimalle bu tercümeye son verilecektir.

Not: Çeviri çağdaş ve tarihsel amaçlar açısından yararlı olacaktır.

Makalenin orijinal başlığı: Vikorist dili SQL gibi eklerde SQL-in'ektsii'yi itin.

Soyut

Bu makale, popüler Microsoft Internet Information Server/Active Server Pages/SQL Server platformu için "SQL enjeksiyonunun" gizli yollarını incelemektedir. Zafer için çeşitli seçenekleri tartışıyor SQL enjeksiyonları Ekler, verileri doğrulamaya yönelik yöntemlerin yanı sıra hatalı yanlışlıklar olabilecek veritabanlarının korunmasını da açıklamaktadır.

Girmek

Yapılandırılmış Sorgu Dili (SQL), veritabanlarıyla etkileşimde bulunmak için kullanılan yapılandırılmış bir dildir. "Lehçeler" körlüğü var film SQL'i Günümüzde temel olarak tüm notlar, daha önceki ANSI standartlarından biri olan SQL-92 standardına dayanmaktadır. SQL'in ana işlem bloğu, bir dizi sonucu (sonuç kümesi) döndürmenize olanak tanıyan bir dizi ifadeden oluşan bir sorgudur. SQL virüsleri, veritabanlarının yapısını değiştirebilir (Vikorist veri işleme virüsleri - DLL) ve bunların yerini alabilir (Vikorist veri işleme virüsleri - DML). Burada Microsoft SQL Server'da geliştirilen transact-SQL'e bakacağız.

Saldırganın eke gönderilen verileri almak için SQL kodunu bir sorguya eklemesi durumunda SQL enjeksiyonları mümkündür.

Orijinal SQL virüsü şuna benzer:

Yazarlardan kimlik, ad, soyad seçin

Bu program, "yazarlar" tablosunun sütunlarından "id", "ad" ve "soyadı" bilgilerini alır ve tablodaki tüm satırları döndürür. Ortam bir şarkının “yazar”ıyla çevrelenmiş olabilir, örneğin:

Vlasniki'den kimlik, ad, soyadı seçin; burada ad = "john" ve soyadı = "smith"

İz, harfin satır harflerinin ayrıldığını gösterir. tek ayak. Müşteri tarafından girilmesi gereken bilgilerin “ad” ve “soyad” olduğunu unutmamak önemlidir. Bu vipadka'da zlovmisnik, yetkili değerleri programa ekleme yoluyla yetkili SQL'e girebilecek. Örneğin:

Adı: jo"hn Soyadı: smith

Todi Viraz'ı yakın gelecekte görüyorum:

Yazarların kimliğini, adını, soyadını seçin; burada ön ad = "jo"hn" ve soyadı = "smith"

Veritabanı böyle bir sorguyu işlemeye çalıştığında şunun gibi bir şey döndürecektir:

Sunucu: Msg 170, Seviye 15, Durum 1, Satır 1 Satır 1: "hn" yakınında yanlış sözdizimi.

Öğütmenin nedeni, bağlantı yerindeki ayırıcıların yapısını sızdırmaz hale getiren tek bir pençenin yerleştirilmiş olmasıdır. Böylece veritabanı başarısız bir şekilde yürütmeye yol açacak “hn” komutuyla bağlantı kurmaya çağrılır. Sonuç olarak saldırgan forma aşağıdaki bilgileri girer:

Adı: jo"; tablo yazarlarını bırak-- Soyadı:

"Yazarlar" tablosu görünecek, nedenine daha sonra bakacağız.

Yerleştirme formundan tekli bacakları çıkarıp "değiştirdiğimizi" merak edebilirsiniz, bu da sorunumuzu çözebilir. Ve haklısınız, ancak en üst düzey olarak bu yöntemle ilgili bazı sorunlar var. Öncelikle istemci tarafından girilen bilgilerin tamamı “string” değildir. Koristuvach'ın biçimi, sayı olarak adlandırılan yazarın "id"siyle aynı olacaktır. Örneğin sorgumuz şu şekilde görünebilir:

Kimlik=1234 olan yazarların kimliğini, adını, soyadını seçin

Bu durumda saldırgan sayısal verilerden sonra herhangi bir SQL virüsünü kolaylıkla ekleyebilir. Diğer SQL sorgu türlerinde ise farklı farklılıklar bulunmaktadır. Örneğin, Microsoft Jet DBMS'de sınırlayıcı "#" simgesi olacaktır. Başka bir deyişle, tek bacaklardan "kaçmak", pes edebileceğiniz gibi, öldürmenin en basit yolu değildir. Bu rapor hakkında daha sonra konuşacağız.

Kullanıcıyı herhangi bir programda yetkilendirmek amacıyla veritabanına erişimi reddetmek için ek SQL kullanan Active Server Pages'ı (ASP) temel alan oturum açma sayfasına bakalım.

Hesap adınızı ve şifrenizi gireceğiniz giriş formuna gireceğiniz sayfaya kodu gireceğiz.

Giriş sayfası

Giriş yapmak

Kullanıcı adı:
Şifre:

Aşağıda verinin doğru olduğu anlamına gelen kod (process_login.asp) bulunmaktadır.