<summary><strong>AWS hacklemeyi sıfırdan kahramanla öğrenin</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
* **Şirketinizi HackTricks'te reklamını görmek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINA**](https://github.com/sponsors/carlospolop) göz atın!
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.
Bir MSSQL sunucusu içinde SQL enjeksiyonu kullanarak **etki alanı kullanıcılarını numaralandırmak mümkün olabilir**. Bunun için aşağıdaki MSSQL fonksiyonlarını kullanabilirsiniz:
* **`SELECT DEFAULT_DOMAIN()`**: Geçerli etki alanı adını alır.
* **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`**: Eğer etki alanının adını biliyorsanız (_bu örnekte DOMAIN_), bu fonksiyon **hex formatında kullanıcının Administrator SID'sini** döndürecektir. Bu, `0x01050000000[...]0000f401` gibi görünecektir, **son 4 byte'ın** büyük uçlu formatında **500** sayısı olduğuna dikkat edin, bu da **yönetici kullanıcısının genel ID'si** olan.\
Bu fonksiyon, **etki alanının ID'sini** (son 4 byte hariç tüm byte'lar) bilmenizi sağlar.
* **`SUSER_SNAME(0x01050000000[...]0000e803)`** : Bu fonksiyon, belirtilen ID'nin **kullanıcı adını** (varsa) döndürecektir, bu durumda büyük uçlu == **1000** olan **0000e803** (genellikle bu, oluşturulan ilk düzenli kullanıcı ID'sidir). Ardından, 1000 ila 2000 arasındaki kullanıcı ID'lerini brute-force yaparak muhtemelen etki alanının tüm kullanıcılarının kullanıcı adlarını elde edebilirsiniz. Örneğin aşağıdaki gibi bir fonksiyon kullanarak:
Hata tabanlı SQL enjeksiyonları genellikle `+AND+1=@@version--` gibi yapılarla benzerlik gösterir ve «OR» operatörüne dayanan varyantlar içerir. Bu tür ifadeleri içeren sorgular genellikle WAF'lar tarafından engellenir. Bir bypass olarak, aranan veride bir veri türü dönüşüm hatası tetikleyen belirli fonksiyon çağrılarının sonucunu %2b karakterini kullanarak bir dize ile birleştirin.
`xp_dirtree` gibi depolanan prosedürler, Microsoft tarafından resmi olarak belgelenmemiş olsalar da, MSSQL içinde ağ işlemlerindeki kullanışlılıkları nedeniyle başkaları tarafından çevrimiçi olarak açıklanmıştır. Bu prosedürler, çeşitli [örneklerde](https://www.notsosecure.com/oob-exploitation-cheatsheet/) ve [gönderilerde](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/) gösterildiği gibi, Out of Band Veri sızdırma işlemlerinde sıklıkla kullanılır.
Örneğin, `xp_dirtree` depolanan prosedürü, ağ istekleri yapmak için kullanılır, ancak yalnızca TCP bağlantı noktası 445'e izin verir. Bağlantı noktası numarası değiştirilemez, ancak ağ paylaşımlarından okuma yapmaya izin verir. Kullanımı aşağıdaki SQL betiğinde gösterilmiştir:
Bu yöntemin, varsayılan ayarlarla çalışan `Windows Server 2016 Datacenter` üzerinde çalışan `Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)` gibi tüm sistem yapılandırmalarında çalışmayabileceği önemlidir.
Ayrıca, `master..xp_fileexist` ve `xp_subdirs` gibi alternatif depolanan prosedürler de benzer sonuçlara ulaşabilir. `xp_fileexist` hakkında daha fazla bilgi için bu [TechNet makalesine](https://social.technet.microsoft.com/wiki/contents/articles/40107.xp-fileexist-and-its-alternate.aspx) bakabilirsiniz.
Ayrıca **`xp_cmdshell`** kullanarak bir **SSRF** tetikleyen bir şeyi **yürütmek** için de kullanabilirsiniz. Daha fazla bilgi için sayfadaki ilgili bölümü **okuyun**:
Özel işlevleri yürütmek için MSSQL içinde yüklenecek olan bir DLL'ye derlenen herhangi bir .NET dilinde yazılmış kod olan CLR UDF (Common Language Runtime User Defined Function) oluşturmak, genellikle `sa` olarak veya Yönetici rolüyle veritabanı bağlantısı yapıldığında mümkün olur.
Bu işlevselliğin çekirdeği, MSSQL içindeki HTTP GET isteklerini yürütmek ve içeriği almak için `WebClient` sınıfını kullanan `http.cs` dosyasında özetlenmiştir. Bu işlevselliğin çekirdeği aşağıdaki gibi gösterilir:
`CREATE ASSEMBLY` SQL komutunu çalıştırmadan önce, sunucunun güvenilir derlemeler listesine ( `select * from sys.trusted_assemblies;` ile görüntülenebilir) derlemenin SHA512 karma değerini eklemek için aşağıdaki SQL parçacığını çalıştırmak önerilir:
Bir tablonun tam içeriğini tek bir sorguda çıkarmak için özlü bir yöntem, `FOR JSON` ifadesini kullanmaktır. Bu yaklaşım, "raw" gibi belirli bir mod gerektiren `FOR XML` ifadesinden daha özlüdür. `FOR JSON` ifadesi, kısalığı nedeniyle tercih edilir.
In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done:
Bu bölümde, MSSQL veritabanı üzerinde SQL enjeksiyonu saldırıları hakkında bilgi bulacaksınız. SQL enjeksiyonu, bir web uygulamasının güvenlik açıklarını kullanarak veritabanına kötü niyetli SQL kodu enjekte etme işlemidir. Bu saldırı türü, kullanıcı girişlerinin doğru bir şekilde filtrelenmediği veya doğru bir şekilde işlenmediği durumlarda gerçekleşir.
### MSSQL Enjeksiyonu Türleri
MSSQL enjeksiyonu, çeşitli yöntemlerle gerçekleştirilebilir. İşte en yaygın kullanılan MSSQL enjeksiyon türleri:
- **Union-Based Enjeksiyon**: Bu yöntemde, UNION operatörü kullanılarak veritabanından veri çekilir.
- **Boolean-Based Enjeksiyon**: Bu yöntemde, SQL sorgusunun sonucunu doğru veya yanlış ifadelerle kontrol ederek veri çekilir.
- **Time-Based Enjeksiyon**: Bu yöntemde, SQL sorgusunun çalışma süresini kontrol ederek veri çekilir.
- **Error-Based Enjeksiyon**: Bu yöntemde, SQL sorgusunda hata oluşturularak veri çekilir.
### MSSQL Enjeksiyonu Örneği
Aşağıdaki örnek, MSSQL enjeksiyonunun nasıl gerçekleştirileceğini göstermektedir:
Bu URL'de, `id` parametresine eklenen `'` karakteri ile SQL enjeksiyonu gerçekleştirilmektedir. SQL sorgusunda `UNION` veya `SELECT` gibi operatörler kullanılarak veritabanından veri çekilmektedir.
For users granted the `VIEW SERVER STATE` permission on the server, it's possible to see all executing sessions on the SQL Server instance. However, without this permission, users can only view their current session. The currently executing SQL query can be retrieved by accessing sys.dm_exec_requests and sys.dm_exec_sql_text:
Bu bölümde, MSSQL veritabanlarında SQL enjeksiyonu saldırılarına odaklanacağız. SQL enjeksiyonu, bir uygulamanın veritabanı sorgularına kötü niyetli SQL kodu enjekte ederek saldırganın veritabanına yetkisiz erişim elde etmesine olanak tanır.
### Union Saldırısı
Union saldırısı, SQL enjeksiyonunun en yaygın kullanılan yöntemlerinden biridir. Bu saldırıda, UNION operatörü kullanılarak iki veya daha fazla sorgunun sonuçları birleştirilir. Bu sayede saldırgan, hedef uygulamanın veritabanından istediği bilgileri çekebilir.
Aşağıdaki örnek, UNION saldırısının bir örneğini göstermektedir:
Bu saldırıda, `id` parametresine `-1 union select null,(select text from sys.dm_exec_requests cross apply sys.dm_exec_sql_text(sql_handle)),null,null` değeri verilmiştir. Bu değer, UNION operatörü kullanılarak birincil sorgunun sonucuna ek olarak `sys.dm_exec_requests` ve `sys.dm_exec_sql_text` tablolarından bilgi çekmektedir.
Bu saldırı, hedef uygulamanın veritabanında bulunan verileri çalmak veya manipüle etmek için kullanılabilir. Saldırgan, UNION saldırısını kullanarak veritabanı yapısını keşfedebilir, kullanıcı kimlik bilgilerini ele geçirebilir veya hassas verileri sızdırabilir.
Bu nedenle, uygulama geliştiricilerinin SQL enjeksiyonu saldırılarına karşı koruma önlemleri alması önemlidir. Bu önlemler arasında parametre bağlama, giriş doğrulama ve filtreleme gibi güvenlik kontrolleri bulunur.
Bu bölümde, MSSQL veritabanı üzerinde SQL enjeksiyonu saldırılarına odaklanacağız. SQL enjeksiyonu, bir web uygulamasının veritabanı sorgularına kötü niyetli SQL kodu enjekte ederek saldırganın istismar etmesine izin verir.
## MSSQL Enjeksiyonu Temelleri
MSSQL enjeksiyonu, bir web uygulamasının giriş alanlarına veya parametrelerine kötü niyetli SQL kodu enjekte ederek gerçekleştirilir. Bu, saldırganın veritabanı sorgularını manipüle etmesine ve istediği verilere erişmesine olanak tanır.
MSSQL enjeksiyonu saldırılarında yaygın olarak kullanılan bazı teknikler şunlardır:
- **Union Saldırıları**: Birleştirme (union) operatörü kullanılarak birden fazla sorgunun sonuçları birleştirilir. Bu, saldırganın veritabanından istediği verileri almasını sağlar.
- **Boolean Saldırıları**: Saldırgan, mantıksal ifadeleri kullanarak doğru veya yanlış sonuçlar elde eder. Bu, veritabanındaki bilgilerin doğruluğunu doğrulamak için kullanılır.
- **Time-Based Saldırılar**: Saldırgan, zaman gecikmelerini kullanarak veritabanı sorgularının sonuçlarını kontrol eder. Bu, saldırganın veritabanından bilgi çekmesini sağlar.
## Union Saldırıları
Union saldırıları, birleştirme (union) operatörünün kullanıldığı SQL enjeksiyonu saldırılarıdır. Bu saldırılar, birleştirme operatörü kullanılarak birden fazla sorgunun sonuçlarının birleştirilmesini hedefler.
Aşağıdaki örnek URL'de union saldırısı gerçekleştirilmektedir:
Bu URL'de, `id` parametresine `1%C2%85union%C2%85select%C2%A0null,@@version,null--` değeri verilmiştir. Bu değer, union saldırısını gerçekleştirmek için kullanılan SQL kodunu içerir.
Union saldırısı, `union` operatörü kullanılarak birden fazla sorgunun sonuçlarının birleştirilmesini sağlar. Bu örnekte, `null` değeri kullanılarak ilk sorgunun sonucu atlanırken, `@@version` değeri kullanılarak MSSQL veritabanı sürümü elde edilmektedir.
Saldırgan, union saldırısı kullanarak veritabanından istediği verilere erişebilir. Bu nedenle, web uygulamalarının giriş alanları ve parametreleri dikkatlice kontrol edilmeli ve gerekli güvenlik önlemleri alınmalıdır.
Bu bölümde, MSSQL veritabanı üzerinde SQL enjeksiyonu saldırılarına odaklanacağız. SQL enjeksiyonu, bir web uygulamasının veritabanı sorgularına zararlı SQL kodu enjekte ederek saldırganın istediği işlemleri gerçekleştirmesine olanak tanır.
### MSSQL Enjeksiyonu Temelleri
MSSQL enjeksiyonu, web uygulamasının giriş alanlarına veya parametrelerine zararlı SQL kodu enjekte ederek gerçekleştirilir. Bu kod, veritabanı sorgularının normal işleyişini bozarak saldırganın istediği verilere erişmesini veya değiştirmesini sağlar.
MSSQL enjeksiyonu saldırılarında, saldırganın hedeflediği SQL kodu, web uygulamasının veritabanı sorgularına eklenir. Bu kod, veritabanı tarafından doğrudan yorumlanır ve sonuçlar web uygulamasına geri döner. Saldırgan, bu yolla veritabanı üzerinde çeşitli işlemler gerçekleştirebilir.
### MSSQL Enjeksiyonu Örnekleri
Aşağıda, MSSQL enjeksiyonu için bazı örnekler verilmiştir:
Yukarıdaki örneklerde, `id` parametresine zararlı SQL kodu enjekte edilmiştir. `union select` ifadesi kullanılarak `@@version` fonksiyonu çağrılmış ve sonuçlar `null` olarak döndürülmüştür.
Bu tür bir enjeksiyon saldırısı, saldırganın MSSQL veritabanı hakkında bilgi edinmesini sağlar. `@@version` fonksiyonu, veritabanı sürümünü döndürür. Saldırgan, bu bilgiyi kullanarak hedef sistemi daha fazla zafiyet için analiz edebilir.
### Önleme
MSSQL enjeksiyonu saldırılarından korunmak için aşağıdaki önlemleri alabilirsiniz:
- Giriş alanlarını doğru bir şekilde doğrulayın ve filtreleyin.
- Parametreleri güvenli bir şekilde işleyin ve sorguları hazırlarken parametre bağlama kullanın.
- Güvenlik duvarı ve saldırı tespit sistemleri kullanarak saldırıları engelleyin.
- Veritabanı kullanıcılarının minimum ayrıcalıklara sahip olduğundan emin olun.
- Güncel ve güvenli bir MSSQL sürümü kullanın.
Bu önlemler, MSSQL enjeksiyonu saldırılarını önlemeye yardımcı olabilir. Ancak, her zaman güncel güvenlik uygulamalarını takip etmek ve web uygulamalarını düzenli olarak test etmek önemlidir.
Bu bölümde, MSSQL veritabanı üzerinde SQL enjeksiyonu saldırılarına odaklanacağız. SQL enjeksiyonu, bir web uygulamasının veritabanı sorgularına kötü niyetli SQL kodu enjekte ederek saldırganın istismar etmesine izin veren bir güvenlik açığıdır.
## MSSQL Enjeksiyonu Temelleri
MSSQL enjeksiyonu, bir web uygulamasının giriş alanlarına veya parametrelerine kötü niyetli SQL kodu enjekte ederek gerçekleştirilir. Bu, saldırganın veritabanı sorgularını manipüle etmesine ve istediği bilgilere erişmesine olanak tanır.
MSSQL enjeksiyonu saldırılarında yaygın olarak kullanılan bazı teknikler şunlardır:
- **Union Saldırısı**: Birleştirme saldırısı, UNION operatörünü kullanarak bir SQL sorgusuna ek veri eklemeyi içerir. Bu, saldırganın veritabanından istediği bilgileri çekmesine olanak tanır.
- **Boolean Saldırısı**: Boolean saldırısı, saldırganın SQL sorgusunu doğru veya yanlış sonuçlarla sınırlayarak bilgi elde etmesini sağlar. Bu, veritabanındaki bilgilerin doğruluğunu test etmek için kullanılabilir.
- **Time-Based Saldırı**: Time-based saldırı, saldırganın SQL sorgusunun yanıt süresini manipüle ederek bilgi elde etmesini sağlar. Bu, veritabanındaki bilgilerin varlığını veya doğruluğunu test etmek için kullanılabilir.
## MSSQL Enjeksiyonu Örneği
Aşağıdaki örnek, bir web uygulamasında MSSQL enjeksiyonu saldırısı gerçekleştirmek için kullanılan bir URL'yi göstermektedir:
Bu URL, `id` parametresine `1 union select null,@@version,null from.users--` değerini ekleyerek birleştirme saldırısı gerçekleştirir. Bu saldırı, `@@version` fonksiyonunu kullanarak MSSQL veritabanı sürümünü elde etmeyi amaçlar.
Saldırgan, bu saldırıyı kullanarak hedef web uygulamasının veritabanı sürümünü öğrenebilir ve bu bilgiyi daha fazla saldırı veya istismar için kullanabilir.
Bu örnek, MSSQL enjeksiyonunun temel bir örneğini göstermektedir. Gerçek saldırılar daha karmaşık olabilir ve farklı teknikler kullanabilir.
Bu bölümde, MSSQL veritabanında SQL enjeksiyonu saldırılarına odaklanacağız. SQL enjeksiyonu, bir web uygulamasının veritabanı sorgularına kötü niyetli SQL kodu enjekte ederek saldırganın istismar etmesine izin veren bir güvenlik açığıdır.
## MSSQL Enjeksiyonu Temelleri
MSSQL enjeksiyonu, bir web uygulamasının giriş alanlarına veya parametrelerine kötü niyetli SQL kodu enjekte ederek gerçekleştirilir. Bu, saldırganın veritabanı sorgularını manipüle etmesine ve istediği verilere erişmesine olanak tanır.
MSSQL enjeksiyonu saldırılarında yaygın olarak kullanılan bazı teknikler şunlardır:
- **Union Saldırısı**: Birleştirme saldırısı, bir SQL sorgusuna eklenen ek bir SELECT ifadesi aracılığıyla verilerin çalınmasını sağlar. Bu, saldırganın veritabanından istediği bilgileri almasına olanak tanır.
- **Boolean Saldırısı**: Boolean saldırısı, saldırganın doğru veya yanlış yanıtlar alarak veritabanı hakkında bilgi edinmesini sağlar. Bu, saldırganın veritabanı yapısını keşfetmesine yardımcı olur.
- **Time-Based Saldırı**: Zaman tabanlı saldırı, saldırganın SQL sorgusunun yanıt süresini kullanarak veritabanı hakkında bilgi edinmesini sağlar. Bu, saldırganın veritabanı yapısını keşfetmesine yardımcı olur.
## MSSQL Enjeksiyonu Örneği
Aşağıdaki URL, MSSQL enjeksiyonu saldırısının bir örneğini göstermektedir:
Bu URL'de, `id` parametresine `0xunion+select\Nnull,@@version,null+from+users--` değeri verilmiştir. Bu, birleştirme saldırısı kullanarak veritabanından kullanıcı tablosunun sürüm bilgisini çalmayı amaçlamaktadır.
Saldırgan, `union select` ifadesini kullanarak mevcut sorguya ek bir SELECT ifadesi ekler. `@@version` ifadesi, MSSQL veritabanının sürüm bilgisini döndürür. `null` ifadesi ise diğer sütunları doldurmak için kullanılır.
Sonuç olarak, saldırgan, `@@version` değerini kullanarak MSSQL veritabanının sürüm bilgisini elde eder.
Bu örnek, MSSQL enjeksiyonunun temel bir örneğini göstermektedir. Saldırganlar, bu teknikleri kullanarak daha karmaşık saldırılar gerçekleştirebilir ve veritabanı üzerinde daha fazla kontrol elde edebilir.
According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";":
<summary><strong>Learn AWS hacking from zero to hero with</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.