XLSX Dosyaları ile Web Uygulama Saldırıları
XLSX dosyaları, çeşitli saldırı türleri oluşturabilir ve web uygulamalarında güvenlik açıklarına neden olabilir. Bu makalede, XLSX dosyaları ile gerçekleştirilebilecek SQL Injection (SQLi), Cross-Site Scripting (XSS), XML External Entity (XXE), Server-Side Request Forgery (SSRF) ve Insecure Direct Object References (IDOR) saldırılarını detaylı ve teknik bir şekilde ele alacağız.
1. XLSX ile SQL Injection (SQLi)
Detaylı Teknik Açıklama:
SQL Injection (SQLi), veritabanı sorgularına kullanıcı tarafından sağlanan kötü niyetli verilerin dahil edilmesiyle gerçekleştirilir. XLSX dosyalarındaki veriler, veritabanı sorgularına dahil edildiğinde SQL enjeksiyonuna neden olabilir. SQLi saldırısı, uygulamanın veritabanı sorgularını manipüle ederek hassas verileri çalmak veya veritabanını değiştirmek amacıyla yapılır.
Senaryo ve Örnekler:
- Kötü Amaçlı XLSX Dosyası Oluşturma:
XLSX dosyasında, SQL enjeksiyonuna uygun veri içerebiliriz. Örneğin, aşağıdaki tablo SQL enjeksiyonuna uygun bir veri içermektedir:
| id | name | email | |----|------------------------|-----------------------------| | 1 | Alice | alice@example.com | | 2 | Bob'; DROP TABLE users;-- | bob@example.com |
Bu veriyi içeren XLSX dosyasını yüklediğinizde, uygulama SQL enjeksiyonuna uğrayabilir.
- SQL Injection Testi:
Flask ve SQLite kullanarak basit bir web uygulaması oluşturacağız. Uygulama, XLSX dosyasındaki verileri veritabanına ekleyecek ve SQL enjeksiyonunu test edeceğiz. Aşağıdaki Python kodu bu uygulamayı oluşturmaktadır:
from flask import Flask, request import sqlite3 import pandas as pd app = Flask('__main__') def init_db(): conn = sqlite3.connect('example.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)''') conn.commit() conn.close() init_db() @app.route('/') def index(): return ''' XLSX Yükle --- yükleme formu var AMA BLOGGER DA KOD YEMEDİĞİ İÇİN BU ALANI SİLDİM. BASİT YÜKLEME FORMU OLDUĞUNU HAYAL EDİN..:) --- ''' @app.route('/upload', methods=['POST']) def upload(): if 'file' not in request.files: return 'Dosya bulunamadı' file = request.files['file'] if file.filename == '': return 'Dosya seçilmedi' if file and file.filename.endswith('.xlsx'): conn = sqlite3.connect('example.db') c = conn.cursor() df = pd.read_excel(file) for _, row in df.iterrows(): query = f"INSERT INTO users (id, name, email) VALUES ({row['id']}, '{row['name']}', '{row['email']}')" c.execute(query) conn.commit() conn.close() return 'Dosya yüklendi ve veritabanına eklendi' return 'Geçersiz dosya türü' if __name__ == '__main__': app.run(debug=True)
Yukarıdaki kod, XLSX dosyasındaki verileri veritabanına ekler ve SQL enjeksiyonu olup olmadığını test eder.
Güvenlik Önlemleri:
- Parametreli Sorgular: SQL sorgularında parametreli ifadeler kullanarak verilerin doğrudan sorguya dahil edilmesini engelleyin. Aşağıdaki örnekte olduğu gibi:
query = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)"
c.execute(query, (row['id'], row['name'], row['email']))
2. XLSX ile Cross-Site Scripting (XSS)
Detaylı Teknik Açıklama:
Cross-Site Scripting (XSS) saldırısı, zararlı JavaScript kodlarının kullanıcıların tarayıcılarında çalıştırılmasını sağlar. XLSX dosyalarında bulunan veriler, HTML veya JavaScript olarak işlenirse XSS saldırılarına neden olabilir. XLSX dosyasında yer alan içerikler, web uygulamasında uygun şekilde işlenmediğinde bu tür saldırılara açık hale gelebilir.
Senaryo ve Örnekler:
- Kötü Amaçlı XLSX Dosyası Oluşturma:
Bir XLSX dosyasının hücrelerine zararlı HTML veya JavaScript kodları ekleyebilirsiniz. Aşağıdaki örnekte, XSS açığı yaratacak bir içerik bulunmaktadır:
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> <row r="1"> <c r="A1" t="inlineStr"> <is> <t><script>alert('XSS');</script></t> </is> </c> </row> </sheetData> </worksheet>
- XSS Testi:
Bu XLSX dosyasını yükleyin ve uygulamanın HTML içeriği doğru şekilde işleyip işlemediğini test edin. Zararlı JavaScript kodlarının çalışıp çalışmadığını gözlemleyin.
Güvenlik Önlemleri:
- XSS Filtreleme: HTML olarak işlenen kullanıcı verilerinde XSS filtreleri kullanın. HTML özel karakterlerini temizlemek için aşağıdaki gibi bir yöntem kullanabilirsiniz:
from html import escape
safe_input = escape(user_input)
3. XLSX ile XML External Entity (XXE)
Detaylı Teknik Açıklama:
XML External Entity (XXE) saldırısı, XML verilerinin işlenmesi sırasında dış kaynaklara erişim sağlar. XLSX dosyaları XML formatında olduğu için XXE saldırısına açık olabilir. XLSX dosyalarındaki XML içeriğinde, dış varlıkları referans gösteren içerikler bulunabilir ve bu da hassas bilgilere erişim sağlayabilir.
Senaryo ve Örnekler:
- Kötü Amaçlı XLSX Dosyası Oluşturma:
Bir XLSX dosyasının içinde dış varlıkları referans gösteren XML içeriği oluşturabilirsiniz. Aşağıda XXE içeren bir XLSX dosyası örneği bulunmaktadır:
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> <row r="1"> <c r="A1" t="inlineStr"> <is> <t>http://localhost:8000/secret</t> </is> </c> </row> </sheetData> </worksheet>
- XXE Testi:
Bu XLSX dosyasını yükleyin ve sunucunun hassas bilgileri sızdırıp sızdırmadığını gözlemleyin. XML dış varlıklarının işlenip işlenmediğini kontrol edin.
Güvenlik Önlemleri:
- XML Parser Konfigürasyonu: XML parser'ınızı dış varlıkları işleyemeyecek şekilde yapılandırın. Örneğin:
from lxml import etree
parser = etree.XMLParser(resolve_entities=False)
tree = etree.parse('file.xml', parser)
4. XLSX ile Server-Side Request Forgery (SSRF)
Detaylı Teknik Açıklama:
Server-Side Request Forgery (SSRF) saldırısı, sunucu tarafında dış veya iç hizmetlere istek yapmayı hedefler. XLSX dosyaları, sunucunun iç veya dış hizmetlerine istek yapacak veriler içerebilir. XLSX dosyalarındaki veriler, sunucu tarafından istek gönderilmesine neden olabilir.
Senaryo ve Örnekler:
- Kötü Amaçlı XLSX Dosyası Oluşturma:
XLSX dosyasının içindeki veriler, sunucunun iç hizmetlerine istek yapacak şekilde hazırlanabilir. Aşağıdaki örnek, SSRF açığı yaratabilir:
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> <row r="1"> <c r="A1" t="inlineStr"> <is> <t>http://localhost:8000/secret</t> </is> </c> </row> </sheetData> </worksheet>
- SSRF Testi:
Kötü amaçlı XLSX dosyasını yükleyin ve sunucunun iç servislerine istek yapıp yapmadığını gözlemleyin. İç hizmetlere veya dış kaynaklara istek yapma yeteneğini test edin.
Güvenlik Önlemleri:
- İç Servis Erişimi: İç ağ erişimini kısıtlayın ve yalnızca gerekli kaynaklara izin verin. İç ağ hizmetlerine erişimi sınırlandırmak için firewall ve güvenlik grupları kullanın.
- İstek Validasyonu: Sunucu tarafında yapılan istekleri doğrulayın ve sadece izin verilen kaynaklara istek yapılmasını sağlayın. Yalnızca gerekli URL'lere izin verin.
5. XLSX ile Insecure Direct Object References (IDOR)
Detaylı Teknik Açıklama:
Insecure Direct Object References (IDOR), yetkisiz kullanıcıların doğrudan nesne referanslarına erişmesine neden olabilir. XLSX dosyaları, uygulamada doğrudan nesne referansları içerebilir. Bu, yetkisiz erişim veya bilgi sızıntısına neden olabilir.
Senaryo ve Örnekler:
- Kötü Amaçlı XLSX Dosyası Oluşturma:
XLSX dosyasındaki veriler, doğrudan nesne referansları içerebilir ve bu referanslar yetkisiz erişime neden olabilir. Aşağıdaki örnekte, gizli verilere erişimi tetikleyebilecek bir içerik bulunmaktadır:
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> <row r="1"> <c r="A1" t="inlineStr"> <is> <t>secret_document_id_123</t> </is> </c> </row> </sheetData> </worksheet>
- IDOR Testi:
Yetkisiz bir kullanıcının bu XLSX dosyasını yükleyerek gizli verilere erişip erişemediğini test edin. Özellikle bu verilerin yetkisiz kullanıcılar tarafından erişilip erişilemediğini kontrol edin.
Güvenlik Önlemleri:
- Yetkilendirme: Uygulamalarda nesne erişimini kontrol edin ve yetkilendirme mekanizmalarını güçlendirin. Kullanıcıların yalnızca yetkili oldukları verilere erişmesini sağlayın.
- Erişim Kontrolü: Kullanıcıların yalnızca izin verilen nesnelere erişmesini sağlayan erişim kontrol mekanizmalarını kullanın.
Yorumlar
Yorum Gönder