Sql Açığı Buldum Nasıl sızarım ?

xKemikkiran

Senior Hunter
22 Haz 2020
470
227
Zararlı yerlerde - Aydın
Hocam sqlmap ile yapabilirsiniz
Öncelikle sqlmap kalide kurulu gelir ama değilse kurulum için terminale
Git clone GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool

Ardından terminale sqlmap - h yazarak parametreleri bulabilirsiniz
Başlıca parametreler :

-u saldırılacak siteyi belirtir
--dbs mevcut veritabanlarının listesini çıkartır
-D veritabanını seçer
--tables seçilen veritabanının tablolarını gösterir
--columns Adı seçilen tablodaki kolonlar getirilir.
Not herhangi bir database den bilgi çekmek için yetkiye sahip olmak gerekir
Yetki kontrolu
--users kullanıcıların listesini gösterir
--passwords kullanıcıların parolasını gösterir
--privileges kullanıcı yetkilerini gösterir
--is-dba kullanıcının database de yetkisi olup olmadığını gösterir
Umarım yardımcı olabilmişimdir
İyi günler
 

Profesör

Kadim Üye
10 Nis 2020
5,088
1,608
-Türkistan-
Merhaba değerli üye;

SQL neden bir açık haline gelir ve nasıl sömürülür?​

Öncelikle burada anlattığım her şey etik amaçlı kullanımlar içindir. Yasadışı kullanımın sorumlulukları tamamen SİZE aittir.
Üstte dediğim gibi veritabanları, tıpkı yazılım dilleri gibi standart bir syntax türüne sahiptir ve bu veri tabanlarını yazan yazılımcıların yaptığı mantıksal hatalar doğrultusunda belirli sistemsel zafiyetler ortaya çıkar. SQL açığının asıl nedeni kullanıcıdan gelen request’i sorgulamadan ona karşılık gelen response’u kullanıcıya vermesidir. Maalesef bu zafiyet ne kadar hafife alınsa da veri güvenliği açısından şirketler için hiç iyi sonuçlar doğurmayabilir. Zira SQL Injection zafiyeti sayesinde veri tabanlarıyla root izni olmadan gerekli request’i yöneltip istediğiniz response’u alabilirsiniz.

Bu işlem iki şekilde olur. Birincisi olan Manuel Injection, Tester’ımızın elle yazılan sorgularla veri tabanında kayıtlı olan verilerin çekmesi işlemidir. İkincisi ve bana göre en tehlikelisi SQLMap…

SQL Açığı Nasıl Anlaşılır?​

SQL Injection site URL’lerinde belli olan bir zafiyettir. Tabi bu siteleri burada paylaşmamız etik olmayacağından ornek-site.com üzerinden gösterecek olursak;
https://www.ornek-site.com/page.php?id=5
Sonunda gördüğümüz ‘sayfa.php?id=x' yapısı bütün SQL Injection zafiyetlerinde bulunmaktadır. Fakat bu ibare bulunan bütün sistemlerde SQL açığı olmayabilir.
Bu bahsettiğimiz ibare aslında bir veri tabanının giriş kapısıdır ve bu işi yapabilmek için girişteki güvenlikten kaçmamız gerekir. Bu nedenle kılık değiştiririz. Bu işlem tırnak (‘) işaretiyle string bölümünden kaçmak demektir. Bu işlem sonrasında alacağınız hata şu şekilde olabilir:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '’index.php?id=2’’' at line 1​

Eğer bu hata varsa SQL açığı mevcuttur, hatta daha ilerisi olarak şunu söyleyebilirim; sayfa görüntüsünde bir değişiklik var ise zafiyetin mevcut olma ihtimali yüksektir. Fakat ileri seviye zafiyetleri sömürmek için biraz daha farklı parametreleri kullanacağız.
Manuel Injection kısmında istediğimiz SQL cümlesini elle URL çubuğuna girebiliriz veya benim anlatacağım kısım olan SQLMap parametreleriyle sömürme işlemine devam edebiliriz. Manuel Injection konusuna derin bir şekilde girmeyeceğim çünkü biraz profesyonellik gerektiren bir konu ve bazen başarısız olabiliyor. Fakat SQLMap bir sistemde zafiyet varsa kesinlikle veri çekme işlemi yapabilir hatta konu, ileri seviyelerde sistemlere shell sokarak root olmaya kadar gidebilir.
SQLMap, security Linux dağıtımlarında (örneğin: Kali, Parrot vs.) default olarak yüklenen bir hack tool’udur.
Veri tabanlarından veriler tıpkı bir rafta kitap saklamak gibidir. O kitabı almak için önce odaya, sonra dolaba, ardından rafa yaklaşıp kitaba erişirsiniz ya, veriler de aynı şekilde saklanır.
Burada oda veritabanı, dolap tablo, raf kolonlar, kitap ise verilere benzetilmiştir. Önce oda benzerindeki yapılar olan veri tabanlarını çekeriz. Daha sonra veri tabanının içinde bulunan ve dolap benzeri yapı olan “Tablo” yapılarını, raf benzetmesi yaptığımız “Kolon” yapılarını çekeriz. En son eriştiğimiz kademe olan “Veriler” kısmı da zaten kitabın ta kendisi oluyor.
SQLMap’te bu kitaba erişmek için attığınız adımların her biri birer parametre olarak karşımıza çıkmaktadır. Hemen bir örnek ile inceleyelim.

-u​

Öncelikle -u parametresiyle başlayalım. “-u” parametresi tool’a, sitenin girileceğini belirtir.

--dbs​

“Databases” kelimesinin kısaltmasıdır. Sitede bulunan veri tabanlarını. Çekmeye yarar.

Kısaca biz parametrelerle programa şunu söylemekteyiz, “Bana bu URL’in veri tabanlarını ver. ”​


Geldik ikinci aşamaya. Neredeyse her sistemde information_schema adlı bir veritabanı mevcuttur. İsterseniz merak ederseniz onun içine de bakabilirsiniz fakat bu veritabanları genellikle boştur. Asıl veriler mevcut olan diğer veri tabanlarında tutulur. Örneğin “database” adlı bir veritabanı bulunduğunu düşünürsek:

--tables​

“tables” parametresi üstte bahsettiğim tablo yapılarına tekabül etmektedir. Buradaki cümlecikle tool’a söylediğimiz şudur; “database veri tabanındaki tabloları bana getir. ”
Ayriyeten az önce veri tabanlarını çekmek için kullandığımız --dbs parametresi, -D olmuş durumda.
Bir parametrenin bir sonraki adımına geçerken ‘-’ karakterlerinden biri silinir ve parametrenin baş harfi kullanılarak diğer adıma geçer. Örn;
--dbs → -D
--tables →- T

Haydi üçüncü ve veriye ulaşmadan önceki son aşamaya geçelim.
Veritabanı ağacında tablodan sonra ne geldiğini hatırlıyorsunuzdur. Hatırlamayan arkadaşlar için tekrar hatırlatayım, sıra kolonlarda.
Diyelim ki “table” adında bir adet tablomuz olsun. Bunun kolonlarına erişmek için kullanacağımız komut;
sqlmap -u https://www.ornek-site.com/page.php?id=5 - D database -T table --columns
--columns parametresinin ne olduğunu açıklamamıza sanırım gerek yok. Tool’a dediğimiz cümle tam olarak şu: “database veri tabanındaki table tablosundan kolonları çek.”

Gelelim son adım olan veri çekme işlemine. Yukarıda sırasıyla veri tabanlarını, tabloları ve kolonları çektik. Yani ilk başlarda verdiğim örneğe göre sırasıyla odanın, dolabın ve rafın bir nevi fotoğrafını çekmiş olduk.
Bu durumda aldığımız kolonların şu şekilde olduğunu düşünürsek;
column1, column2, column3…column8
sqlmap -u https://www.ornek-site.com/page.php?id=5 - D database -T table -C column1 --dump
Burada bir kolondaki verileri çekmek için bu şekilde bir komut girdisi yapabiliriz. Birden fazla kolondaki veriyi çekmek için ise (örn; username,password veya id,username,password gibi);
sqlmap -u https://www.ornek-site.com/page.php?id=5 — D database -T table -C column1,column2 --dump
şeklinde bir komut satırı kullanabiliriz. Genellikle iki adet kolonu çekmenin amacı birbirleriyle bağlantılı veri kolonlarının karışmaması içindir. Örneğin bir sistemde admin kullanıcının id’si 1, kullanıcı adı admin, şifresi admin123 gibi şeyler olabilir. SQLMap bu bilgileri tek tek çekince karışık vaziyette karşınıza çıkarsa da hepsini birlikte çekince bir tablo şeklinde önünüze sunar.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.