PDA

Orijinalini görmek için tıklayınız

eXTReMe Tracker
: SQL Server -Genis Hacking


TaRGeTWoRKeR
08-04-2007, 02:42 PM
Hacker'ların SQL server Sistemlerindeki numarları
SQL Server-Genis Hacking 1
Yazar/Kaynak:netur
Yazım Tarihi:03 Haziran 2006 16.13
Katagori:Geniş Hacking
Dokuman:1
Tamamiyle OriqinaL Dokuman


Hacker'ların SQL server Sistemlerindeki En çok Kullandığın 10 Numaraları Şimdi Açıklıyacağım.
Hacker'lar çoğunlukla SQL serverların SQL Dizinlerini çok iyi tanırlar.Eğer bir SQL server'ınız varsa veya

SQL Server Tabanınız varsa,Hackerlardan korunmak için Hacker gibi düşünmeniz gerekiyor.Yani Kendi SQL server'ınıza
Güvenlik Testlerinizi Yapmanız Gerekiyor.Server Sorgulama Dilinde Hacker'lar Bazı SQL Dizinlerini iyi Süzülmediği için giriş yapabiliyorlar.

Methot Başlıkları Şu şekildedir:

1.İnternet Üzerinden DİREKT SQL İnjection
2.Açık Tarayıcıları aracılığıyla SQL İnjection
3.SQL server Kararlarını Sıralama
4.SA şifrelerini Kırma
5.Direkt Exploit Saldırıları
6.SQL injection Programları
a-SQL İnjection Perl Script
7.Görünmez SQL İnjeciton
8.Sistemlerde TERS MUHENDİSLİK
9.Google Hack
10.Web Site Kodlarına Dikkat Etmek
a.Hata Mesajlarına Bakarak SQL İnjection Deneme(Video)

11.İnjectionları Tanımak( İnjection'a Genel Bakış)

1.İnjectionları Tanımak

a-Error Hataların Farkına varmak
b-Konum Hataları
c-SQL İnjection Açık Parametlerini Tanımak

2.İnjection'u Kullanmak

a-Doğru Söz Dizimi Oluşturmak
b-Database'yi Tanımak
c-Exploitlerle İnjection

3-UNION SELECT İnjection

a-Sutunları Sayma
b-Sutun Tiplerini Tanımak


1.İnternet Üzerinden Direkt SQL İnjection

Bu SQL Server Kullanıcı Bağlantıları Oturumları,Butun Dunya Üzerinde SQL firewall korumalarını gösterir.

DShield's Port Report (Dshield Port Raporları).Gördüğünüz gibi bir çok sistemin saldırılmak için adeta beklediğin göstergesidir.

Ben bunun gibi bir server'ı,internetten dosdoğru bir şekilde erişebilir mantığını çözemedim ama,bazı değerlendirmelerimde bunun kusurlarını bulabilirim.

Biz,SQL server'da Direkt Saldırılar ile,DOS yapabilir,Var olan Oturum bilgilerini alabilir,Sistem üzerindeki SQL Datalarına Yazma Yetkisi Alabiliriz.
Geniş Anlatım Şu Şekildedir:

Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

2.Açık Tarayıcıları aracılığıyla SQL İnjection

Bu Scannnerlar,Çoğunlukla Kendi Sistem Temelini Oluşturan OS'ların,ağ uygulamaların veya veritabanı uygulamalarında (database application) sistem gösterme zaaflarını tarar ve korunmazsızlarını ölçer.SQL server'larında,İnternet Bilgilendirme Servislerinde(ISS), Eksik olan Patchlerden dolayı,Bir SNMP Exploit ile kayıt olmaksızın,SQL Server sistem açığı arkakapısından direkt;hedef sisteme giriş yapabiliriz.

Örnek Programlar ve Uygulamalar:
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Scanner:
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..


Sitedeki Linkleri Sadece Üyelerimiz Görebilir..


Şekil:1 SQL İnjection Açıklarını Denetler

Acunetix 2.0 ve 3.0 Adındaki Programdada SQL serverların SQL İnjection açıkları bulunur ve Bunların kullanış şekilleride yer alır.(Tafsiyemdir.)

3.SQL server Kararlarını Sıralama

İşlek UDP port 1434 açın,Bu, saklanan veritabanı örneklerini bulman için size izin verir, ve sisteme daha derin araştırmak için izin verir.
Chip Andrews' SQLPing v 2.5 () burdaki önemli araç,SQL Server Sistemlerini ve (bazen)version numaraları kararlarını bakmanıza yardımcı olur.Bu mekanizma aynı Sizin SQL server örneklerindeki açık default portları listeler.

4.SA şifrelerini Kırma

SQL server Databaselerinde SA Şifrelerin Şifresini alma/Anlamını çözmek için saldırılarda bulunuyoruz.

APPDETECTİVE=Sitedeki Linkleri Sadece Üyelerimiz Görebilir..
NGSSQLCrack=Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Bir çok net üzerinde SA şifrelerini kırabileceğiniz uygulamalar,dokumanlar,programlar mevcuttur.

5.Direkt Exploit Saldırıları

Direkt Exploit Saldırıları için bu adresteki Metasploit MSFCONSOLE aracı kullanabilirsiniz.Bu (CANVAS ve CORE IMPACT gibi) Eşdeğer tecimseldir.Bu kesin exploit Açıkların Sonuçlarını verir,normal açık tarayıcılarındandır.

Bu tipik Silver-Bullet Hack Saldırıları ile hedef sisteme girer,CODE injection yapar,(unauthorized command-line access. ) ve Yetkisiz Giriş Yollarını Yönetir.


Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Şekil-2:Metasploitin MSFKonsolunda SQL exploit tablo açıklarını kullandırır.


6.SQL injection

SQL İnjection saldırıları web uygulamarı üzerinde bazı kullanılan değerleri değiştirmeyle olur.

Kusurlu SQL Sorguları,SQL Komutlarını,Direkt Web URL SQL hatalarını,ve diğer komutları bu programla uygulayabilirsiniz.

SPI Dynamics' SQL Injector Web Adres:
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..
Download WebInspect
(file size: 83.1MB)
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

SPI Dynamics' SQL Injector 3.Şekilde Göstermektedir.


Sitedeki Linkleri Sadece Üyelerimiz Görebilir..



Programın Özellikleri:

Cookie Yiyici
Kuvvetli session hijacking ile Cookie Analizlerine Engel olur.

Encoders/Decoders
Diğerleri gibi Standart encryption translantik bir araçtır.

HTTP Editor
HTTP sorguları yaratır ve değiştirir.

Regex Tester
Düzgün Testler oluşturur.

SOAP Editor
Otomatiksel Web services SOAP oluşum sorgularının hepsini editler.

SPI Fuzzer
HTTP fuzzing,değiştirilen açık girişlerini,tampon taşması hatırlanmalarını bulur.

SPI Proxy
Guzel Kullanışlı bir Desktop Proxy Servisidir.

SQL Injector
Web Sitesine karşı Otomatik SQL injection exploit saldırıları etkisi altında kalan server'lara test eder.

WebBrute
Brute force aracıdır. login sayfalarına Otomatik olarak kullanıcı adı ve password dener.

WebDiscovery
Web Server Portlarının Hatırlanma Sonuçlarına bakar.

ve Diğer Araçlar ve Kullanımları: OriqinaL Yazılar & Dokumanlar Serisi)
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

a-SQL İnjection Perl Script

SQL İnjecitonu Perl Dilindeki Script ilede Deneyebiliriz.Kodlar Şu şekildedir:

Sitedeki Linkleri Sadece Üyelerimiz Görebilir..


7.Görünmez SQL İnjection

Bu saldırılar, standart SQL Enject etmesi olarak, aynı temel modada ağ uygulamaları ve back-end SQL serverlarını sömürmeye yarar.

Büyük fark, saldırganın, dönmüş olan hata mesajlarının formunda ağ serverlerından geri beslemeyi almadığıdır.

Bu kadar saldırı, standart SQL Enject etmesinin, varsayımın, karıştırdığını verdiğinden hatta daha yavaştır.

Siz, bu durum için iyi bir araça ihtiyaç duyarsınız oda bu adresreki Absinthe aracı ile olur:
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Program resim:


Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Bu şekilde Absinthe Aracı ile Görünmez SQL İnjeciton yapılıyor.

8.Sistemlerde TERS MUHENDİSLİK

Ters mühendislik numarasıı, bakım, yazılım, sömürmeler,Memory bozulma zaafları ve böyle diğerlerini gösterir..

Mükemmel kitap sömürme yazılımından bu numune bölümünde mevcuttur:
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Siz,Greg Hoglund ve Gary McGraw tarafından kodu kırmanın nasıl olduğunu, ters mühendislik hilelerinin hakkında bir tartışmayı bulacaksınız.

9.Google Hack

Google' hack mi Dediniz.O zaman beni konuşuyorsunuzdur.Türkiyenin En iyi Google Database Hacking Dökümanıma Bakabilirsiniz.

SANALDARBE GOOGLE DATABASE HACKİNG v1.d1(Documen 1)
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..


10.Web Site Kodlarına Dikkat Etmek

Evet.Web Sitelerine Source Kodlarına Dikkat etmekten Bahsediyoruz.SQL İnjeciton Yedirmek için sayfa dizini yapısına dikkat etmemiz GErekiyor.
Genelde Search ve Login.asp/php gibi sayfalarda SQL İnjection yiyor.

Örnek verirsek: => NASA'nın Alt subdomaini olan standards.nasa.gov'a bakalım

Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

NASA Technical Standards Program Sayfasını Source ettiğinizde :
Örnek Dizin Şu Şekildedir:


Kod:
ıf (document.form1.userid.value == "") (
alert ("Please enter Your User ID")
return false
)
ıf (document.form1.password.value == "") (
alert ("Please enter Your Password")
return false
else (
return true
) Evet.Gördüğünüz gibi nasa.gov bile Password Değer Dizinlerini "" şeklinde ayırmıştır.Lamerler.
login userid ve pasword girişi: "" şekinde giriş yapabilirsiniz.


11.Hata Mesajlarına Bakarak SQL İnjection Deneme(Video)

SQL Server Web Sayfalarında,Bazı SQL sorgularını denediğimizde,Bazı hata mesajları alırız ve biz bu hata mesajlarına bakarak,SQL Server'ındaki bazı verilere bakarak,SQL server'a giriş yapabiliriz.

Örnek Otomatik SQL İnjector'a Bakabiliriz.
Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Sitedeki Linkleri Sadece Üyelerimiz Görebilir..

Adresinde OtoSQLİnjector'a bakalım.
--

11.İnjectionları Tanımak( İnjection'a Genel Bakış)

A.İnjection'u tanımak

Açıkça,, ilk adım olan bir SQL injection etme işini yapmaktır, onu tanımaktır.
Bu yapmak için , saldırgan ilk olarak, sistemde gösterge kabul etme hatalarının bazı türlerini kurmalıdır.
Kendi Hata mesajlarının, gösterilmiyor olmasına rağmen, uygulama hala, (Geçerli bir istek) (Geçersiz bir istek) yanlıştan doğru ayırmanın bazı yeteneği sahip olması lazımdır, ve saldırgan kolayca, bu göstergeleri tanımayı öğrenir, hataları bulur, ve onların, SQL olup olmadığı tanır, ve buna göre işlev yapar.


a-Error Hataların Farkına varmak

İlk olarak, biz, bir saldırganın, karşılayabildiği hataların tiplerini anlamalıyız. Bir ağ uygulaması, iki büyük tipin hatalarını oluşturabilir. Hatanın ilk tipi, ağ serverın tarafından oluşturandır, kodda bazı istisnanın sonucu olarak olumsuz gelişmeler olabilir. Eğer memnun olmadıysak, bu istisnalar, '500: İç server hatası' herkesi fazla aşina verir. Normal olarak, kötü SQL sözdiziminin injection etmesi (Açılan alıntılar, örneğin), diğer hataların, bu kadar istisnaya ***ürebilmesine rağmen.hatanın bu tipine dönmesi için SQL injection uygulamaya sebep olmalıydı,. Basit bir hata bastırma süreci, genel-yapılmış bir HTML sayfasıyla bu hatanın hazır gelen metinlerini değiştirecek, ama yanıtı gözlemek, kendinin, hala bir gerçek server hatası olduğu gösterecek olduğunu gösterir.. Diğer olaylarda, daha çok gayret, hataları bastırmak için alınır, ve hatalı yanıt basitçe olabilir, ama önceki sayfaya bir yeni adrese gönderebilir, veya herhangi bir bilgiyi sağlamayan cinsle ilgili bir hata mesajı olabilir.

SQL Dizinleri Biraz Karmaşık olabilir.Önemli olan SQL Dizin Error hatalarını tam manasıyla anlamaktır.

Hatanın ikinci tipi, uygulama kodu ile oluşturulur, ve genellikle daha iyi programlamalarla gösteririlir.. Uygulama, kesin geçersiz olayları bekler, ve Server için özel özelleştirilen bir hatayı oluşturabilir.

Normal olarak bu tip hataların, geçerli bir (200 OK) yanıtı parçası olarak gelmesine karşın, server'da değiştirilebilir, yeni adrese gönderebilir, veya gizlemenin diğer yolları bulunabilir.Büyük kısıma, 'İç server hatası'ı beğenir.('Internal Server Error')

Basit bir örnek ile ikisinin arasında SQL Dizin ayıracak: Haydi, iki benzer eCommerce uygulamasını alalım, adlandırdım, bir ve B., olsun.


Her iki uygulamanın, proddetails.asp gibi bir sayfanın, proddetailsi çağırdığını kullanıyor olduğudur. Bu sayfa, bir parametrenin, ProdID'u çağırdığını almasını bekler Bu, kabul edilen ProdID'u alır, ve veritabanından ürün ayrıntılarını geri alır, sonra dönmüş olan kaydın üzerinde bazı idareleri yapar. Her iki uygulama sadece, proddetailsi çağırır. Bir bağlantı boyunca proddetails.asp, bu yüzden ProdID her zaman, geçerli olmalıydı. Uygulama, bunla tatmin edilir, ve ekstra kontroller mi yapmamız lazım Evet.. Bir saldırganın, ProdID'la tahrif ettiği zaman, yapacağı şey masada hiçbir sırası olmayan bir idi sokmak, boş bir recordset, dönmüş olacaktır.. Onun Uygulamadan beri boş bir recordseti bekleme veya kayıtta veriyi idare etmeyi denediği zaman, bir istisna, meydana gelecektir., Bir '500: İnternal Server Error' hatası oluşacaktır.. B'in olduğu uygulama, yine de, recordset boyutunun, onun herhangi bir idaresinden önce 0'dan daha büyük olduğunu doğrular. Eğer, değilse, bir hata, 'Hiçbir böyle ürün değil' talep etmekte gözükür, veya, eğer progr****, hatayı saklamayı isterse, kullanıcı, basitçe sunulmuş olan ürün listesiyle karşılaşır.

SQL Hatalarını Anlamak için Server Sorgulama Dilini Çözmeniz Gerekmektedir.Bunun için bol bol SQL Server Dizin oluşturunuz.Diğer Programlama dilleri gibi SQL Dizinlerini Oluşturunuz.Web Siteniz varsa,web siteniz üzerinde SQL Dizinleri oluşturup,bu bağlamda SQL Komutlarıda kullanabilirsiz.Bu Manada Önünüze Çıkan Herhangi bir Web sitede,Bir SQL Sorgusu sırasında,SQL Error Hatasının Hangi manaya geldiğini anlarsınız ve bu bağlamda Site üzerinde SQL Hatanın Geliş yoluna bakarak,site üzerinde SQL Sorgusu denersiniz.


b-Konum Hataları

Saldırganız Uygulamalardan Edindiği bilgiyle,yönetilen bir girişin sonucu olan hataları saptıyor,ve buna göre saldırıya devam ediyor.

Onun için,normal SQL İnjection teknikleri,testleri uygulanır(Vb.vs..).mesela META karakterlere SQL anahtar Sözcüklerini eklemek gibi: Mesela; Veya ').

Her parametre ayrı ayrı test edilir ve yanıt kararlaştırılarak bir hatanın meydana gelip gelmediğini yakınca saptamaya çalışır.Bunu yapmak için proxy ile çalışan bir programla,SQL server üzerinde bu SQL sorgularını Deneyebilirsiniz.Şunu Bilinki Bir parametreye dönen her hata mesajı,şüphelidir.İncelenmelidir.

Her zaman olduğu gibi, bütün parametreler, ayrı ayrı test edilir,ve istediği SQL değeri ile geçerli kılabilir.Bu Olayda İnjection dereceside önemlidir.Bu süreçte,Kendisinin hatanın herhangi bir mümkün nedenin kendisi olup olmadığını veya başkası tarafından notralize edildiğini anlamalıdır.Bu sürecin sonucu, genellikle şüpheci parametrelerin uzun bir liste olmasıdır.Bu parametrelerin bir kısmı gerçekten, SQL İnjection etmesi ile korunmasız olabilir, ve sömürülebilir.

Diğerlerinin, SQL'e ilgili olmayan, ve atılabilen hataları vardır.Bu Yüzden Saldırgan için bir Sonraki Adım,Bunun bir işe yaramaz olduğu tanır ve gerçekten kendisine yarayacak SQL İnjection hatalarını anlamasıdır.

c-SQL İnjection Açık Parametlerini Tanımak


Daha iyiye gitmek için Bunun nasıl daha iyi yapıldığını anlamanız gerekiyor.
SQL'de verinin temel tiplerini anlamak için önemlidir.SQL alanları normal olarak, üç ana tipin biri olarak sınıflandırılabilir:Numaralar ve Data Ip'leri.Her ana tipin, birçok farklı lezzeti var, ama bunlar, İnjection etme süreci olduğu için alakasızdır.Ağ uygulamasından SQL sorgusuna transfer edilen her parametre, bu tiplerin biri olarak düşünülür, ve tipi kararlaştırmak için genellikle çok basittir.
('Alfabe', açıkça bir iptir, oysa 4, bir sayı olmak için muhtemeldir, onun da, bir ip olarak düşünülmeli olmasına rağmen..).

SQL Dilinde,numeric parametreleri, olduğu gibi servera geçilir,oysa ipler veya tarihler, onların etrafında alıntılarla geçilir. Örneğin:

SELECT * FROM Products WHERE ProdID = 4
vs.
SELECT * FROM Products WHERE ProdName = 'Book'

SQL Server,gerçekten konuyla ilgili tiptense,sadece ve sadece ,aldığı bir ifade tipinin olduğuna ilgi duyulur.Bu davranış, bir hatanın, gerçekten bir SQL biri olup olmadığı saldırgana tanımanın en iyi yolunu verir,veya ilgili olmayan yolu verir.Numeric değerleriyle, bunu tutması için en kolay yol, temel aritmetik çalışmaları kullanmaktadır:

Örneğin, haydi, takip eden isteğe bakalım:

/myecommercesite/proddetails.asp?ProdID=4

SQL İnjection etmesi için bunu test etmek, çok basittir. Bir deneme, parametrenin olduğunu 4'ün injection ederek öyle yapılır. Diğeri, parametre olarak 3+ 1 kullanmak için yapılır. Bu parametreyi farz etmek, bir SQL isteğine gerçekten geçilendir, iki testin sonucu, takip eden iki SQL sorgusu olacak:

(1) SELECT * FROM Products WHERE ProdID = 4'
(2) SELECT * FROM Products WHERE ProdID = 3 + 1

İlk olanı kesinlikle, bir hatayı oluşturacak, bu olarak kötü SQL sözdizimidir. Saniye, yine de, düzgünce uygulayacak, (ProdID olarak 4'le) orijinal istek olarak aynı ürüne dönmektir., bu parametrenin, SQL injection etmesine gerçekten korunmasız olduğunu göstermek için yapılır.


Benzer bir teknik, bir SQL sözdizimi ip ifadesiyle parametreyi değiştirmek için kullanılabilir. Sadece iki fark vardır. İlk olarak, ip parametreleri, alıntıların içinde tutulur, bundan dolayı alıntılardan dışarı kırmak, zorunludur. İkinci olarak, farklı SQL serverları, ip birleştirmesi için farklı sözdizimini kullanır. Örneğin, Microsoft SQL serverları, ipi birleştirmesi için + işareti kullanır, oysa kahin, aynı vazife içini kullanır. Ondan başka, aynı teknik, kullanılır. Örneğin:

/myecommercesite/proddetails.asp?ProdName=Book

SQL injection etmesi için bunu test etmek gerekir, ProdName parametresini değiştirmeyi karıştırır, bir defa B'inki gibi geçersiz bir iple, geçerli bir ip ifadesini oluşturacak olan biriyle diğeri, B'in + 'Ook (Veya 'Kahinle ook)kullanılır.. Bu, takip eden sorgularla sonuç verir: B'in isi gibi

(1) SELECT * FROM Products WHERE ProdName = 'Book''
(2) SELECT * FROM Products WHERE ProdID = 'B' + 'ook'

Yeniden, ilk sorgu, bir SQL hatasını oluşturmak için muhtemeldir, orijinal istek olarak aynı ürüne dönmek için , onun değeri olarak kitaplarda mevcuttur.

Benzer şekilde, herhangi bir diğer ifade, olabilir, orijinal parametreleri değiştirirdi. Özel sistem görevleri, olabilir, ya bir sayı, bir ip ya da bir tarihe dönerdi (Örneğin, kahinde, sysdate, bir tarih ifadesine döner, oysa SQL serverlarında getdate () aynı vazifeyi, yapar). Diğer teknikler hem de, olabilir, SQL injection etmesinin, meydana gelip gelmediği kararlaştırırdı.


Öyle görülebilir,SQL İnjection etmesini tanımak , meydana gelip gelmediği, ayrıntılı hata mesajları olmadan çok basit bir vazife düzenlemek, saldırıyla kolayca devam etmek için saldırgana izin vermesi sağlanmalıdır..


2.İnjection'u Kullanmak


İnjection etme, saldırgan tarafından tanındığı andan itibaren, sonraki adım, onu sömürmeyi deniyor olacaktır. Onun için, saldırgan, geçerli sözdizimini oluşturabilmelidir, özel veritabanı serverlarını tanımalıdır, ve gerekli kahramanlığı inşa etmelidir.


a-Doğru Söz Dizimi Oluşturmak

Bu, genellikle Blind SQL İnjection etme sürecinde en zor parçadır. Eğer orijinal sorgular, basitse, bu da, basittir. Yine de, eğer orijinal sorgu, karmaşık idiyse, ondan dışarı kırmak, birçok deneme yanılmayı gerektirebilir. Herhangi bir olayda, sadece birkaç temel teknik, bu testleri yapmak için gerektirilir.

Temel sözdizimi teşhis süreci, standart, seçtiği için gider, ... Nerede ifadelerin olduğu, İnjection edilen parametre yaşam parçasıyla, nerenin madde olduğu tespit edilir.. Geçerli bir sözdizimini almak için, saldırgan, ifadenin öyle olduğu orijinale veriyi ekleyebilmelidir ki o, onun, yapmalı olduğundan farklı veriye dönmesini sağlamalıdır. Basit uygulamalarda, basitçe eklemek, veya 1=1 çoğunlukla, numarası yapabilir. Birçok olayda, yine de, bu, başarılı bir kahramanlık için yeterli olmayacak. Çoğunlukla, parantez, kapatılmalıdır, bundan dolayı onlar, başlangıçta açılan olanlara denk olur. Meydana gelebilen başka bir problem, tahrif edilen bir sorgunun, bir SQL hatasından ayrılamayan (Örneğin, eğer tek olanı kaydı, beklenirse, ve veya 1=1, 1000 kayda dönmesi için veritabanına sebep oldu, uygulama, bir hatayı oluşturabilir) bir hatayı oluşturması için uygulamaya sebep olacak olduğudur.

Maddenin, temelde kendisiyle beraber gerçek olarak değerlendiriyor olan ifadelerin bir takımı olduğu her birinden beri şu şekilde sınıflandırılı: veya yanlış, katıldığı, veya, ve ve parantez, sorgunun, farklı bileşimleri deneyerek yapıldığı kendisi parantezden dışarı kıran ve uygun şekilde bitiren doğru sözdizimini öğrenmek gerekir. Örneğin, 'Ve 1=2' eklemek, yanlış bir taneye tam sözcük grubuna döner, oysa 'Veya 1=2' eklemenin, sıfır etkisi var, operatör önceliğinin dışında kalır.

Bazı İnjection etmelerle, maddenin, nerede yetebildiğini basitçe değiştirmek gerekir.. Diğerleriyle, birliğin, injection etmeyi seçtiği gibi, veya prosedür injection etmelerini depoladı, nerede maddenin olduğunu yeteri kadar değiştirmek değildir. Tam SQL ifadesi, uygun şekilde bitirilen olmalıdır, öyledir ki ekstra sözdizimi, eklenebilir. Onun için, çok basit bir teknik, kullanılabilir. Saldırgan, geçerli bir birleşme ve, veya, 1=2, ve 1=1 ifadeyi kurduktan sonra, SQL yorum işareti, kullanılabilir.

Bu işaret, (—) iki ardışık koşu ile temsil etti, çizgide girişin kalanını görmezlikten gelmesi için SQL serverına bilgi verir. Örneğin, basit bir login sayfasına bakmamız için bize izin ver, sorguya Username ve parola beraberce almak, bu biri gibi:

SELECT Username, UserID, Password FROM Users WHERE Username = 'user' AND Password = 'pass'

johndoe' --kullanıcısına yolla*****, maddenin, oluşturulduğu takip eder:

WHERE Username = 'johndoe' --'AND Password = 'pass'

Bu olayda, sadece sözdizimi, doğru değildi, ama belgeleme, pas geçildi. Yine de, nerede ifadenin olduğu bir ufakça farklı bakmamız için bize izin ver:

WHERE (Username = 'user' AND Password = 'pass')


İfadenin etrafında parantezi fark et. (jonhdoe' --) aynı injection etmeyle, sorgu şimdi, başarısız olacak:

WHERE (Username = 'johndoe' --' AND Password = 'pass')

Sorgunun, eşsiz parantezi var, ve bu yüzden uygulanamaz.

Bu örnek, bu yüzden, yorum işaretinin, nasıl olabildiğini gösterir, sorgunun, uygun şekilde bitirilen olup olmadığı tanınır. Eğer yorum işareti, eklenseydi, ve hiçbir hata, meydana gelmezdi, o, onun, yorumdan önce uygun şekilde doğru bitirdiğini ifade eder. Başka türlü, ekstra deneme yanılma, gerektirilir.

b-Database'yi Tanımak

Saldırganın, almaya ihtiyaç duyduğu sonraki adım, SQL injection etmesini sömürmeye başlamaktan hemen önce kullanılan özel veritabanını tanımaktır. Şansla (Saldırgan için, en azından), bu, geçerli sözdizimini bulmaktan çok daha kolay bir vazifedir.

Birkaç basit numara, veritabanı tipini tanıması için saldırgana izin verir, bütünüyle veritabanı motorlarının özel yerine getirmelerinin arasında var olan farklarda temel almıştır. Takip eden örnekler, kahin ve Microsoft SQL serverının arasında ayırmakta odaklar. Benzer teknikler, yine de, diğer veritabanı motorlarını alışık tanımaya kolaydır.

Daha önce bahsedilen çok basit bir numara, ip birleştirme farkıdır. Sözdizimini farz etmek, bilinir, ve saldırgan, kendisine maddenin olduğu ekstra ifadeleri ekleyebilir, basit bir ip mukayesesi, bu birleştirmeyi kullanmakla yapılabilir, örneğin:

AND 'xxx' = 'x' + 'xx'

|| ve + değiştirerek, kahin, SQL serverlerından kolayca , veya diğer veritabanlarından ayrılan olabilir

Başka bir teknik, noktalı virgül karakterini kullanmaktır. SQL'de, bir noktalı virgül, aynı çizgide ayrı SQL ifadelerini zincire vurmak için kullanılır. SQL injection etmesiyle bu, injection etme kodunun içinde kullanılabilirken, nasihatçı driverları, bu biçimde noktalı virgüllerin kullanımına izin vermez. Yorumu farz edelim ki uygun şekilde (İfade etmek, o, hiçbir hatayı oluşturmaz) çalışıyor, bir noktalı virgülü ekliyor bir MS SQL serverında hiçbir etkisi olmadan önce, lakin oracle bir hatayı oluşturur. Buna ek olarak, doğrulamak ekstra emirlerin uygulanabildiği noktalı virgül, yapılabildikten sonra, ekleyerek, ifadeyi yapar (Örneğin, xxxinkini injection etmek; Yap—). İfadeleri farz etmek, orada injection edilebilir, bu, bir hatayı oluşturmamalıydı.
Sonunda, bazı ifadeler, doğru değere dönen sistem görevleriyle değiştirilebilir. Her veritabanının, ufakça farklı görevleri kullandığından beri, bu şekilde veritabanı tipini tanımak için kolaydır (Yukarıda adı geçen tarih gibi büyük kısım, iş görür, () MS SQL serverlarında oracle sysdateye karşı getdate) kullanılır.


c-Exploitlerle İnjection


Yakında bütün konuyla ilgili bilgiyle, şimdi saldırgan kendine injection etmeyi yapmaya devam edebilir. Kahramanlık kodunu inşa ederken , saldırgan artık, hata mesajlarından bilgiye ihtiyaç duymaz, ve kahramanlıkların, bütün bilinmiş SQL injection etme tekniklerinde temel aldığını inşa edebilir.

Bu yazı, normal SQL injection etme sömürme tekniklerini tartışmaz, onların şimdiden diğer yazılarda ayrıntıda tartışıldığı gibi. Daha fazla, bu dokümanda tartışılan tek sömürme tekniği, sonraki kısımda tanımlanan birliğin injection etmesi seçkin ifadelerdir.


3-UNION SELECT İnjection

SELECT tahrifini etmenin olmasına rağmen eğer... İfadelerin, birçok uygulamada çok yapmaya değer nerede olabildiğini, saldırganlar çoğunlukla, bir birliği seçkin injection etmeye yapabilmeyi ister. Nereden farklı madde idaresi, bir birliği başarılı bir şekilde yapmak, injection etmenin, başka türlü erişilebilir olmayabilen sistemde bütün tablolardaki saldırgan erişimini verdiğini seçmesidir..
Bir UNION SELECT yapan ifadenin her alanın tipine ek olarak sorguda alanların sayısının bilgisini gerektirdiğini seçer, çoğunlukla bunun, ayrıntılı hata mesajları olmadan yapılamadığı düşünülmüştür, özellikle orijinal sorguda alanların sayısının, büyük olduğu zaman düşünülür. Takip eden kısım, bu kavramın yanlışlığını kanıtlayacak, kolayca bu problemi çözecek olan çok basit tekniğin bir takımını göstererek.

Devam etmekten önce, saldırganın, doğru sözdizimine sahip olduğu açıktır. Önceki kısımlar, yine de, şimdiden bunun, mümkün olduğu kadar kurdu ve bunun nasıl yapıldığını gösterdi. Sözdizimini kabul ediyor olan sadece önemli not, birlikle sözdizimi teşhisinin, isteğin bütün parantezini temizleyen, UNION SELECT veya diğer emirlerin özgür injection etmesine izin veren düzeye olmalı olduğunu seçmeli olandır. (Bu daha önce açıklandı, injection etmeye yorum işaretini ekleyerek doğrulanabilir).

Sözdizimi, doğru olduğu andan itibaren, seçkin ifadenin, orijinal sorguya eklenebildiği bir SELECT olması yeterldir.. UNION SELECT ifadesinin orijinal ifade olarak sütunların aynı sayısı, ve sütunların aynı tiplerine sahip olmasının olduğunu seçer, veya bir hata, oluşturulur.


a-Sutunları Sayma

Sutunları Sayarken 'UNION SELECT' kısmı SQL İnjectionun neredeyse imkansız olduğunu gösterir.


Bunun, yapıldığı yol, ayrıntılı hata mesajlarıyla, bir UNİON SELECT injection etmeye yaratarak basitçe ve alanların farklı bir sayısıyla onu denemektir (Her denemede daha çoğun olduğu gibi). Hatanın bir 'Sütun sayı uygunsuzluğu'u gösterirken, bir 'Sütun tip uygunsuzluğu'la değiştirildiği zaman, sütunların doğru sayısı, uzanıldı, ve sonraki adım, alınabilir. Ne zaman bağlantıların çalışmaya, yine de, bizim, kesinlikle hatanın tipini kabul ediyor olan hiçbir göstergemiz yok, ve bu yüzden bu metot, tamamen yararsızdır.

Farklı bir teknik bu yüzden, olmalıdır, sütunların sayısını tanırdı, ve bu teknik madde ile emrin formunda gelir. Seçkin ifadenin sonuna madde ile bir emri eklemek, rekor-takımda sonuçların emrini değiştirir. Bu normal olarak, bir tür sütununun ismini belirterek yapılır (Veya birkaç tür sütununun isimleri).

Mali bir sorgunun bir örneğine bakalım.Geçerli İnjection Kredi Kartı numaralarının parametleri 11223344) ORDER BY CCNum -- şekildedir.Sorgusu şudur:


SELECT CCNum FROM CreditCards WHERE (AccNum=11223344) ORDER BY CCNum -- AND CardState='Active') AND UserName='johndoe'

What, genellikle nazır olmuş olandır, yine de, madde ile emrin, bir numeric formuna sahip olabildiği gerçektir. Bu olayda ifade, onun isminden ziyade bir sütun sayısına başvurur.

11223344) ORDER BY 1 -- bu İnjectionun anlamı,Hem de meşru olacak, ve tam olarak aynen yapacaktır.Yine de, bu sorgunun, sadece bir alanı olduğu gibi bir hatayı oluşturacak, sonucu ifade etmek, onun ikinci alanı tarafından sınıflanamaz.
Bu yüzden, ne zaman alanların sayısını saymaya gelindiğinde, geçerek emreder, çok faydalı olabilir. İlk olarak, saldırgan, onun, tanıdığı temel sözdizimine 1 madde ile bir emri ekler. Her seçkin sorgunun, en azından bir alana sahip olmalı olduğundan beri bu, çalışmalıydı. Eğer bir hata, onda alınırsa, sözdizimi, biraz daha çok tahrif edilmesi gerekir, o artık, gözükmeyinceye kadar (Olasısız olmasına rağmen, o hem de, sınıflayan nedenlerin olduğu olabilir, uygulamada bir hatadır. Bu olayda, ASC veya DESC'i eklemek, problemi çözebilir). Hatalar olmadan işler ile emri içerirken bir defa geçerli bir sözdizimi saldırgan, sütun 1i'nden sütun 100'e emretmeyi değiştirir (Veya geçersiz olmak için kesin olan 1000 veya herhangi bir şey). Bu noktada, bir hata, oluşturulmalıydı, birer birer saymanın, çalışıyor olduğunu göstermek gerekir.

Saldırganın şimdi, sütun sayılarının, var olduğu tanımanın bir metodu var, ve hangisini yapmaktır peki şdur kolayca sütunların tam sayısını tanımasıdır. Saldırgan basitçe, bu sayıyı artırmaya ihtiyaç duyar, bir zamanda biri, bir hata, alınıncaya kadar (Bazı sütunların, sınıflamaya izin vermeyen bir tipten olabildiğinden beri, her zaman bir veya iki ekstra sayıyı test etmek için tavsiye edilebilirdir, ve gerçekten hataların, alındığına emin olur). Bu teknikle alanların sayısı, kolayca birer birer sayılandır, ve hiçbir hata mesajı, gerektirilmez.


b-Sutun Tiplerini Tanımak

Öyle, şimdiden geçerli sözdizimiyle , bildi, veritabanı satıcısı, kararlaştırdı, ve alanların sayısı, birer birer saydı, sol olan herkes, saldırgan, bütün alanların tiplerini tanımak için bunların hepsini tanıdı..
Alanı almak, doğru yazmak buna rağmen zor olabilir. Onlar bütünüyle, orijinal sorguya denk olmalıdır. Eğer, sadece birkaç alansa, bu kolayca, kaba kuvvet tarafından başarılabilir, ama eğer, daha çok varsa, sonra bir problem, ortaya çıkar. Şimdiden bahsedilen olarak, (Say, sayı,numara,data) 3 mümkün ana tip vardır, bundan dolayı 10 alan yoluna sahip olmak gerekir, (Neredeyse 60,000) 310 vardır, bileşimlerdir. Saniye başına 20 istekte, bu, neredeyse bir saatte alacak. Ondan alan daha çok sahip olmak için, tam süreci neredeyse imkansız olur.
Daha kol
ay bir teknik bu yüzden, karanlıkta çalışmanın olduğu zaman kullanılmalıdır. Bu, SQL'de geçersiz anahtar sözcüğün formunda gelir. (Bir ip veya bir tam sayı gibi) özel bir tipten olan statik alanların injection etmesinden farklı, geçersiz, herhangi bir tipe denk olabilir. Bir birliği injection etmek için bu yüzden mümkün olur, bütün alanların, geçersiz olduğu seçkin ifadedir, ve orada, hiçbir tip uygunsuzluk hatası olmaması gerekir. Bir sorguya önceki örneğe benzer bakmamız için bize izin ver:


SELECT CCNum,CCType,CCExp,CCName FROM CreditCards WHERE (AccNum=11223344 AND CardState='Active') AND UserName='johndoe'

Tek değişiklik, tek CCNum alanının, birkaçıyla değiştirildiğidir, bundan dolayı, daha çok alan vardır. Başarılı bir şekilde saldırganı farz ettirmek, (Bizim örneğimizde 4) bu sorgunun sonucunun sütunlarının sayısını saymaktır, şimdi bütün NULLs'le bir birlik ifadesini injection etmek basittir, ve izin hatalarını oluşturmayan (Yeniden, her problemi izole etmeyi denemek, bundan dolayı özel izin çıkışları üzerinde sonra tutulacak) maddeden bir sahip olmak gerekir. MS SQL'le, maddeden, basitçe ihmal edilen olabilir. Bu, geçerli sözdizimidir. Oracle, çift adlandırılan bir masayı kullanmak, faydalı olabilir. Bir nere her zaman sadece geçersiz değerleri içeriyor olan hiçbir rekor-takımın, öyle yanlış dönmüş olduğu olmayacak (Nere gibi 1=2) garantilerini değerlendirecek olan ifadenin olduğunu eklemek, daha fazla mümkün hatayı çıkarmak (Bazı uygulamalar uygun şekilde, geçersiz değerleri tutmayabilir) gerekir.


Şimdi Bir MS SQL server örneğine Bakalım:

11223344) UNION SELECT NULL,NULL,NULL,NULL WHERE 1=2 --

Bunun Sorgusuna bakalım:

SELECT CCNum,CCType,CCExp,CCName FROM CreditCards WHERE (AccNum=11223344) UNION SELECT NULL,NULL,NULL,NULL WHERE 1=2 --AND CardState='Active') AND UserName='johndoe'

Bu Tipin Geçersiz injection etmenin, iki maksada hizmet eder. Ana maksat, hiçbir hataya sahip olmayan çalışan bir birlik ifadesini almaktır. Bu birliğin hala, herhangi bir gerçek veriyi geri almamasına rağmen, o, ifadenin gerçekten, çalıştığı bir göstergeyi sağlar. Bu boş birliğin başka bir maksadı, kullanılan (Satıcı-özel bir masayı kullanmak, maddeden içeride adlandırır) veritabanının bir 100% teşhisini almaktır.
Geçersiz-temelli birlik ifadesi, çalıştığı andan itibaren, her sütunun tiplerini tanıması için önemsiz bir süreçtir. Her tekrarlamada tek bir alan, onun tipi için test edilir. Bütünüyle üç tip (Say, tam sayı, tel takar), alan için test edilir, bu sayılanlardan biri çalışmalıydı. Bu şekilde, o, sütun sayılarının gücüne üçten ziyade üç zamana sütunların sayısını alır. CCNum'un, bir tam sayı olduğunu farz etmek, ve bütün diğer alanların, ipler olduğu, birliğin takip eden akışı için , geçerli tipleri tanıyacaktır:

SQL Değer Kodları:
11223344) UNION SELECT NULL,NULL,NULL,NULL WHERE 1=2 --
No Error - Syntax is right. MS SQL Server Used. Proceeding.
11223344) UNION SELECT 1,NULL,NULL,NULL WHERE 1=2 --
No Error - First column is an integer.
11223344) UNION SELECT 1,2,NULL,NULL WHERE 1=2 --
Error! - Second column is not an integer.
11223344) UNION SELECT 1,'2',NULL,NULL WHERE 1=2 --
No Error - Second column is a string.
11223344) UNION SELECT 1,'2',3,NULL WHERE 1=2 --
Error! - Third column is not an integer.
11223344) UNION SELECT 1,'2','3',NULL WHERE 1=2 --
No Error - Third column is a string.
11223344) UNION SELECT 1,'2','3',4 WHERE 1=2 --
Error! - Fourth column is not an integer.
11223344) UNION SELECT 1,'2','3','4' WHERE 1=2 --
No Error - Fourth column is a string.
Saldırgan şimdi, bir gerçek geçerli birlik ifadesi kurdu, . Mümkün olduğu artıran sayıları kullanmak için tabii, hangi alanın, nerede olduğu sunmuş olduğunu tanıması gerekiyor. şimdi, saldırının maksatları için bunu gerçekte sömürmektir. Onun için, injection etme, olabilir, (tablolardaki ve onların sütunlarının listesi gibi) sistem tablolarından veriyi geri alırdı, geri alan asıl uygulama verisi ile izledi. Bu doküman, yapmaz, yine de, bu ayrıntılara gider, onların tam olarak, birkaç mevcut SQL İnjection etmesinde beyaz rablolar tanımlandığı gibi olur.

hacker_by_ali_27
03-27-2008, 08:57 PM
kardeşim neden alıntı yapıpta alıntı olarak belirmiyorsun?

recep0245
03-27-2008, 09:00 PM
alıntı malıntı yinede bir tşkr et:(