Translated ['src/pentesting-web/rsql-injection.md'] to tr

This commit is contained in:
Translator 2025-04-15 00:02:25 +00:00
parent 19cd5145f7
commit 821d636ea3

View File

@ -10,7 +10,7 @@
RSQL, RESTful API'lerde girişlerin parametreli filtrelenmesi için tasarlanmış bir sorgu dilidir. FIQL (Feed Item Query Language) temel alınarak geliştirilmiştir ve başlangıçta Mark Nottingham tarafından Atom beslemelerini sorgulamak için belirtilmiştir. RSQL, basitliği ve karmaşık sorguları kompakt ve URI uyumlu bir şekilde HTTP üzerinden ifade etme yeteneği ile öne çıkar. Bu, onu REST uç noktası aramaları için genel bir sorgu dili olarak mükemmel bir seçim haline getirir.
## Genel Bakış
RSQL Injection, RESTful API'lerde sorgu dili olarak RSQL kullanan web uygulamalarındaki bir güvenlik açığıdır. [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) ve [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection) ile benzerlik gösterir; bu güvenlik açığı, RSQL filtreleri düzgün bir şekilde temizlenmediğinde ortaya çıkar ve bir saldırganın yetkisiz olarak verilere erişmesine, değiştirmesine veya silmesine olanak tanır.
RSQL Injection, RSQL'yi RESTful API'lerde sorgu dili olarak kullanan web uygulamalarındaki bir güvenlik açığıdır. [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) ve [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection) ile benzer şekilde, bu güvenlik açığı RSQL filtreleri düzgün bir şekilde temizlenmediğinde ortaya çıkar ve bir saldırganın yetkisiz olarak verilere erişmesine, değiştirmesine veya silmesine olanak tanır.
## Nasıl Çalışır?
RSQL, RESTful API'lerde gelişmiş sorgular oluşturmanıza olanak tanır, örneğin:
@ -28,27 +28,27 @@ Or even take advantage to extract sensitive information with Boolean queries or
## Risks
- **Hassas verilerin ifşa edilmesi:** Bir saldırgan, erişilmemesi gereken bilgileri alabilir.
- **Veri değiştirme veya silme:** Veritabanı kayıtlarını değiştiren filtrelerin enjekte edilmesi.
- **Ayrıcalık yükseltme:** Filtreler aracılığıyla roller veren tanımlayıcıların manipülasyonu, uygulamayı diğer kullanıcıların ayrıcalıklarıyla erişim sağlamak için kandırmak.
- **Yetki yükseltme:** Filtreler aracılığıyla roller veren tanımlayıcıların manipülasyonu, uygulamayı diğer kullanıcıların yetkileriyle erişim sağlamak için kandırmak.
- **Erişim kontrollerinden kaçınma:** Kısıtlı verilere erişmek için filtrelerin manipülasyonu.
- **Kimlik taklidi veya IDOR:** Diğer kullanıcıların bilgilerine ve kaynaklarına erişim sağlamak için filtreler aracılığıyla kullanıcılar arasında tanımlayıcıların değiştirilmesi, bu kullanıcılar olarak doğru bir şekilde kimlik doğrulaması yapılmadan.
- **Kimlik taklidi veya IDOR:** Diğer kullanıcıların bilgilerine ve kaynaklarına erişim sağlamak için filtreler aracılığıyla kullanıcılar arasındaki tanımlayıcıların değiştirilmesi, bu kullanıcılar olarak doğru bir şekilde kimlik doğrulaması yapılmadan.
## Supported RSQL operators
| Operator | Description | Example |
|:----: |:----: |:------------------:|
| `;` / `and` | Mantıksal **VE** operatörü. *Her iki* koşulun *doğru* olduğu satırları filtreler | `/api/v2/myTable?q=columnA==valueA;columnB==valueB` |
| `,` / `or` | Mantıksal **VEYA** operatörü. *En az bir* koşulun *doğru* olduğu satırları filtreler | `/api/v2/myTable?q=columnA==valueA,columnB==valueB` |
| `==` | **eşit** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue* ile tam olarak eşit olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA==queryValue` |
| `=q=` | **arama** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue* içerdiği tüm satırları döndürür | `/api/v2/myTable?q=columnA=q=queryValue` |
| `=like=` | **benzer** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue* gibi olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA=like=queryValue` |
| `=in=` | **içinde** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerinin *valueA* veya *valueB* içerdiği tüm satırları döndürür | `/api/v2/myTable?q=columnA=in=(valueA, valueB)` |
| `=out=` | **hariç** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *valueA* veya *valueB* olmadığı tüm satırları döndürür | `/api/v2/myTable?q=columnA=out=(valueA,valueB)` |
| `!=` | *eşit değil* sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue* ile eşit olmadığı tüm satırları döndürür | `/api/v2/myTable?q=columnA!=queryValue` |
| `=notlike=` | **benzer değil** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue* gibi olmadığı tüm satırları döndürür | `/api/v2/myTable?q=columnA=notlike=queryValue` |
| `<` & `=lt=` | **küçüktür** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue*'dan küçük olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA<queryValue` <br> `/api/v2/myTable?q=columnA=lt=queryValue` |
| `=le=` & `<=` | **küçük veya eşit** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue*'dan küçük veya ona eşit olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA<=queryValue` <br> `/api/v2/myTable?q=columnA=le=queryValue` |
| `>` & `=gt=` | **büyüktür** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue*'dan büyük olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA>queryValue` <br> `/api/v2/myTable?q=columnA=gt=queryValue` |
| `>=` & `=ge=` | **eşit** veya **büyük** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *queryValue*'ya eşit veya ondan büyük olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA>=queryValue` <br> `/api/v2/myTable?q=columnA=ge=queryValue` |
| `=rng=` | **arasında** sorgusu gerçekleştirir. *myTable* içindeki *columnA* değerlerinin *fromValue*'ya eşit veya ondan büyük ve *toValue*'dan küçük veya ona eşit olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA=rng=(fromValue,toValue)` |
| `==` | **eşit** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue* ile tam olarak eşit olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA==queryValue` |
| `=q=` | **arama** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue* içerdiği tüm satırları döndürür | `/api/v2/myTable?q=columnA=q=queryValue` |
| `=like=` | **benzer** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue* gibi olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA=like=queryValue` |
| `=in=` | **içinde** sorgusu gerçekleştirir. *myTable*'dan *columnA*'nın *valueA* veya *valueB* içerdiği tüm satırları döndürür | `/api/v2/myTable?q=columnA=in=(valueA, valueB)` |
| `=out=` | **hariç** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *valueA* veya *valueB* olmadığı tüm satırları döndürür | `/api/v2/myTable?q=columnA=out=(valueA,valueB)` |
| `!=` | *eşit değil* sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue* ile eşit olmadığı tüm satırları döndürür | `/api/v2/myTable?q=columnA!=queryValue` |
| `=notlike=` | **benzer değil** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue* gibi olmadığı tüm satırları döndürür | `/api/v2/myTable?q=columnA=notlike=queryValue` |
| `<` & `=lt=` | **küçüktür** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue*'dan küçük olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA<queryValue` <br> `/api/v2/myTable?q=columnA=lt=queryValue` |
| `=le=` & `<=` | **küçük veya eşit** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue*'dan küçük veya ona eşit olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA<=queryValue` <br> `/api/v2/myTable?q=columnA=le=queryValue` |
| `>` & `=gt=` | **büyüktür** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue*'dan büyük olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA>queryValue` <br> `/api/v2/myTable?q=columnA=gt=queryValue` |
| `>=` & `=ge=` | **eşit** veya **büyük** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *queryValue*'ya eşit veya ondan büyük olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA>=queryValue` <br> `/api/v2/myTable?q=columnA=ge=queryValue` |
| `=rng=` | **arasında** sorgusu gerçekleştirir. *myTable*'dan *columnA* değerlerinin *fromValue*'ya eşit veya ondan büyük ve *toValue*'dan küçük veya ona eşit olduğu tüm satırları döndürür | `/api/v2/myTable?q=columnA=rng=(fromValue,toValue)` |
**Not**: Tablo, [**MOLGENIS**](https://molgenis.gitbooks.io/molgenis/content/) ve [**rsql-parser**](https://github.com/jirutka/rsql-parser) uygulamalarından alınan bilgilere dayanmaktadır.
@ -70,7 +70,7 @@ These filters help refine queries in APIs:
| Filter | Description | Example |
|--------|------------|---------|
| `filter[users]` | Belirli kullanıcılar tarafından sonuçları filtreler | `/api/v2/myTable?filter[users]=123` |
| `filter[status]` | Duruma göre filtreler (aktif/aktif değil, tamamlandı, vb.) | `/api/v2/orders?filter[status]=active` |
| `filter[status]` | Duruma göre filtreler (aktif/pasif, tamamlandı, vb.) | `/api/v2/orders?filter[status]=active` |
| `filter[date]` | Tarih aralığında sonuçları filtreler | `/api/v2/logs?filter[date]=gte:2024-01-01` |
| `filter[category]` | Kategori veya kaynak türüne göre filtreler | `/api/v2/products?filter[category]=electronics` |
| `filter[id]` | Benzersiz bir tanımlayıcıya göre filtreler | `/api/v2/posts?filter[id]=42` |
@ -85,7 +85,7 @@ These parameters help optimize API responses:
| `sort` | Sonuçları artan veya azalan sırada sıralar | `/api/v2/users?sort=-created_at` |
| `page[size]` | Sayfa başına sonuç sayısını kontrol eder | `/api/v2/products?page[size]=10` |
| `page[number]` | Sayfa numarasını belirtir | `/api/v2/products?page[number]=2` |
| `fields[resource]` | Yanıt içinde hangi alanların döneceğini tanımlar | `/api/v2/users?fields[users]=id,name,email` |
| `fields[resource]` | Yanıtta hangi alanların döndürüleceğini tanımlar | `/api/v2/users?fields[users]=id,name,email` |
| `search` | Daha esnek bir arama gerçekleştirir | `/api/v2/posts?search=technology` |
## Information leakage and enumeration of users
@ -239,7 +239,7 @@ Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
```
Yine, kullanıcıların bilgilerini elde etmenin ve erişim kontrolünü aşmanın alternatif bir yolunu sağlayacak filtreleri ve özel operatörleri kullanıyoruz. Örneğin, kullanıcı *ID*'sinde “*a*” harfini içeren *kullanıcı*ları filtreleyin:
Yine, kullanıcıların bilgilerini elde etmenin ve erişim kontrolünü aşmanın alternatif bir yolunu sağlayacak filtreler ve özel operatörlerden yararlanıyoruz. Örneğin, kullanıcı *ID*'sinde “*a*” harfini içeren *kullanıcı*ları filtreleyin:
### Request
```
GET /api/users?filter[users]=id=in=(*a*) HTTP/1.1
@ -396,7 +396,7 @@ Access-Control-Allow-Origin: *
}]
}
```
Bir yönetici kullanıcısının tanımlayıcısını bildikten sonra, ilgili filtreyi yönetici tanımlayıcısıyla değiştirmek veya eklemek suretiyle bir ayrıcalık yükseltmesi istismar etmek mümkün olacaktır ve aynı ayrıcalıkları elde edilecektir:
Bir yönetici kullanıcısının tanımlayıcısını bildikten sonra, ilgili filtreyi yönetici tanımlayıcısıyla değiştirmek veya eklemek suretiyle bir ayrıcalık yükseltmesi istismar etmek mümkün olacaktır ve aynı ayrıcalıkları elde edebileceksiniz:
### Request
```
GET /api/functionalities/allPermissionsFunctionalities?filter[companyUsers]=user.id=='94****************************' HTTP/1.1
@ -516,7 +516,7 @@ Access-Control-Allow-Origin: *
}]
}
```
Filtrelerin kombinasyonu, yetkilendirme kontrolünü aşmak ve diğer kullanıcıların profillerine erişim sağlamak için kullanılabilir:
Filtrelerin kombinasyonu, yetkilendirme kontrolünden kaçınmak ve diğer kullanıcıların profillerine erişim sağlamak için kullanılabilir:
### Request
```
GET /api/users?include=language,country&filter[users]=id=='94***************' HTTP/1.1