Bütün THT forum üyelerini ve dışarıdan gelen ziyaretçilerimizi selamlıyor, herkese iyi akşamlar diliyorum.
Bu anlatımımda, genel olarak güvenlik uzmanlarının sıklıkla kullandığı bir aygıt olan SQL ile alakalı kullanım şablonları aktaracağım sizlere.
Peki ne yapabiliriz bununla diyenler olacaktır, web aplikasyonlarda Enjeksiyon saptanması ve hatta zafiyetlerin exploit duruma getirilmesi için çalıştırabiliriz dostlarım.
Ve tabii open-source yazılmıştır belirtmekte fayda var.
Kendisine has bulunan nitelikleri ile database serverlerin denetimini elde etmekten tutun da, hedef haline getirdiğimiz bir serverin işletiminde kod yürütmeye kadar birden fazla işlemde yardımcı oluyor bizlere dostlarım.
Çokça database management system bölümlerine dayanak sağlayan uygulamamız için indirme linkini hemen şuraya hazır konuya giriş yapmamışken bırakayım dostlarım.
GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool
Kolay Kullanım Şekilleri
Şimdi dostlarım temel sayılan değişkenlerin kullanımlarına yönelik ibareler ile başlamak istiyorum, siz de bilgi sahibi olacaksınız konuyu sonuna kadar takip ederseniz.
Konu hakkında az çok bir şey duyan birisi bile en çok kullanılan değişkenin -u ya da --url olduğunu biliyordur dostlarım.(Bu URL'i temsil eden bir değişkendir canlar.)
Hemen aşağıya görsel olarak vereceğim değişkeni, komut ile bizim target dediğimiz web siteyi tanımlıyoruz.
Kod yardımı ile scanning işlemi yürütmek istediğiniz url'de SQL açığı var ise, açığın tipi, kullanılan DBSM gibi bunun harici verileri de bizlere gösterecektir.
Sonrasında ise SQL Enjeksiyon'un varlığından emin olduğumuzda adres aracılığı ile --dbs değişkenini yazarak hazır olan database list'i ekranımızda göreceğiz.
Dostlarım yukarıda verdiğim son görselden de anlayabileceğiniz gibi elimizde bulunan databaselerin hepsini listlemiş bulunuyoruz.
Bunun akbainde sıra sıra devam edecek ve tabloları, kolon ve tutanakları hatta yine vereceğim değişkenleri kullanacağız.
-D:
Dostlarım bu değişken sayesinde database ismini belirttik.
--tables:
Belirtmiş olduğumuz database'de tablo adlarını çekmemize yardımcı olacak değişkendir canlar.
-T:
Çektiğimiz tablo adlarını kolonlara göndermek istediğimiz adları yine bu değişkenle yazacağız.
--columns:
İsmiini belirttiğimiz tablodaki kolonları çeker arkadaşlar.
-C:
İstediğimiz kolon adını yazdığımız kısım.
--dump:
Ve bu değişkenimiz ile kolonlarımızdaki verileri bizlere gösterir.
Bu anlatımımda, genel olarak güvenlik uzmanlarının sıklıkla kullandığı bir aygıt olan SQL ile alakalı kullanım şablonları aktaracağım sizlere.
Peki ne yapabiliriz bununla diyenler olacaktır, web aplikasyonlarda Enjeksiyon saptanması ve hatta zafiyetlerin exploit duruma getirilmesi için çalıştırabiliriz dostlarım.
Ve tabii open-source yazılmıştır belirtmekte fayda var.
Kendisine has bulunan nitelikleri ile database serverlerin denetimini elde etmekten tutun da, hedef haline getirdiğimiz bir serverin işletiminde kod yürütmeye kadar birden fazla işlemde yardımcı oluyor bizlere dostlarım.
Çokça database management system bölümlerine dayanak sağlayan uygulamamız için indirme linkini hemen şuraya hazır konuya giriş yapmamışken bırakayım dostlarım.
GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool
Kolay Kullanım Şekilleri
Şimdi dostlarım temel sayılan değişkenlerin kullanımlarına yönelik ibareler ile başlamak istiyorum, siz de bilgi sahibi olacaksınız konuyu sonuna kadar takip ederseniz.
Konu hakkında az çok bir şey duyan birisi bile en çok kullanılan değişkenin -u ya da --url olduğunu biliyordur dostlarım.(Bu URL'i temsil eden bir değişkendir canlar.)
Hemen aşağıya görsel olarak vereceğim değişkeni, komut ile bizim target dediğimiz web siteyi tanımlıyoruz.
Kod yardımı ile scanning işlemi yürütmek istediğiniz url'de SQL açığı var ise, açığın tipi, kullanılan DBSM gibi bunun harici verileri de bizlere gösterecektir.
Sonrasında ise SQL Enjeksiyon'un varlığından emin olduğumuzda adres aracılığı ile --dbs değişkenini yazarak hazır olan database list'i ekranımızda göreceğiz.
Dostlarım yukarıda verdiğim son görselden de anlayabileceğiniz gibi elimizde bulunan databaselerin hepsini listlemiş bulunuyoruz.
Bunun akbainde sıra sıra devam edecek ve tabloları, kolon ve tutanakları hatta yine vereceğim değişkenleri kullanacağız.
-D:
Dostlarım bu değişken sayesinde database ismini belirttik.
--tables:
Belirtmiş olduğumuz database'de tablo adlarını çekmemize yardımcı olacak değişkendir canlar.
-T:
Çektiğimiz tablo adlarını kolonlara göndermek istediğimiz adları yine bu değişkenle yazacağız.
--columns:
İsmiini belirttiğimiz tablodaki kolonları çeker arkadaşlar.
-C:
İstediğimiz kolon adını yazdığımız kısım.
--dump:
Ve bu değişkenimiz ile kolonlarımızdaki verileri bizlere gösterir.
Anektod:
Yalnız 1 (-) ya da birden fazla (--) kullandığımızda değişken ile değişkenin elde edeceği değer ortasında space ya da eşittir ibaresinden hangisini seçeceğini karıştıran arkadaşlar olabilir onlar için bu kısmı anlatıyorum. 1(-) değişken space, (--) çift değişken eşittir şeklinde aklınıza yazabilirsiniz.
Önemli Not:
İstediğimiz veritabanından bilgi alabilmek için sorgu dili ile tahlilini yaptığımız aplikasyonun userinin serverda tam sorumlu person halinde hazır kıta beklemesi çokça onemlidir, unutmayalım canlar.
Önemli Not:
İstediğimiz veritabanından bilgi alabilmek için sorgu dili ile tahlilini yaptığımız aplikasyonun userinin serverda tam sorumlu person halinde hazır kıta beklemesi çokça onemlidir, unutmayalım canlar.
İzin Denetimi
Az önce anlattığım şekilde, belirli kodlardan sonuç alabilmek adına connection kurduğumuz kişinin full+full yetkili olması gerekmektedir.
Tabii denetimini yapmamız için bize yardımcı olacak yine bazı değişkenlerden bahsedeceğim canlar.
Database userlerine bakabilmek için --users değişkenini, user passleri için --passwords değişkenini, user authorizationları için --privileges değişkenini ve son olarak user role kavramı için ise --roles
değişkenini kullanabiliriz değerli THT üyeleri ve ziyaretçileri.
Userlerin izin ya da rolleri ile ilgili bilgi istiyorsak user nickini -U değişkenini ile kullanabiliriz.
Eğer bu değişkeni kullanmazsak "şuan ki kullanıcı" şeklinde database'de roller ekranda gözlemlenebilir.
Yine user database manager mi yoksa değil mi bakmak istiyorsak --is-dba değişkenini kullanabiliriz canlar.
Kullandığımızda "True or "False" kısmını görebilirsiniz.
Bahsi geçen değişkenler ile alakalı örnek bir görseli aşağıya bırakıyorum.
İkinci görseli görüntüyü bozmaması açısından tam ekran vermedim, anlayışla karşılayabileceğinizi umuyorum.
Çoklu Target Scan Etmek
Bizler sql'in -m değişkeni ile çokça URL'de scanning işlemi yapabilmekteyiz.
Örnek verecek olursam görselde bıraktığım links.txt filesinde var olan URL'lerin hepsini sql ile scan edebiliriz.
Ama önce değişkenin akabinde filesin konumu belirtilmelidir.
Nasıl yapacağınızı görsel olarak bırakıyorum canlar.
Bir Talep Filesi Tahsis Etmek
Bunun için de -r değişkenini kullanacağız arkadaşlar.
Rastgele bir proxy devreye girecek ve talebinizi kopyalayıp txt olarak kaydetmenize olanak sağlıyor.
Örnek verecek olursam talepler.txt isimli bir dosyam var ve içerdikleri görselde vereceğim şekildedir diyelim.
SQL'de kullanım şekli vereceğim gibi olacak dostlarım.
POST Talebinde Bulunmak
Sqlmapi kullanan kişiler arasında yaygın bir düşünce var sadece GET uygulamaları yapılabildiğine dair.
Ancak böyle bir şey yok arkadaşlar GET kadar POST talebinde de bulunabiliyoruz.
Giriş ya da search kısmında olan SQL Enjeksiyon zafiyetlerini saptamak hatta bu zafiyetleri exploid yapabilmek için kullanıcılarına --data değişkeni ile post talebinde bulunmaları için imkan vermiştir bu yazılım.
Örnek bir admin paneli görseli bırakacağım ve bu adreste bir sql açığı aradığımızı düşünelim dostlarım.
Sql'da analiz adına POST verisi lazım bile.
Bu veriyi rastgele proxy yazılımı ile elimize çekebiliriz.
Saldırı örneğini de görsel olarak bırakıyorum.
Göreceğiniz gibi sql enjeksiyon search ettiğimiz kısmın post verisini, değişkenlerden hangilerini analiz için kullanacağını -p ile --dbsm verilerini entegreledik.
POST verilerinin sql'e çıkarılamayacağı hallerde işlemi talep filesine upload yaparak da yürütebiliriz.
Onun da örneğini veriyorum görsel olarak.
Kullanmamız gereken kodu da veriyorum.
Ek Not:
Basic değişken olarak bildiğimiz --dbms değişkeni yaptığımız işlemlerde süreci hızlandırabilir.
Evvelce bilinen veya analiz işlemi esnasında öğrenilen database management systemlarden neyi değerlendirdiğimizin verisini değişkene verirsek sql, daha sonrasında yalnızca verilen dbsm'e dikkatini verecektir.
Farklı DBMS'lere icap eden analizleri pass ederek atakların zamanını minimuma indirecektir.
Ancak böyle bir şey yok arkadaşlar GET kadar POST talebinde de bulunabiliyoruz.
Giriş ya da search kısmında olan SQL Enjeksiyon zafiyetlerini saptamak hatta bu zafiyetleri exploid yapabilmek için kullanıcılarına --data değişkeni ile post talebinde bulunmaları için imkan vermiştir bu yazılım.
Örnek bir admin paneli görseli bırakacağım ve bu adreste bir sql açığı aradığımızı düşünelim dostlarım.
Sql'da analiz adına POST verisi lazım bile.
Bu veriyi rastgele proxy yazılımı ile elimize çekebiliriz.
Saldırı örneğini de görsel olarak bırakıyorum.
Göreceğiniz gibi sql enjeksiyon search ettiğimiz kısmın post verisini, değişkenlerden hangilerini analiz için kullanacağını -p ile --dbsm verilerini entegreledik.
POST verilerinin sql'e çıkarılamayacağı hallerde işlemi talep filesine upload yaparak da yürütebiliriz.
Onun da örneğini veriyorum görsel olarak.
Kullanmamız gereken kodu da veriyorum.
Ek Not:
Basic değişken olarak bildiğimiz --dbms değişkeni yaptığımız işlemlerde süreci hızlandırabilir.
Evvelce bilinen veya analiz işlemi esnasında öğrenilen database management systemlarden neyi değerlendirdiğimizin verisini değişkene verirsek sql, daha sonrasında yalnızca verilen dbsm'e dikkatini verecektir.
Farklı DBMS'lere icap eden analizleri pass ederek atakların zamanını minimuma indirecektir.
Forms Değişkeni
POST talepleriyle ilgili farklı bir değişken de --forms değişkenidir.
Değişken aracılığı ile adresteki şekillerin sqlmap yardımı ile saptamak olağandır.
Kullanımını da veriyorum arkadaşlar.
Akabinde sqlmaq bize bu şekili denemek ister miyiz şeklinde sual yöneltecek eğer istersek POST bilgilerini planlamamızı ister.
Böyle bir istekte bulunmuyorsak olumsuz yönde cevaplıyoruz bu suali dostlarım.
Uniform Resource Locator'de Yeniden Yazma'nın Etkin Olması
Smap, URI yollarına yönelik manuel değil de oto bir deneme yapılmamasına bağlı bu yolları manuel seçer ve böylelikle deneme yapılmasına olanak verir.
Teknik genellikle URL Yeniden Yazma niteliğinin etkin bulunduğu anlarda yararımızadır.
Tabii bu davranışı yapabilmesi için de yalnızca değişkenlerin değerinin sonunda yıldız karakteri olmalıdır.
Örneğini veriyorum bunun da.
URL Yeniden Yazma etkin olmasaydı da görselde gördüğünüz gibi görünecekti.
Az önce anlattığım üzere de hangi değişkenin seçilmesi hacetine manuel şekilde karar kılabilmek dışında, smap bizim onayımızı alınca kendiliğinden de gerçekleştirir.
HTTP Kimlik Doğrulaması
Smap ile kimlik onayı talep eden yazılımlarda da denetim yapabildiğimizi biliyor muydunuz dostlarım?
Bu denetim işlemi için kullanılan değişken ise --auth-type değişkenidir.
Lazım olan session verilerini ise --auth-cred değişkeni ile işletiyoruz.
Örnek olarak yine görselini bırakacağım hemen aşağıya canlar.
Session bilgilerinde olası bir terslikte görselini vereceğim hata ile karşılaşacaksınız.
Proxy ve Tor Değişkenleri
Proxy yürütmek için verilen değişken --proxy değişkenidir sevgili forum üyeleri.
Yürütülecek proxy'e dair session var ise --proxy-cred değişkeni ile tanımlama yapmamız da şarttır.
Ve bir filesten Proxy list çekebilmek adına da --proxy-file değişkenini kullanabiliyoruz.
Unutmadan ekleyeyim, Proxy'e protokol girmek zorundayız, görsel olarak bırakıyorum onu da.
Tor Değişkeni
Tor yürütmek de çok kolay bir işlemdir aslında.
Tor ile denetim yapmak adına ilk olarak sistemimizde Tor Browser'ın kurulu olduğundan emin olmalıyız.
Smap'te yürütülmesi --tor değişkeni ile olmaktadır.
Tabii öncesinde Tor'u çalıştırıyoruz.
Ve sonrasında --tor-proxy ile --tor-type değişkeni ile girişini veriyoruz.
Kullanımına ait görseli bırakıyorum.
Bu kısımda sizlerden dikkatinizi vermenizi istediğim bir bölüm var ki o bölüm Tor'un kendine özgü port numberidir.
Bu number genelde 9050'dir değişmez fakat Tor Browser'in ise 9150 şeklinde gelir.
Ek olarak --check-tor değişkeniyle Tor bağlantımızın stabilitesine bakalım.
Görsel olarak veriyorum smap çıktısını.
Level - Risk Değişkenlerinin Kullanımı
Bu değişkenler smap'in ne denetimleri yapacağını gösterir.
İlk ayarlı biçimde --level değişkeni 1 şeklinde gelmektedir 5'e kadar değer çekebilir.
Buna ek olarak --risk değişkeni de ilk biçimde 1 gelir 3'e kadar değer çeker.
Yine örneğini veriyorum sevgili forum üyeleri.
Türlü sınamalardan sonra smap'in karşımıza çıkardığı hata ekranını da bırakıyorum.
Smap, targetimize elverişli denetimi yapamamış ve bu sebeple targetta SQL Enjeksiyon'un varlığını da onaylayamamış.
Şu an biz komutlarımıza denetimlerimizi farklılaştıran --risk değişkeni ve payload türlerini belirleyen --level değişkenini ekleyeceğiz.
Bir müddet bekledikten sonra "Boolean-based-blind", "AND/OR time based blind" şeklinde s-inj zafiyeti bulduğumuzu görüyoruz.
Bunun yanı sıra database adlarını bulabilmek adına da denemeler yapıyor.
Görsel olarak veriyorum.
Önemli Not:
Risk ve level değerleri yükseltilir ise yapılacak deneme sayısı da çoğalacaktır.
Denemeleri daha da çabuklaştırabilmek adına --threads değişkenini kullanabiliriz.
Yine değişken sayesinde connect rakamlarında oynama da yapabiliriz.
Önayar değer 1 iken çokça payload'ın birlikte denenmesi için 10 değer girebiliriz.
Buna artı şekilde --eta değişkeni ile yaptığımız işlemlerin farazi bitiş zamanını ekranda görebiliriz.
Örnek görselini yine bırakıyorum.
Hangi level ve risk çapında, hangi database'ye hangi denemenin yapıldığını smap\xml kökünde mevcut payloads fileslerinde barınan XML kısımlarına bakarak öğrenme gibi durum söz konusu olabilir.
Hatta kişiye özel payload tanılamak adına fileslerde işlem işlem yapabilirsiniz.
İlk ayarlı biçimde --level değişkeni 1 şeklinde gelmektedir 5'e kadar değer çekebilir.
Buna ek olarak --risk değişkeni de ilk biçimde 1 gelir 3'e kadar değer çeker.
Yine örneğini veriyorum sevgili forum üyeleri.
Türlü sınamalardan sonra smap'in karşımıza çıkardığı hata ekranını da bırakıyorum.
Smap, targetimize elverişli denetimi yapamamış ve bu sebeple targetta SQL Enjeksiyon'un varlığını da onaylayamamış.
Şu an biz komutlarımıza denetimlerimizi farklılaştıran --risk değişkeni ve payload türlerini belirleyen --level değişkenini ekleyeceğiz.
Bir müddet bekledikten sonra "Boolean-based-blind", "AND/OR time based blind" şeklinde s-inj zafiyeti bulduğumuzu görüyoruz.
Bunun yanı sıra database adlarını bulabilmek adına da denemeler yapıyor.
Görsel olarak veriyorum.
Önemli Not:
Risk ve level değerleri yükseltilir ise yapılacak deneme sayısı da çoğalacaktır.
Denemeleri daha da çabuklaştırabilmek adına --threads değişkenini kullanabiliriz.
Yine değişken sayesinde connect rakamlarında oynama da yapabiliriz.
Önayar değer 1 iken çokça payload'ın birlikte denenmesi için 10 değer girebiliriz.
Buna artı şekilde --eta değişkeni ile yaptığımız işlemlerin farazi bitiş zamanını ekranda görebiliriz.
Örnek görselini yine bırakıyorum.
Hangi level ve risk çapında, hangi database'ye hangi denemenin yapıldığını smap\xml kökünde mevcut payloads fileslerinde barınan XML kısımlarına bakarak öğrenme gibi durum söz konusu olabilir.
Hatta kişiye özel payload tanılamak adına fileslerde işlem işlem yapabilirsiniz.
Bahsedebileceğim Diğer Genel Değişkenler
Smap tabanında sayılması insanı yoran başlı başına her biri faydalı değişkenler bulundurur.
Konumuzun sonuna yaklaşıyoruz, bu kısıma gelene dek bazı değişkenleri örnekleri ile beraber aydınlatmaya çalıştık.
Bitirmeden bazı faydalı olabilecek değişkenleri de sıralayacağım.
--batch: Değişken ile smap’in yönelttiği suallere otomatik biçimde önayarlı cevabı veriyoruz.
--answer: --answer="quit=N,follow=N" şeklinde kullanırsak bize yöneltilen sualleri oto cevaplar ancak bizim istediğimiz biçimde.
-v: Önayarı 1’dir. 0-6 arası değer girebiliriz.
Bu değişken ile denemeler esnasında karşılaştığımız logları smap ekranında görebiliriz.
-t: Bütün HTTP yoğunluğunu ekranda göstermez, bunun yerine bizim belirliyeceğimiz bir txt filesine yollar.
--version: Mevcut smap sürümünü bizlere gösterir.
--update: Smap'i oto biçimde update eder.
Ancak Windows işletimlerde bu komut yürütülemez, update'yi Windows kullananlar elle yapmak zorundadır.
Okuyan herkese teşekkürü borç bilirim.
Konumuzun sonuna yaklaşıyoruz, bu kısıma gelene dek bazı değişkenleri örnekleri ile beraber aydınlatmaya çalıştık.
Bitirmeden bazı faydalı olabilecek değişkenleri de sıralayacağım.
--batch: Değişken ile smap’in yönelttiği suallere otomatik biçimde önayarlı cevabı veriyoruz.
--answer: --answer="quit=N,follow=N" şeklinde kullanırsak bize yöneltilen sualleri oto cevaplar ancak bizim istediğimiz biçimde.
-v: Önayarı 1’dir. 0-6 arası değer girebiliriz.
Bu değişken ile denemeler esnasında karşılaştığımız logları smap ekranında görebiliriz.
-t: Bütün HTTP yoğunluğunu ekranda göstermez, bunun yerine bizim belirliyeceğimiz bir txt filesine yollar.
--version: Mevcut smap sürümünü bizlere gösterir.
--update: Smap'i oto biçimde update eder.
Ancak Windows işletimlerde bu komut yürütülemez, update'yi Windows kullananlar elle yapmak zorundadır.
Okuyan herkese teşekkürü borç bilirim.