- 9 Tem 2023
- 150
- 1
- 128
Merhaba TurkHackTeam. Bugün konumuz SQLMAP
SQL Enjeksiyon Nedir?
SQL enjeksiyon, kötü niyetli kişilerin bir web uygulamasına, veritabanı sorgularını manipüle ederek izinsiz erişim sağlama tekniğidir. Bu tür saldırılar, uygulamanın güvenlik açığı sayesinde gerçekleştirilir ve sıklıkla kullanıcı tarafından sağlanan giriş verilerinin doğru bir şekilde filtrelenmediği durumlarda ortaya çıkar.
SQLMap Temel İşlevleri
- Otomatik Algılama: SQLMap, hedeflenen web uygulamasındaki potansiyel SQL enjeksiyon noktalarını otomatik olarak algılayabilir. Bu sayede güvenlik testi uzmanları, potansiyel zayıf noktaları manuel olarak aramak yerine SQLMap'i kullanarak bu noktaları hızla tespit edebilirler.
- Veritabanı Keşfi: SQLMap, hedeflenen veritabanının yapısal bilgilerini (tablo isimleri, sütunlar, ilişkiler vb.) otomatik olarak keşfedebilir.
- Veri Çekme: SQLMap, hedeflenen veritabanından veri çekmek için kullanılabilir. Bu sayede saldırganlar, kullanıcı adları, şifreler ve diğer hassas bilgileri ele geçirebilirler.
- Veritabanı Erişimi ve Yetki Yükseltme: SQLMap, hedeflenen veritabanına erişim sağlama ve gerektiğinde kullanıcı yetkilerini yükseltme yeteneğine sahiptir.
- Dosya Sistemi Erişimi: SQLMap, hedeflenen sunucunun dosya sistemi üzerinde gezinme yeteneğine sahiptir. Bu, saldırganların hassas sistem dosyalarına erişim sağlayabileceği anlamına gelir.
- Komut İstemi Oluşturma: SQLMap, hedef sunucuda komut çalıştırma yeteneğine sahiptir. Bu sayede saldırganlar, hedef sistemi ele geçirmek için kullanabilecekleri komutları çalıştırabilirler.
- Tam Özelleştirme: SQLMap, kullanıcıların hedeflenen saldırı senaryolarını ve istekleri tamamen özelleştirmelerine olanak tanır. Bu, daha karmaşık saldırıları gerçekleştirmek isteyen uzmanlar için önemlidir.
- Raporlama: SQLMap, tespit edilen güvenlik açıkları hakkında detaylı raporlar oluşturabilir. Bu raporlar, güvenlik testi sonuçlarını yönetim veya geliştirme ekibiyle paylaşmak için kullanılabilir.
SQLMap Kullanımı
İlk olarak, bazı basit parametrelerin kullanımına dair örneklerle başlayalım.(Temeli biliyorsanız bu kısmı geçebilirsiniz)
Hedef URL belirtme
-u ya da --url parametresi yukarıdaki kullanımda da görüldüğü üzere sqlmap’e hedef sitenin URL’ini tanıtır
Mevcut veri tabanlarının listesine bakma
Yukarıdaki örenekde görüldüğü üzere --dbs parametresini ekleyerek mevcut veri tabanlarının listesini ekrana getirebiliriz.
Tablo,Kolon ve Kayıtlar
Yukarıda -D "DataBaseName" belirtip --tables parametresi ilede tabloları getirdik
Yukarıda -T "TabloName" belirtip --columns parametresi ile kolonları getirdik
Yukarıda -C "KolonName" belirtip --dump parametresi ilede veriyi çektik -C kullanırken örnek kullanıcıadı,parola şeklinde aralarını virgül ile ayırarak birden fazla kolonu aynanda çekebiliriz
-D: Bu parametre ile veri tabanı adını belirtmiş olduk.Hedef URL belirtme
Kod:
sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4”
Mevcut veri tabanlarının listesine bakma
Kod:
sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” --dbs
Tablo,Kolon ve Kayıtlar
Kod:
sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D DATABASENAME --tables
Kod:
sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D DATABASENAME -T TABLONAME --columns
Kod:
sqlmap -u “http://aspnet.testsparker.com/Products.aspx?pId=4” -D DATABASENAME -T TABLONAME -C "KOLONNAME" --dump
--tables: Belirttiğimiz veri tabanındaki tablo isimlerini getirmek için bu parametre kullanılır.
-T: Tablo isimleri de alındıktan sonra kolonlarına ulaşılması istenen tablo adı bu parametre ile birlikte yazılır.
--columns: Adı belirtilen tablodaki kolonlar getirilir.
-C: İstenilen kolon adı yazılır.
--dump: Kolonlarda yer alan veriler ekrana yansıtılır.
Birden Fazla Hedefi Tarama
Sqlmap’in -m parametresiyle birden fazla URL’in taratılması mümkündür.
Öncelikle herhangi bir isimli txt dosyası oluşturuyoruz örneğin link.txt
txt dosya içeriği aşşağıdaki gibi olmalıdır
Ardından path’i belirtilir
Öncelikle herhangi bir isimli txt dosyası oluşturuyoruz örneğin link.txt
txt dosya içeriği aşşağıdaki gibi olmalıdır
Kod:
http://php.testsparker.com/artist.php?id=2
http://aspnet.testsparker.com/blog/what-are-the-advantages-of-bitcoin-62/
http://192.168.1.38/index.php?action=gallery_view&gallery_id=1
http://localhost/index.php?action=test
Ardından path’i belirtilir
Kod:
qlmap -m "C:\Users\[USER]\Desktop\link.txt"
İstek Dosyası Yüklme
Bu işlemi gerçekleştirebilmek için -r parametresini kullanmak gerekir.
Herhangi bir proxy yazılımıyla araya girerek, yaptığımız isteği kopyalıyor ve bir metin dosyasına kaydediyoruz. Örneğin istek.txt adlı dosyaya ait içeriğin aşağıdaki gibi olduğunu varsayalım
SQLMap de kullanımı şu şekilde olucak
Temek kullanım parametreleri bu şekildedir.
Herhangi bir proxy yazılımıyla araya girerek, yaptığımız isteği kopyalıyor ve bir metin dosyasına kaydediyoruz. Örneğin istek.txt adlı dosyaya ait içeriğin aşağıdaki gibi olduğunu varsayalım
Kod:
GET http://aspnet.testsparker.com/blog/how-does-bitcoin-work-63/ HTTP/1.1
Host: aspnet.testsparker.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ASP.NET_SessionId=zpuu4rzda5rxued21mwqttd3; TestCookie=Hello
SQLMap de kullanımı şu şekilde olucak
Kod:
sqlmap -r "istek.txt"
SQLMAP En çok kullanılan Paremetreler ve kullanım yerleri.
--random-agent | --force-ssl | --level=LEVEL --risk=RISK |
Random Agent ismindende anlaşıldığı gibi Rastgele seçilen HTTP User-Agent başlık değerini kullanır --random-agent kullanıldığında, SQLMap rastgele bir kullanıcı ajanı seçerek HTTP isteklerini gönderir. Bu, web sunucusunun normal kullanıcı trafiği gibi görünmesini sağlar ve saldırının tespit edilme olasılığını azaltabilir. Özellikle savunma mekanizmalarının ya da güvenlik cihazlarının saldırıları tespit etmeye çalıştığı durumlarda bu tür bir gizleme yöntemi etkili olabilir. | --force-ssl nedir? Force ssl yani SSL/HTTPS kullanımını zorlama Hedef web uygulamasına sadece güvenli bir HTTPS bağlantısıyla erişilmesi gerektiğinde kullanılır. Bu durum, hedef web uygulamasının yalnızca HTTPS bağlantılarını kabul ettiği bir senaryoda geçerlidir. Bu, SQLMap'ın sadece HTTPS üzerinden iletişim kurmasını sağlar ve böylece tüm veri alışverişi şifrelenir. Kullanım yerleri nelerdir? Sadece HTTPS bağlantılarına izin veren bir hedef web uygulamasıyla çalışırken --force-ssl bayrağını kullanmanız gerekebilir. | LEVEL Gerçekleştirilecek testlerin seviyesi (1-5, varsayılan 1) RİSK Gerçekleştirilecek testlerin riski (1-3, varsayılan 1) |
--technique=TECH | --time-sec=TIMESEC | --current-user / --current-db |
--technique Kullanılacak SQL enjeksiyon tekniklerini belirlemenizi sağlar (varsayılan "BEUSTQ") Nedir bu Teknikler? Öncelikle BEUSTQ tüm teknikleri temsil eder ve bunların açılımı şöyledir
| --time-sec=TIMESEC DBMS yanıtını geciktirmek için saniye (varsayılan 5) --time-sec=TIMESEC parametresi, SQLMap'ın bu tür saldırıları gerçekleştirirken beklemesi gereken süreyi belirtir. Bu süre, veritabanının cevap süresini beklemek ve sonuçları analiz etmek için kullanılır. TIMESEC, saniye cinsinden beklemek istediğiniz süreyi ifade eder. | --current-user DBMS geçerli kullanıcısını alır --current-db DBMS geçerli veritabanını alır |
--tamper=TAMPER | --no-cast | --os-cmd=OSCMD / --os-shell |
--tamper=TAMPER Enjeksiyon verilerini kurcalamak için verilen kod(lar)ı kullanın --tamper=TAMPER parametresi, SQLMap'a belirli bir "TAMPER" adlı modülün (dönüşüm veya değiştirme işlevi) kullanılmasını sağlar. SQLMap, SQL sorgularını bu modülleri kullanarak değiştirir ve ardından sonuçları analiz eder. Örnek kullanım yerleri:
| --no-cast Payload döküm mekanizmasını kapatın --no-cast parametresi, SQLMap'ın enjeksiyon sorgularında bu otomatik tip dönüşümlerini yapmamasını sağlar. Bu, belirli bir senaryoda tip dönüşümlerinin istenmeyen sonuçlar doğurabileceği durumlar için kullanışlıdır. Örneğin, bazı veritabanı yönetim sistemlerinde tür dönüşümleri yetersiz veya hatalı olabilir ve bu durumda --no-cast parametresi kullanılarak dönüşümler devre dışı bırakılabilir. | --os-cmd=OSCMD Bir işletim sistemi komutunu çalıştırma --os-shell Etkileşimli bir işletim sistemi kabuğu ister --os-cmd=OSCMD:Bu parametre, hedef veritabanı sunucusunda belirtilen OSCMD (Operating System Command) komutunu çalıştırmak için kullanılır. SQL enjeksiyon açığına sahip bir hedef üzerinde bu parametre ile birlikte komut çalıştırabilirsiniz. Bu, veritabanı sunucusunun işletim sistemine bağlı komutlar (örneğin, ping, ls, dir gibi) çalıştırmak için kullanışlı olabilir. --os-shell:Bu parametre, hedef veritabanı sunucusunda etkileşimli bir kabuk (shell) açmak için kullanılır. SQLMap, hedef sunucuda bir kabuk oluşturarak kullanıcıya doğrudan komut girmek ve komut çıktılarını görmek için bir ortam sağlar. Bu, hedef sunucuda daha geniş bir etkileşim ve kontrol sağlamak için kullanışlıdır. |
Umarım okunaklı ve faydalı olmuştur tekrar görüşmek üzere
Son düzenleme: