diff --git a/src/pentesting-web/rsql-injection.md b/src/pentesting-web/rsql-injection.md index 4d9408e92..581ec5c67 100644 --- a/src/pentesting-web/rsql-injection.md +++ b/src/pentesting-web/rsql-injection.md @@ -39,11 +39,11 @@ Or even take advantage to extract sensitive information with Boolean queries or | `,` / `or` | Logiczny operator **OR**. Filtruje wiersze, gdzie *przynajmniej jeden* warunek jest *prawdziwy*| `/api/v2/myTable?q=columnA==valueA,columnB==valueB` | | `==` | Wykonuje zapytanie **równości**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* dokładnie równe są *queryValue* | `/api/v2/myTable?q=columnA==queryValue` | | `=q=` | Wykonuje zapytanie **wyszukiwania**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* zawierają *queryValue* | `/api/v2/myTable?q=columnA=q=queryValue` | -| `=like=` | Wykonuje zapytanie **podobieństwa**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* są podobne do *queryValue* | `/api/v2/myTable?q=columnA=like=queryValue` | -| `=in=` | Wykonuje zapytanie **w**. Zwraca wszystkie wiersze z *myTable*, gdzie *columnA* zawiera *valueA* LUB *valueB* | `/api/v2/myTable?q=columnA=in=(valueA, valueB)` | -| `=out=` | Wykonuje zapytanie **wykluczenia**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* nie są ani *valueA*, ani *valueB* | `/api/v2/myTable?q=columnA=out=(valueA,valueB)` | -| `!=` | Wykonuje zapytanie *nie równości*. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* nie są równe *queryValue* | `/api/v2/myTable?q=columnA!=queryValue` | -| `=notlike=` | Wykonuje zapytanie **nie podobieństwa**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* nie są podobne do *queryValue* | `/api/v2/myTable?q=columnA=notlike=queryValue` | +| `=like=` | Wykonuje zapytanie **jak**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* są podobne do *queryValue* | `/api/v2/myTable?q=columnA=like=queryValue` | +| `=in=` | Wykonuje zapytanie **in**. Zwraca wszystkie wiersze z *myTable*, gdzie *columnA* zawiera *valueA* LUB *valueB* | `/api/v2/myTable?q=columnA=in=(valueA, valueB)` | +| `=out=` | Wykonuje zapytanie **wyklucz**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* nie są ani *valueA*, ani *valueB* | `/api/v2/myTable?q=columnA=out=(valueA,valueB)` | +| `!=` | Wykonuje zapytanie *nie równa się*. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* nie są równe *queryValue* | `/api/v2/myTable?q=columnA!=queryValue` | +| `=notlike=` | Wykonuje zapytanie **nie jak**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* nie są podobne do *queryValue* | `/api/v2/myTable?q=columnA=notlike=queryValue` | | `<` & `=lt=` | Wykonuje zapytanie **mniejsze niż**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* są mniejsze niż *queryValue* | `/api/v2/myTable?q=columnA `/api/v2/myTable?q=columnA=lt=queryValue` | | `=le=` & `<=` | Wykonuje zapytanie **mniejsze niż** lub **równe**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* są mniejsze lub równe *queryValue* | `/api/v2/myTable?q=columnA<=queryValue`
`/api/v2/myTable?q=columnA=le=queryValue` | | `>` & `=gt=` | Wykonuje zapytanie **większe niż**. Zwraca wszystkie wiersze z *myTable*, gdzie wartości w *columnA* są większe niż *queryValue* | `/api/v2/myTable?q=columnA>queryValue`
`/api/v2/myTable?q=columnA=gt=queryValue` | @@ -65,7 +65,7 @@ Or even take advantage to extract sensitive information with Boolean queries or **Uwaga**: Tabela oparta na informacjach z aplikacji [**rsql-parser**](https://github.com/jirutka/rsql-parser). ## Wyciek informacji i enumeracja użytkowników -Następujące zapytanie pokazuje punkt końcowy rejestracji, który wymaga parametru email, aby sprawdzić, czy istnieje jakikolwiek użytkownik zarejestrowany pod tym adresem email i zwrócić wartość prawda lub fałsz w zależności od tego, czy istnieje w bazie danych: +Następujące zapytanie pokazuje punkt końcowy rejestracji, który wymaga parametru email, aby sprawdzić, czy istnieje jakikolwiek użytkownik zarejestrowany pod tym adresem e-mail i zwrócić wartość prawda lub fałsz w zależności od tego, czy istnieje w bazie danych: ### Zapytanie ``` GET /api/registrations HTTP/1.1 @@ -215,7 +215,7 @@ Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Access-Control-Allow-Origin: * ``` -Ponownie korzystamy z filtrów i specjalnych operatorów, które pozwolą nam na alternatywny sposób uzyskania informacji o użytkownikach i ominięcia kontroli dostępu. Na przykład, filtruj według tych *użytkowników*, którzy zawierają literę “*a*” w swoim *ID* użytkownika: +Ponownie wykorzystujemy filtry i specjalne operatory, które pozwolą nam na alternatywny sposób uzyskania informacji o użytkownikach i ominięcia kontroli dostępu. Na przykład, filtruj według tych *użytkowników*, którzy zawierają literę “*a*” w swoim *ID* użytkownika: ### Request ``` GET /api/users?filter[users]=id=in=(*a*) HTTP/1.1 @@ -435,11 +435,11 @@ Access-Control-Allow-Origin: * }, { ....... ``` -## Podszywanie się lub Niebezpieczne Bezpośrednie Odwołania do Obiektów (IDOR) +## Impersonacja lub Niebezpieczne Bezpośrednie Odwołania do Obiektów (IDOR) Oprócz użycia parametru `filter`, możliwe jest użycie innych parametrów, takich jak `include`, który pozwala na uwzględnienie w wyniku określonych parametrów (np. język, kraj, hasło...). -W następującym przykładzie pokazane są informacje o naszym profilu użytkownika: -### Request +W poniższym przykładzie pokazane są informacje o naszym profilu użytkownika: +### Żądanie ``` GET /api/users?include=language,country HTTP/1.1 Host: localhost:3000