SQLMap parametre ve seçenekleri

sqlmap oldukça fazla parametre ve seçeneğe sahip bir araç. Github sayfasında komut satırı seçenekleri hakkında uzun bir döküman yer alıyor. Bu dökümandaki bazı sık kullanılan seçenekleri türlerine göre gruplayarak Türkçe’ye çevirdim ve bazılarına deneyimlerimden elde ettiğim açıklamalar da ekledim. Bu sayfadaki parametre listesine ve açıklamalarına eklemeler yaparak sürekli olarak güncelleyeceğim. Konuyla ilgili olanlar sqlmap ile ilgili şurada karaladıklarıma da bakmak isteyebilirler.

Seçeneklerin gruplaması şu şekilde:

Temel/zorunlu Seçenekler

sqlmap’in çalışabilmesi için bu seçeneklerden enaz birine ihtiyaç vardır.

ParametreAçıklama
-u URLTaranacak URL
Biçim: -u "http://www.ozgurkoca.com/path/file.htm?variable=1"
-d DIRECTDoğrudan veritabanı bağlantısı için bağlantı string’i
Biçim: -d DBMS://DATABASE_FILEPATH veya
-d DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME
-l LOGFILEHedef URL’leri Burp veya WebScarab proxy dosyasından parseller.
-m BULKFILEBu parametre taranacak URL’leri bulunduran metin dosyasının yolunu belirtir. Metin dosyasının her bir satırında bir URL yer almalıdır.
-r REQUESTFILEİstek (request) dosyasının yolunu tanımlar. -u ile bir URL belirtilebileceği gibi içerisinde cookie ve referer gibi HTTP başlıklarının yer aldığı tam bir HTTP isteği gönderilir. Bu istek örneğin daha önceden Burp Suite gibi bir araçla yakalanan bir istek olabilir. Genellikle belli bir cookie ve session ortamı üzerinden tarama yapılmak istendiğinde kullanılır.
Biçim: Dosya HTTP isteğini veya HTTPS işlemini içerebilir.
-g GOOGLEDORKGoogle dork sonuçlarının URL’lerini hedef olarak kullanır.
-c CONFIGFILESeçenekleri yapılandırma dosyasından yükle.
–wizardKılavuzlu bir tarama yapmak için kullanılır.
–updatesqlmap’i son sürümüne günceller
–purgesqlmap veri dizinini boşaltır.
–dependenciesKayıp sqlmap bağılılıklarını araştırır.
-hTemel yardım sayfasını görüntüler.
-hhGelişmiş yardım sayfasını görüntüler
–versionsqlmap sürüm numarasını görüntüler.
-v VERBOSEsqlmap’in çalışması sırasında ekrana basılacak çıktının detay seviyesi.
infografiği gör

Detay seviyesi (-v) seçeneğinin değeleri

0Yalnızca Python traceback, hata ve kritik mesajlar.
10’a ek olarak bilgi ve uyarı mesajları.
21’e ek olarak hata ayıklama mesajıları.
32’ye ek olarak enjekte edilen payload’ları (yükler).
43’e ek olarak HTTP istekleri.
54’e ek olarak HTTP yanıt başlıkları.
65’e ek olarak HTTP yanıtlarının içerikleri.

Keşif Seçenekleri (enumeration)

ParametreAçıklama
–allSistem alabildiği herşeyi (veritabanı,tablolar) dışarı almaya çalışır. Bu anahtar, kullanıcının tek bir anahtar kullanarak uzaktan erişilebilen her şeyi almak istediği durumlarda kullanılabilir. Hem yararlı hem de yararsız verileri alan çok sayıda istek oluşturacağından bu önerilmez.
-b, –bannerVeritabanı sunucusunun adı ve sürüm bilgilerini içeren tanıtıcı başlığını okumaya çalışır.
–current-userHalihazırda taranan uygulamanın kullandığı veritabanı kullanıcısının adını getirir.
–current-dbHalihazırda taranan uygulamanın kullandığı veritabanının ismini getirir.
–hostnameVeritabanı sunucusunun hostname’ini getirir.
–is-dbaVeritabanı kullanıcısının yönetici olup olmadığını görüntüler.
–usersEtkin kullanıcı yönetici ise veritabanı kullanıcılarını listeler.
–passwordsEtkin kullanıcı yönetici ise veritabanı kullanıcılarının parola hash’lerini listeler.
–privilegesEtkin kullanıcı yönetici ise veritabanı kullanıcılarının yetkilerini listeler.
–rolesEtkin kullanıcı yönetici ise veritabanı kullanıcılarının rollerini listeler.
–dbsVerilen URL’i exploit edebildiyse sunucudaki veritabanı isimlerini listeler.
–tablesTablo isimlerini getirir.
–columnsBelirtilen veritabanı (-D) ve tablonun (-T) sütunlarını getirir.
–exlude-sysdbsSistem veritabanlarını dışarıda bırakır, sadece kullanıcı veritabanlarının dökümünü alır. Örneğin –dump-all ile birlikte kullanıldığında sistem veritabanlarının dökümünü almaz.
-DÜzerinde işlem yapılacak veritabanını belirtir.
-TÜzerinde işlem yapılacak tablonun adını belirtmek için kullanılır.
-CÜzerinde işlem yapılacak tablo sütununun adını belirtmek için kullanılır.
–schemaKullanıcı bu anahtarı kullanarak bir DBMS şeması alabilir. Şema listesi, ilgili türleriyle birlikte tüm veritabanlarını, tabloları ve sütunları içerecektir. –exclude-sysdbs ile birlikte, sistem dışı veritabanlarını içeren şemanın yalnızca bir kısmı alınacak ve gösterilecektir.
–countKullanıcı, istenen tabloyu dump etmeden önce tablo(lar)daki kayıt sayısını bilmek isterse, bu anahtarı kullanabilir.
–dumpVeritabanı/tablonun tam dökümünü alır. -T,-D ve -C ile birlikte kullanılmalıdır. Dökümlerin kaydedildiği output dizini komutun icrası sonrasında ekranda görüntülenir. Sadece -D ile kullanılırsa tüm veritabanının dökümü bir CSV dosyasına kaydeder.
–dump-allEğer yapabilirse tüm veritabanlarının tüm tablolarının dökümünü alır.
–dump-formatAlınacak dökümün biçimini ayarlar. CSV, HTML ve SQLITE biçimlerinden biri olabilir. CSV kullanılıyorsa ayraç olarak hangi karakterin (tab, virgül, boşluk vb) ne olacağı –csv-del parametresi ile belirlenebilir.
–startDump’ın kaçıncı kayıttan başlayacağını belirtir.
–stopDump’ın kaçıncı kayıtta sonlanacağını belirtir.
–firstDump’ın kaçıncı kolondan başlayacağını belirtir.
–lastDump’ın kaçıncı kolondan başlayacağını belirtir.
–common-tablesBir nedenden dolayı mevcut tabloların isim listesi alınamıyorsa. sqlmap bazı çok sık kullanılan tablo isimlerini kontrol ederek bulmaya çalışabilir. Tablo isimlerinin alınamamasına neden olabilecek durumlar örneğin information_schema’nın bulunmadığı MySQL 5.0 öncesi sürümler ve etkin kullanıcının sistem tablolarına erişim yetkisinin bulunmadığı durumlar.
–common-columnscommon-tables’a benzer şekilde sütun (alan) isimlerinin alınamadığı durumlarda çok sık kullanılan sütun isimlerinin teker teker denenerek bulunmaya çalışılmasını söyler.

Tespit Seçenekleri

Zafiyet araştırmasının tespiti sırasında aşağıdaki seçenekler kullanılır.

ParametreAçıklama
–level=LEVELVarsayılan değeri 1’dir ,enfazla 5 olabilir. Bir zafiyet bulunamadıysa güvenlik araştırmacısı bu seviyeyi artırmalıdır. Yüksek değerler daha fazla giriş noktası ve türünün denenmesini sağladığından taramanın daha uzun sürmesine neden olur. Örneğin parametreler tüm seviyelerde her zaman GET ve POST yöntemleri ile test edilirken, HTTP Cookie başlık değerleri 2. seviyeden itibaren ve HTTP User-Agent/Referer başlıklar değerleri de 3. seviyeden itibaren sınanır. 4. seviye tekniğin türüne göre daha fazla sayıda deneme yapar. 5. seviye zafiyet testi için yeni bir HTTP başlığı ekler. Sonuç olarak, bir SQL enjeksiyonunu tespit etmek ne kadar zorsa, –level değeri o kadar yüksek ayarlanmalıdır. Sevilere göre ortalama istek sayısı: #1<100 reqs, #2(100-200)reqs, #3(200-500)reqs, #4(500-1000)reqs ve #5>1000reqs.
infografiği gör
–risk=RISKsqlmap’in yapacağı testlerin risk seviyesini belirler. Ençok 3’dür. Denemeler yapılırken veritabanının veya web uygulamasının çalışmasının etkilenme riski vardır. Varsayılan değer, SQL enjeksiyon noktalarının çoğu için zararsız olan 1’dir. Risk değeri 2, yoğun sorgu zamanına dayalı SQL enjeksiyonları için testleri varsayılan düzeye ekler ve değer 3, ayrıca VEYA tabanlı SQL enjeksiyon testlerini ekler. Bazı durumlarda, bir UPDATE deyimindeki SQL enjeksiyonu gibi, VEYA tabanlı bir yükün enjekte edilmesi, tablonun tüm girişlerinin güncellenmesine yol açabilir ve bu kesinlikle saldırganın istediği şey değildir, hedef sisteme zarar verebilir.
infografiği gör
–string=STRINGSorgunun True olarak değerlendirilmesi için karşılaştırılacak string ifade.
–not-string=FALSE-STRINGSorgunun False olarak değerlendirilmesi için karşılaştırılacak string ifade.
–regexp=REGEXPSorgunun True olarak değerlendirilmesi için kullanılacak düzenli ifade (regular expression)
–code=CODESorgunun True olarak değerlendirilmesi için hedef sistemden dönecek olak HTTP yanıt kodu. (örn: 20x,30x)
–smartYalnızca pozitif buluşsal yöntem(ler) (heauristic) varsa kapsamlı testler gerçekleştirir

Risk (–risk) seçeneğinin değerleri:
Risk seçeneğine parametre olarak verilen sayı, sqlmap’in gerçekleştireceği test eylemlerinin saldırganı ne ölçüde açığa çıkaracağını belirtir. En düşük seviyede gerçekleştirilen testler karşı tarafca pek fark edilmezken, daha yüksek kategorideki testler verilerde toplu değişikliklere neden olabilir.

1Hızlı, fark edilmeyen testler (varsayılan)
2Zamana dayalı SQLi (time-based-sqli) gibi uzun ve yavaş veri işlemeyi içeren testler. Çok sayıda request gerçekleştirir. –thread ile kullanıldığında hedef veritabanında ağır yükler oluşturabilir.
3OR-tabanlı SQLi ve olası veri manipülasyonunu içerek testler gerçekleştirir.

Seviye (–level) seçeneğinin değerleri:
Bu seçenek, gerçekleştirilecek testlerin hacmini ve sağlayacakları geri bildirimin kapsamını belirler. Daha yüksek bir değer, daha kapsamlı kontroller uygular.

1Sınırlı sayıda test/istek; GET ve POST parametrelerini test eder (varsayılan)
2Çerezleri de test eder.
3Çerezleri, User-Agent ve HTTP Referer’i da test eder.
4Parametrelerdeki boş değerleri ve diğer hataları da test eder.
5Payload’ları kapsamlı bir liste dosyasından test eder.

Enjeksiyon seçenekleri

Aşağıdaki seçenekler, hangi parametrelerin test edileceğini belirlemek, özel enjeksiyon yükleri (payload) ve isteğe bağlı tamper komut dosyaları sağlamak için kullanılabilir.

ParametreAçıklama
-p TESTPARAMETERsqlmap’in enjeksiyon denemesi yapacağı parametreler belirtilir. Kullanılmazsa –level değerine göre enjeksiyon denemeleri otomatik yapılır.
–skip=SKIP–level değerine göre sqlmap birçok noktada enjeksiyon denemesi yapar. Bu parametre ile enjeksiyon denemesi yapılması istenmeyen parametreler belirtilir.
–skip-staticDinamik gözükmeyen test parametrelerine enjeksiyon denemesi yapılmaz.
–param-exclude=..Enjeksiyon denemesi yapılması istenmeyen parametreler regex (regular expression) ile belirtilir. Örn: --param-exclude="token|session"
–param-filter=P..Enjeksiyon denemesi yapılacak parametreler seçilir. Örn: --param-filter=POST
–dbms=DBMSHedef sistemin kullandığı veritabanı yönetim sistemi belirtilir. DBMS’in belirtilmesi enjeksiyon deneme sayısını azaltır ve taramayı hızlandırır. Örn: --dbms=mysql
–dbms-cred=DBMS..Bazı durumlarda kullanıcı, mevcut DBMS kullanıcı ayrıcalıklarının olmaması nedeniyle bazı işlemlerin başarısız olduğu ve bu seçeneği kullanmayı deneyebileceği konusunda uyarılır. Bu gibi durumlarda, bu seçeneği kullanarak sqlmap’e yönetici kullanıcı kimlik bilgileri sağlanırsa, sqlmap sorunlu kısmı bu kimlik bilgilerini kullanarak özel “farklı çalıştır” mekanizmalarıyla (örneğin Microsoft SQL Server’da OPENROWSET) yeniden çalıştırmayı deneyecektir.
–os=OSHedef sistemin işletim sistemini belirtir. Desteklenen işletim sistemleri Windows ve Linux’tur.
–invalid-bignumsqlmap’in orijinal parametre değerini geçersiz kılması gerektiği durumlarda (ör. id=13) klasik olumsuzlamayı kullanır (ör. id=-13). Bu anahtarla, aynı amacı gerçekleştirmek için büyük tamsayı değerlerinin kullanımını zorlamak mümkündür (ör. id=999999999).
–invalid-logicalsqlmap’in orijinal parametre değerini geçersiz kılması gerektiği durumlarda (ör. id=13) klasik olumsuzlamayı kullanır (ör. id=-13). Bu anahtarla, aynı amacı gerçekleştirmek için boolean işlemlerinin kullanımını zorlamak mümkündür (ör. id=13 VE 18=19).
–invalid-stringsqlmap’in orijinal parametre değerini geçersiz kılması gerektiği durumlarda (ör. id=13) klasik olumsuzlamayı kullanır (ör. id=-13). Bu anahtarla, aynı amacı gerçekleştirmek için rastgele dizelerin kullanımını zorlamak mümkündür (ör. id=akewmc).
–no-castsqlmap sonuçları alırken, tüm girişlerin dize tipine dönüştürüldüğü ve NULL değerler olması durumunda bir boşluk karakteriyle değiştirildiği bir mekanizma kullanır. Bu, herhangi bir hatalı durumu önlemek (örneğin, NULL değerlerin dize değerleriyle birleştirilmesi) ve veri alma işleminin kendisini kolaylaştırmak için yapılmıştır. Yine de, veri almanın kendisiyle ilgili sorunlar nedeniyle (örneğin, Hiçbiri değeri geri döndürülmez) bu mekanizmanın (bu anahtar kullanılarak) kapatılmasının gerekli olduğu (örneğin MySQL DBMS’nin eski sürümleri) bildirilen durumlar vardır.
–no-escapeSqmap’ın yükler içinde (örneğin, SELECT ‘foobar’) tek tırnakla ayrılmış dize değerlerini kullanması gerektiği durumlarda, bu değerlerden otomatik olarak kaçılır

örneğin;

SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR) (98)+CHAR(97)+CHAR(114)).

Bu yük içeriğinin gizlenmesi ve arka uç sunucusunda sorgudan kaçma mekanizmalarıyla (örneğin, magic_quotes ve/veya mysql_real_escape_string) olası sorunların önlenmesi için yapılır. Kullanıcı bu anahtarı tek tırnaklı sorguları pasifleştirmek için kullanabilir.
–prefix=PREFIX,
–suffix=SUFFIX
Bazı durumlarda kullanıcı enjeksiyon yüküne eklenecek belirli bir son ek sağlarsa, savunmasız parametreden ancak yararlanılabilir. Bu seçeneklerin kullanışlı olduğu başka bir senaryo, kullanıcı bu sorgu sözdizimini zaten bildiğinde ve doğrudan bir enjeksiyon yükü öneki ve son eki sağlayarak SQL enjeksiyonunu tespit etmek ve kullanmak istediğinde kendini gösterir.

Bir örnekle açıklamak gerekirse; aşağıdaki URL’de yer alan name parametresi test edilirken sqlmap payload’u xyz ile değiştirecek test1 ve test2 ifadeleri sabit olarak bırakacaktır;

sqlmap -u "http://example.com/?id=123&name=test1-xyz-test2" --prefix="test1-" --suffix="-test2"
–tamper=TAMPERWAF (web uygulaması güvenlik duvarı) atlatmak için hazırlanmış bir script’i etkinleştirir. Örneğin varnish script’i sunucudan her seferinde taze dönüt almak için sunucunun varnish ön belleğini devre dışı bırakan X-originating-IP başlık bilgisini kullanarak tarama yapılmasını sağlar. Bir sitenin hangi WAF ile korunduğunu öğrenmek için ‘wafw00f domain.com‘ komutundan faydalanabilirsiniz. Ayrıca tamper listelerine şuradan bakabilirsiniz.
infografiği gör

Örnek 1:

apostrophemask tamper script’ine bir örnek vermek gerekirse, örneğin elimizde şunun gibi test etmek istediğimiz bir URL olsun:

http://example.com/?filter=(sabitkisim1'test1'sabitkisim2) and (sabitkisim3'test2'sabitkisim4)"

Testimizde filter parametresinin tamamını değil de tek tırnak işaretleri arasında belirtilmiş olan kısımlarını test etmek istiyoruz. Yani payload sadece tırnak içindeki veriye eklensin. Başka bir ifadeyle sabitkisim1,sabitkisim2,sabitkisim3 ve sabitkisim4’e dokunulmayacak deneme tırnak içindeki fade için yapılsın istiyoruz. Bu durumda aşağıdaki gibi bir sqlmap komutu çalıştırabilirsiniz:

sqlmap -u "http://example.com/?filter=(sabitkisim1'test1'sabitkisim2) and (sabitkisim3'test2'sabitkisim4)" --tamper="apostrophemas
–tamper-listWAF’ları atlatmak için kullanılacak manipülasyon script’lerinin listesini görüntüler.

İşletim sistemi erişim seçenekleri

Bu seçenekler, DBMS’yi (Veritabanı Yönetim Sistemi) destekleyen işletim sistemine erişmek için kullanılabilir.

–os-cmd=OSCMDAçık bulunan hedef sistem üzerinde güvenlik araştırmacısının bir sistem komutu çalıştırmasını ve çıktısını görmesini sağlar. –os-shell’de olduğu gibi yazma yetkisinin bulunduğu bir dizine ihtiyaç duyar.
–os-shellAçık bulunan hedef sistem üzerinde güvenlik araştırmacısının sistem komutları çalıştırabilmesi için bir komut kabuğu açar. Bunu yapabilmesi için veritabanını çalıştıran prosesin yazma yetkisine sahip olduğu bir dizine ihtiyaç vardır. sqlmap tarafından bu dizine bir shell dosyası kopyalanır.. Bu dizinin yolu sqlmap tarafından sorulur. –batch parametresi ile çalıştırılıyorsa varsayılan dizinler denenir.
–sql-queryAktif veritabanı üzerinde bir SQL komutu çalıştırmak için kullanılır. insert veya update ile değiştirilen kayıtların güncel değerlerini sorgulamak için sqlmap’i –fresh-query parametresi ile çalıştırın.
-sql-shellAçık bulunan hedef sistem üzerinde güvenlik araştırmacısının SQL komutları çalıştırabilmesi için bir komut kabuğu açar. MySQL ve PostgreSQL sistemlerde kullanıcı tanımlı sys_exec() ve sys_eval() fonksiyonları içeren bir ikili dosyayı sunucuya yükler ve veritabanı üzerinde bu iki işlevi oluşturur ve birini çağırır. MSSQL’de ise xp_cmdshell gizli alt programını kötüye kullanır. Eğer devre dışı bırakılmışsa sqlmap onu etkinleştirir. Eğer yoksa sqlmap onu yeniden oluşturur. Shell’de insert into ardından daha önce çalıştırılan select cümlesi kullanırsanız yeni kayıtlar görüntülenmez. Bunun için –fresh-query parametresini eklemiş olmalısınız.
–web-rootTaraması yapılan web uygulamasının sunucuda kayıtlı olduğu dizinin tam yolu belirtilir. Örneğin /var/www. –sql-shell, –os-shell ve –os-cmd argümanları bu yola ihtiyaç duyar.
–os-pwnBir OOB kabuğu, Meterpreter veya VNC için komut istemi açar.
–os-smbrelayBir OOB kabuğu, Meterpreter veya VNC için tek tıkla komut istemi sağlar.
–os-bofSaklı yordam (stored procedure) arabellek taşması sömürüsü dener.
–priv-escVeritabanı işlemi (process) kullanıcı ayrıcalığı yükseltme dener. kitrap0d (MS10-015) tekniğini içeren Metasploit’in getsystem komutu aracılığıyla yükseltme dener.
–msf-path=MSFPATHMetasploit Framework’ün kurulu olduğu yerel yol
–tmp-path=TMMPPATHGeçici dosyalar dizininin uzak mutlak yolu

Dosya sistemi erişimi seçenekleri

ParametreAçıklama
–file-readHedef sistemin dosya sisteminden bir dosya okur.
–file-writeHedef sistemin dosya sistemine dosya yazar.
–file-destfile-write ile birlikte kullanılır ve dosyanın sunucuda hangi patikaya yazılacağını belirtir.

İstek (request) seçenekleri

Hedef URL’e nasıl bağlanılacağını belirtmek için bu seçenekleri bir komuta ekleyin.

ParametreAçıklama
–methodsqlmap, HTTP isteklerinde kullanılacak uygun HTTP yöntemini otomatik olarak algılar. Bununla birlikte, bazı durumlarda, otomasyon tarafından kullanılmayan belirli HTTP yönteminin (örneğin PUT) kullanımını zorlamak gerekir. (örneğin –method=PUT).
–dataVarsayılan olarak, HTTP isteklerini gerçekleştirmek için kullanılan HTTP yöntemi GET’dir, ancak POST isteklerinde gönderilecek verileri bu parametre ile bildirerek bunu dolaylı olarak POST olarak değiştirebilirsiniz. GET parametrelerinin yanı sıra, POST ile gönderilecek bu parametreler de SQL enjeksiyonu için test edilir.
–param-delVarsayılan parametre sınırlayıcı (örneğin, GET ve POST verilerinde &) sqlmap’in her parametreyi ayrı ayrı düzgün bir şekilde bölebilmesi ve işleyebilmesi için kullanılır. Farklı bir sembol kullanmak gerektiğinde bu param-del parametresinden yararlanılabilir. Örn:
python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=\ 1" --param-del=";" -f --banner --dbs --users
–cookieTest edilecek web uygulaması istemci tarafında depolanan çerezleri kullanıyor olabilir. Çerezler web uygulamasının tercihine bağlı olarak birçok türde veriyi tutuyor olabilir. Özellikle oturum açmayı gerektiren web uygulamalarında ihtiyaç duyulan oturum bilgisi önceden öğrenilerek sqlmap’in oturum içi tarama yapması sağlanabilir. Örneğin: –cookie=’PHPSESSIONID=ajksdgadhakjsdhak’ Cookie değerleri –level=2 ve üzerinde test edilir. Açıklama.
–cookie-del Cookie degisken/değer çiftlerini birbirinden ayırmak için kullanılacak ayraç karakterini tanımlar. Açıklama.
–live-cookiesGüncel değerlerin yüklenmesi için kullanılacak bir çerez dosyası sağlamak için kullanılabilir. Bu, HTTP Cookie başlığı için en son değeri almak için her istekten önce aynı dosyanın okunacağı anlamına gelir. Açıklama.
–load-cookiesNetscape/wget biçimli tanımlama bilgilerini içeren özel bir dosya sağlamak için kullanılır. Açıklama.
–drop-set-cookie İletişim sırasında herhangi bir zamanda web uygulaması Set-Cookie başlıklarıyla yanıt verirse, sqlmap diğer tüm HTTP isteklerinde set edilen yeni Cookie değerlerini otomatik olarak kullanır. sqlmap ayrıca SQL enjeksiyonu için bu değerleri otomatik olarak test edecektir. Bu, –drop-set-cookie – sqlmap anahtarını sağlayarak önlenebilir, gelen herhangi bir Set-Cookie başlığını yok sayar. Açıklama.
–user-agent sqlmap isteklerini yaparken sunucuya kendini hangi tarayıcı olarak tanıtacağını belirtir. Varsayılan değeri “sqlmap/1.0-dev”‘dir.
–random-agentBu seçenek kullanılmadığında sqlmap’in varsayılan agent string’i “sqlmap/1.0-dev” dir. Eğer kısa sürede timeout hatası alıyorsanız tarama yaptığınız web uygulamasının WAF (Web Application Firewall)’una veya IPS (Intrusion Prevention System)’ine yakalanmış olabilirsiniz. Bu seçenek WAF/IPS’i atlatmak için rasgele bir web browser agent seçer ve oturum içinde daima onu kullanarak istek yapar. Örneğin firefox,chrome,safari vb. Varsayılan agent “sqlmap/x.x.x#stable (https://sqlmap.org)” ‘dır.
–mobileWeb uygulamasına yapılan testlerin bir mobil tarayıcıdan (Android/IPhone) geliyormuş gibi taklit edilmesini sağlar. Bazı web uygulamaları tarayıcı türüne göre farklı davranış gösterebilir. Örneğin günümüzde birçok site daha iyi kullanıcı deneyimi sağlamak amacıyla mobil aygıtlar için farklı sürümler barındırır. Bu anlamda taraması yapılan web uygulaması tarafından uygun User-Agent’a sahip olunmadığı için taramasını yapmak istediğimiz web uygulamasının farklı bir sürümüne yönlendirebiliriz.Bu parametreyle sqlmap testlerini yaparken kendimizi bir mobil client olarak tanıtıyoruz.
–hostHTTP host başlık değerini manuel olarak ayarlayabilirsiniz. Varsayılan olarak, HTTP host başlığı, istek yapılan URL’den elde edilir.
–level 5 olarak ayarlanmışsa, HTTP Host başlığının da SQL enjeksiyonuna karşı test edildiğini unutmayın.
–refererHTTP referer başlık değerini taklit etmek mümkündür. Açıkça ayarlanmadıysa, varsayılan olarak HTTP isteklerinde hiçbir HTTP referer başlığı gönderilmez. Açıklama.
–level 3 veya üstüne ayarlanmışsa, HTTP referer başlığının da SQL enjeksiyonuna karşı test edildiğini unutmayın.
–headersBu seçeneği ayarlayarak fazladan HTTP başlıkları iletmek mümkündür. Her başlık yeni bir satırla ayrılmalıdır. Açıklama.
–auth-type, –auth-credHedef uygulama ihtiyaç duyuyorsa HTTP isteklerini gerçekleştirmek için kullanılacak geçerli kimlik bilgilerini belirtmek için kullanılabilir. Desteklenen üç HTTP protokolü kimlik doğrulama mekanizması şunlardır: Basic, Digest ve
Geçerli sözdizimi örneği:
$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id\
=1" --auth-type Basic --auth-cred "testuser:testpass"
–delayHer HTTP(S) isteği arasında beklenecek saniye sayısı belirtilebilir. Ondalıklı bir değer de kullanılabilir. örneğin 0.5, yarım saniye anlamına gelir. Varsayılan olarak, gecikme ayarlanmamıştır.
–time-outHTTP(S) isteğinin zaman aşımına uğradığını düşünmeden önce saniye cinsinden beklenecek bir süre belirmek mümkündür. Ondalıklı değer belirtilebilir, örneğin 10.5, on buçuk saniye anlamına gelir. Varsayılan olarak 30 saniye ayarlanmıştır.
–retriesHTTP(S) bağlantısı zaman aşımına uğradığında maksimum yeniden deneme sayısını belirtmek mümkündür. Varsayılan olarak üç defaya kadar yeniden dener.
–safe-urlTest sırasında ziyaret edilecek güvenli URL adresi. Açıklama.
–safe-postBelirli bir güvenli URL adresine gönderilecek POST verisi oturumun yeninden oluşturulmasını sağlayabilir. Açıklama
–safe-reqTest sırasında ziyaret edilecek URL’lerin bir dosyadan okunmasını sağlar. Açıklama
–safe-freqBelirli bir güvenli konuma yapılan iki ziyaret arasında yapılacak test sayısı. Açıklama
–randomizeVerilen parametrelerin random değerlerle değiştirilmesini istiyorsanız şu şekilde kullanabilirsiniz:

sqlmap -u "www.siteadi.com/testet.php?id=1" --randomize=id
–hppASP/IIS ve ASP.NET/IIS platformlarının dahili WAF’larını geçmek için HPP (HTTP parameter pollution) adı verilen bir atlatma yöntemi vardır. Eğer backend’de ASP/IIS ve ASP.NET/IIS’den biri varsa –hpp anahtarını kullanabilirsiniz.

HPP yönteminde bir SQLi vektörü birden fazla parametreye bölünerek tek bir request içinde gönderilir. Örneğin sayfa.asp?deg=sam&deg=sun gibi GET request, sunucu tarafında deg=samsun olarak birleştirilir. İlgili backend sunucusunun bu davranışından yararlanılarak şu vektör:
http://webApplication/showproducts.asp?prodID=9 UNION SELECT 1,2,3 FROM Users WHERE id=3 —
şu şekilde parçalanarak gönderilebilir.
http://webApplication/showproducts.asp?prodID=9 /&prodID=/UNION /&prodID=/SELECT 1 &prodID=2 &prodID=3 FROM /&prodID=/Users /&prodID=/ WHERE id=3 —

Optimizasyon

Aşağıdaki seçenekler, sqlmap’in performansını artırmak için kullanılabilir.

ParametreAçıklama
-oTüm optimizasyon özelliklerini etkinleştir.
–predict-outputBu anahtar, alınan değerin karakterlerinin sıralı istatistiksel tahmini için çıkarım algoritmasında kullanılır. En umut verici karakter değerlerine sahip istatistiksel tablo, kullanılan mevcut numaralandırma bilgisi ile birlikte txt/common-outputs.txt dosyasında verilen öğelere dayalı olarak oluşturulmaktadır. Değerin ortak çıktı değerleri arasında bulunması durumunda süreç ilerledikçe sonraki karakter tabloları daha da daraltılmaktadır. Sistem tablosu adları ve ayrıcalıklarında olduğu gibi, ortak DBMS varlıklarının alınmasıyla birlikte kullanılırsa, hızlanma önemlidir. Elbette, örneğin veritabanı tablo adlarında veya benzerlerinde ortak kalıplar fark ederseniz, ortak çıktılar dosyasını ihtiyaçlarınıza göre düzenleyebilirsiniz.
Bu anahtarın –threads anahtarıyla uyumlu olmadığını unutmayın.
–keep-alive HTTP istekleri yapılırken TCP bağlantısının açık kalacağını belirtmek için kullanılır. Özellikle xmlhttprequest (AJAX) istekleri için tercih edilir.
–null-connectionAnahtar: –null-bağlantı
HTTP gövdesini almadan HTTP yanıtının boyutunu almak için kullanılabilecek özel HTTP istek türleri vardır. Bu bilgi, Doğru ve Yanlış yanıtları ayırt etmek için kör enjeksiyon tekniğinde kullanılabilir. Bu anahtar sağlandığında, sqlmap iki farklı NULL bağlantı tekniğini test etmeye ve kullanmaya çalışacaktır: Range ve HEAD. Bunlardan herhangi biri hedef web sunucusu tarafından destekleniyorsa, kullanılan bant genişliğinin bariz şekilde tasarruf edilerek hız artırılacaktır. tasarrufundan gelecektir.
Bu teknikler, Blind SQL Injection – Take 2 (Bandwidth)’deki Bursting Performances adlı teknik incelemede ayrıntılı olarak açıklanmıştır.
Bu anahtarın –text-only anahtarıyla uyumlu olmadığını unutmayın.
–threadssqlmap’in yapmasını izin verilen eş zamanlı istek sayısını tanımlar. Taramanın daha hızlı tamamlanmasını sağlarken test edilen sistemde aşırı yük oluşmasına neden olabilir. İzin verilen en fazla eş zamanlı istek sayısı 10’dur.

Teknikler

Bu seçenekler belirli saldırı stratejileriyle ilgilidir. Saldırıyı belirli tekniklere ve hedeflere göre ayarlar ve odaklarlar.

–technique=TECHNIQUETest edilecek SQL enjeksiyon tekniklerini belirtir. sqlmap tarama sırasında varsayılan olarak tüm teknikleri test eder. Belli durumlarda sadece bir veya birkaç tekniğin test edilmesini isteyebilirsiniz. Bu seçenek B, E, U, S, T ve Q karakterlerinden bir kombinasyonu olabilir. B boolean-based blind, E error-based, U Unioun query-based, S stacked queries, T time-based blind ve Q inline queries tekniğinin kullanılacağını ifade eder. Bu seçeneğin varsayılan değeri BEUSTQ’dur. Dosya sistemine erişmek, işletim sistemini ele geçirmek veya Windows kayıt defteri erişmek istediğinizde, dizenin stacked queries sorgu tekniği harfini (S) içermesi gerektiğini unutmayın.
–time-sec=TIMESECZamana dayalı kör SQL enjeksiyonu (time-based-blind-sqli) için test yapılırken kullanılacak gecikme miktarını ayarlar. Varsayılan olarak değeri 5 saniyedir.
–union-cols=UCOLSVarsayılan olarak 1 ila 10 sütun kullanarak yapılan UNION sorgusu SQL enjeksiyon tekniği için kullanılacak sütünları ayarlar. –level değeri artırılarak bu aralık 50 sütuna kadar çıkartılabilir. –union-cols ve ardından bir dizi tamsayı seçeneği sağlayarak, sqlmap’e bu tür SQL enjeksiyonunu belirli bir sütun aralığıyla test etmesini manuel olarak söyleyebilirsiniz. Örneğin, 12-16, 12 ila 16 sütun kullanarak UNION sorgusu SQL enjeksiyonu için test yapılacağı anlamına gelir.
–union-char=UCHARsqlmap varsayılan olarak UNION sorgusu SQL enjeksiyon tekniği için NULL karakter kullanır. Ancak, daha yüksek bir –level değeri sağlayarak, sqlmap testleri rastgele bir sayı ile de gerçekleştirecektir çünkü UNION NULL ile sorgu testlerinin başarısız olduğu, ancak rastgele bir tamsayı ile başarılı oldukları bazı istisnai durumları vardır.
–union-char seçeneğini istenen karakter değeriyle (örneğin –union-char 123) kullanarak sqlmap’e bu tür SQL enjeksiyonunu belirli bir karakterle test etmesini manuel olarak söyleyebilirsiniz.
–union-from=UFROMBir UNION sorgusu SQL’in FROM bölümünde kullanılacak tablonun adı. Bazı UNION sorgusu SQL enjeksiyon durumlarında, FROM yan tümcesinde geçerli ve erişilebilir tablo adının kullanımını zorlamaya ihtiyaç vardır. Örneğin, Microsoft Access, bu tür bir tablonun kullanılmasını gerektirir. Bir UNION sorgusu sağlamadan SQL enjeksiyonu doğru şekilde gerçekleştirilemez (örneğin –union-from=users).
–dns-domain=DNS-DOMAINDNS sızma saldırısında kullanılacak alan adı. Blind-injection saldırılarını hızlandırmak için kullanılır.
–second-url=SECOND-URLSavunmasız bir sayfaya enjekte edilen bir payload’un sonucunun/sonuçlarının başka bir URL’de (örneğin çerçeve) gösterildiği (yansıtıldığı) bir saldırıdır. Genellikle bu, güvenlik açığı bulunan orijinal sayfada kullanıcı tarafından sağlanan girdinin veritabanına depolanması nedeniyle oluşur. Çıktı bir başka sayfadan izleir.
URL adresiyle –second-order seçeneğini veya sonuçların gösterildiği sunucuya göndermek için request file ile –second-req seçeneğini kullanarak sqlmap’e bu tür SQL enjeksiyonunu test etmesini manuel olarak söyleyebilirsiniz.
–second-req=SECOND-REQDosyadan ikinci dereceden bir HTTP isteği yükler. URL adresiyle –second-order seçeneğini veya sonuçların gösterildiği sunucuya göndermek için request file ile –second-req seçeneğini kullanarak sqlmap’e bu tür SQL enjeksiyonunu test etmesini manuel olarak söyleyebilirsiniz.
–fingerprint, -fKapsamlı bir veritabanı yönetim sistemi sürümü parmak izini elde etmeye çalışır. Hedef sistemin işletim sistemini, sürüm bilgilerini, yama düzeyini ve veritabanının sürüm bilgilerini eldet etmeye çalışır.

Genel amaçlı seçenekler

Bu seçenekler, genel çalışma parametrelerini ayarlama olanağı sağlar.

ParametreAçıklama
–crawlsqlmap’in hedef sistem üzerinde zafiyet içerme potansiyeline sahip URL’leri araştırmasını sağlar. Bu parametreye dizin derinlik miktarı verilir. crawl sadece GET parametrelerine sahip URL’leri tespit eder. Bu seçenek ile birlikte –forms seçeneği genellikle birlikte kullanılır.
–formsVerilan URL içindeki formları ve input nesnelerini tespit ederek SQLi açıklarına karşı test edilmesini sağlar.
–fresh-queriessqlmap yapılan tüm istekleri ve dönüş değerlerini oturum dosyasında saklar. Kullanıcı tarafından daha önce yapılmış bir istek tekrarlanırsa dönüş değeri yerelde depolanan oturum dosyasından getirilir, sunucuya taze bir istekte bulunmaz. Sunucu tarafındaki kodlarda veya veritabanında bir değişiklik olmuşsa bunu kaçırmış oluruz. Her seferinde istek yapılması için bu parametre kullanılır.
–flush-sessionsqlmap’in daha önce yaptığı request ve response’ları oturum dosyasında saklar. –fresh-queries anahtarında açıklandığı üzere daha önce yapılmış istekler taramayı hızlandırmak için bu oturum dosyasından cevaplanır, sunucuya taze bir istek yapılmaz. Bu anahtar –fresh-queries ile benzer işi yapar fakat tarama oturumunun başında oturum dosyasındaki tüm verileri kalıcı olarak siler. Dolayısıyla tarama sırasında taze istekler yapılması sağlanmış olur, bunun yanında da request/response’lar kalıcı olarak silinimiş ve yerini yenilerinin alması sağlanmış olur.. Bu iki anahtarın birlikte kullanımı gereksizdir.
–batchTarama sırasında kullanıcıya soru sormadan optimum cevaplara kendi karar verir. (örn: Y/N soruları sorulması)
–etaHer çıktı için tahmini varış süresini görüntüler.
–parse-errors

Yanıtlardan gelen DBMS hata mesajlarını ayrıştırır ve görüntüler.
–hexVeri alma sırasında onaltılı dönüştürmeyi kullanır.

–answersTarama sırasında sorulacak sorulara ön tanımlı cevaplar sağlayabilirsiniz. Örneğin hedefin redirect (30x) talebine peşinen N demek için aşağıdaki gibi kullanabilirsiniz:

--aswers="follow=N"

Yazar: Özgür Koca

Yazar - Tankado.com

“SQLMap parametre ve seçenekleri” için bir yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.