MySQL injection
RootedCON, İspanya'daki en önemli siber güvenlik etkinliği ve Avrupa'nın en önemli etkinliklerinden biridir. Teknik bilginin yayılmasını amaçlayan bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
Yorumlar
İlginç Fonksiyonlar
Mysql Onaylama:
Kullanışlı fonksiyonlar
The following functions can be useful when performing MySQL injection attacks:
Aşağıdaki fonksiyonlar, MySQL enjeksiyon saldırıları gerçekleştirirken kullanışlı olabilir:
version()
: Returns the version of the MySQL server.database()
: Returns the name of the current database.user()
: Returns the username used to connect to the MySQL server.current_user()
: Returns the current MySQL user.@@hostname
: Returns the hostname of the MySQL server.@@datadir
: Returns the data directory of the MySQL server.@@basedir
: Returns the base directory of the MySQL server.@@version_compile_os
: Returns the operating system on which the MySQL server is running.@@version
: Returns the version and build information of the MySQL server.@@global.version_compile_os
: Returns the operating system on which the MySQL server is running (global scope).@@global.version
: Returns the version and build information of the MySQL server (global scope).
These functions can be used to gather information about the MySQL server and its environment during a SQL injection attack.
Bu fonksiyonlar, bir SQL enjeksiyon saldırısı sırasında MySQL sunucusu ve çevresi hakkında bilgi toplamak için kullanılabilir.
Tüm enjeksiyonlar
Bu bölümde, MySQL enjeksiyonu hakkında bilgi bulacaksınız. MySQL enjeksiyonu, bir web uygulamasının veritabanına kötü niyetli SQL kodu enjekte ederek saldırganın yetkisiz verilere erişmesine veya veritabanını manipüle etmesine olanak tanır. Bu bölümde, MySQL enjeksiyonunun çeşitli türlerini ve nasıl kullanılabileceğini öğreneceksiniz.
İçerik
MySQL Enjeksiyonu Nedir?
MySQL enjeksiyonu, bir web uygulamasının veritabanına kötü niyetli SQL kodu enjekte ederek saldırganın yetkisiz verilere erişmesine veya veritabanını manipüle etmesine olanak tanır. Bu, web uygulamasının güvenlik açıklarından yararlanarak gerçekleştirilebilir. MySQL enjeksiyonu, saldırganın kullanıcı girişlerini manipüle etmesine ve ardından bu girişlerin veritabanı sorgularına dahil edilmesine dayanır.
MySQL Enjeksiyonu Türleri
MySQL enjeksiyonu çeşitli şekillerde gerçekleştirilebilir. İşte bazı yaygın MySQL enjeksiyonu türleri:
Union-Based SQL Injection: Bu tür enjeksiyon, UNION operatörünü kullanarak veritabanından veri çekmeyi hedefler. Saldırgan, UNION operatörünü kullanarak ek veri çekme sorgularını mevcut sorguya ekler ve böylece veritabanından istenmeyen verileri alır.
Boolean-Based SQL Injection: Bu tür enjeksiyon, web uygulamasının yanıtlarını analiz ederek doğru veya yanlış yanıtlar aracılığıyla veritabanı hakkında bilgi elde etmeyi hedefler. Saldırgan, web uygulamasının yanıtlarını manipüle ederek veritabanı yapısını keşfedebilir.
Time-Based SQL Injection: Bu tür enjeksiyon, web uygulamasının yanıtlarını geciktirerek veritabanı hakkında bilgi elde etmeyi hedefler. Saldırgan, web uygulamasının yanıtlarını geciktirerek veritabanı yapısını keşfedebilir.
Error-Based SQL Injection: Bu tür enjeksiyon, web uygulamasının hata mesajlarını kullanarak veritabanı hakkında bilgi elde etmeyi hedefler. Saldırgan, web uygulamasının hata mesajlarını manipüle ederek veritabanı yapısını keşfedebilir.
MySQL Enjeksiyonu Örnekleri
Bu bölümde, MySQL enjeksiyonunun bazı örneklerini bulacaksınız. Her bir örnek, belirli bir MySQL enjeksiyon türünü hedefler ve nasıl gerçekleştirileceğini gösterir.
MySQL Enjeksiyonu Önleme Yöntemleri
MySQL enjeksiyonu saldırılarını önlemek için aşağıdaki önlemleri alabilirsiniz:
Parametre Doğrulama: Web uygulamanızın giriş parametrelerini doğrulayarak saldırganın kötü niyetli girişleri engelleyebilirsiniz.
Parametre Bağlama: Web uygulamanızın giriş parametrelerini veritabanı sorgularına bağlayarak SQL enjeksiyonu saldırılarını engelleyebilirsiniz.
Güvenli Veritabanı Sorguları: Veritabanı sorgularınızı parametrelerle birleştirirken güvenli yöntemler kullanarak SQL enjeksiyonu saldırılarını önleyebilirsiniz.
Güvenlik Duvarı: Web uygulamanızın arkasına bir güvenlik duvarı yerleştirerek saldırıları engelleyebilirsiniz.
Güncel Yazılım: Web uygulamanızın ve kullanılan veritabanının güncel olduğundan emin olun. Güncel yazılım, bilinen güvenlik açıklarını düzeltir ve saldırıları önler.
Güvenlik Testleri: Web uygulamanızı düzenli olarak güvenlik testlerine tabi tutarak potansiyel güvenlik açıklarını tespit edebilir ve düzeltebilirsiniz.
from https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/
Akış
Unutmayın ki "modern" MySQL sürümlerinde "information_schema.tables" yerine "mysql.innodb_table_stats" kullanabilirsiniz (Bu, WAF'ları atlatmak için faydalı olabilir).
Sadece 1 değer
group_concat()
Limit X,1
Tek tek kör
substr(version(),X,1)='r'
veyasubstring(version(),X,1)=0x70
veyaascii(substr(version(),X,1))=112
mid(version(),X,1)='5'
Kör ekleme
LPAD(version(),1...lenght(version()),'1')='asd'...
RPAD(version(),1...lenght(version()),'1')='asd'...
SELECT RIGHT(version(),1...lenght(version()))='asd'...
SELECT LEFT(version(),1...lenght(version()))='asd'...
SELECT INSTR('foobarbar', 'fo...')=1
Sütun sayısını tespit etme
Basit bir ORDER kullanarak
MySQL Birleştirme Tabanlı
Bu teknik, bir SQL enjeksiyon saldırısı sırasında MySQL veritabanında birleştirme tabanlı bir saldırı gerçekleştirmek için kullanılır. Birleştirme tabanlı saldırılar, UNION operatörünü kullanarak birden fazla sorguyu birleştirerek istenilen verileri elde etmeyi amaçlar.
Saldırı Adımları
İlk adım, hedef web uygulamasında SQL enjeksiyon açığı bulmaktır. Bu genellikle kullanıcı giriş alanları veya URL parametreleri gibi veri girişi noktalarında gerçekleşir.
SQL enjeksiyon açığı bulunduktan sonra, UNION operatörünü kullanarak sorguya eklemek için birleştirme tabanlı bir saldırı gerçekleştirilir. UNION operatörü, iki veya daha fazla sorguyu birleştirmek için kullanılır.
Saldırgan, UNION operatörünü kullanarak hedef veritabanından istenilen verileri çekmek için uygun sorguları oluşturur. Bu sorgular, saldırganın hedef veritabanında bulunan tabloları ve sütunları keşfetmesine olanak tanır.
Saldırgan, UNION operatörünün kullanıldığı sorguları hedef web uygulamasına gönderir ve sonuçları analiz eder. Saldırgan, UNION operatörünün kullanıldığı sorguların sonuçlarını alarak hedef veritabanındaki verilere erişebilir.
Örnek Saldırı
Aşağıda, birleştirme tabanlı bir saldırı örneği verilmiştir:
Bu sorgu, "users" tablosundan "name" ve "email" sütunlarını alırken, "admin_users" tablosundan "username" ve "password" sütunlarını da alır. Saldırgan, bu sorguyu kullanarak normal kullanıcıların verilerini ve yönetici kullanıcılarının kimlik bilgilerini elde edebilir.
Önleme
Birleştirme tabanlı saldırılardan korunmak için aşağıdaki önlemleri alabilirsiniz:
Güvenli veri girişi sağlamak için kullanıcı giriş alanlarını ve URL parametrelerini doğru bir şekilde doğrulayın ve filtreleyin.
SQL sorgularını parametreli sorgularla oluşturun ve hazırlayın. Bu, SQL enjeksiyon saldırılarını önlemeye yardımcı olur.
Güvenlik açıklarını tespit etmek için düzenli olarak web uygulaması güvenlik taramaları yapın ve güncellemeleri takip edin.
Veritabanı kullanıcılarının minimum ayrıcalıklara sahip olduğundan emin olun ve gereksiz ayrıcalıkları kaldırın.
Güvenlik bilincini artırmak için personelinizi eğitin ve bilinçlendirin.
Bu önlemler, birleştirme tabanlı saldırılardan korunmanıza yardımcı olacaktır. Ancak, her zaman güncel ve güvenli bir web uygulaması kullanmanız önemlidir.
SSRF
SSRF elde etmek için bir Mysql enjeksiyonunu kötüye kullanmanın farklı seçeneklerini buradan öğrenin.
WAF bypass hileleri
Information_schema alternatifleri
Unutmayın ki "modern" MySQL sürümlerinde information_schema.tables yerine mysql.innodb_table_stats veya sys.x$schema_flattened_keys veya sys.schema_table_statistics kullanabilirsiniz.
Virgülsüz MySQL enjeksiyonu
Virgül kullanmadan 2 sütun seçin (https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma):
Sütun adı olmadan değerleri almak
Eğer belirli bir noktada tablonun adını biliyorsanız ancak tablo içindeki sütunların adını bilmiyorsanız, şu şekilde çalıştırarak kaç sütun olduğunu bulmaya çalışabilirsiniz:
Varsayalım ki 2 sütun var (ilk sütun ID olacak ve diğer sütun bayrak olacak), bayrağın içeriğini karakter karakter deneyerek brute force yöntemiyle deneyebilirsiniz:
Daha fazla bilgi için https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952
MySQL geçmişi
MySQL içinde diğer yürütmeleri görmek için tabloyu okuyabilirsiniz: sys.x$statement_analysis
Alternatif sürümler
Diğer MYSQL enjeksiyon kılavuzları
Referanslar
RootedCON, İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemli etkinliklerden biridir. Teknik bilginin teşvik edilmesi misyonuyla, bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
Last updated