AWS - DynamoDB Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon DynamoDB jest przedstawiany przez AWS jako w pełni zarządzana, bezserwerowa, klucz-wartość baza danych NoSQL, dostosowana do zasilania aplikacji o wysokiej wydajności, niezależnie od ich rozmiaru. Usługa zapewnia solidne funkcje, w tym wbudowane środki bezpieczeństwa, nieprzerwane kopie zapasowe, automatyczną replikację w wielu regionach, zintegrowane pamięci podręczne w pamięci oraz wygodne narzędzia do eksportu danych.
W kontekście DynamoDB, zamiast zakładać tradycyjną bazę danych, tworzone są tabele. Każda tabela wymaga określenia klucza partycji jako integralnego elementu klucza głównego tabeli. Ten klucz partycji, zasadniczo wartość haszująca, odgrywa kluczową rolę zarówno w pobieraniu elementów, jak i w dystrybucji danych w różnych hostach. Ta dystrybucja jest kluczowa dla utrzymania zarówno skalowalności, jak i dostępności bazy danych. Dodatkowo istnieje możliwość dodania klucza sortującego, aby jeszcze bardziej udoskonalić organizację danych.
Domyślnie, DynamoDB używa klucza KMS, który **należy do Amazon DynamoDB,** a nie nawet do zarządzanego klucza AWS, który przynajmniej należy do twojego konta.
Możliwe jest zaplanowanie generowania kopii zapasowych tabeli lub tworzenie ich na żądanie. Ponadto możliwe jest również włączenie odzyskiwania w czasie rzeczywistym (PITR) dla tabeli. Odzyskiwanie w czasie rzeczywistym zapewnia ciągłe kopie zapasowe danych DynamoDB przez 35 dni, aby pomóc w ochronie przed przypadkowymi operacjami zapisu lub usunięcia.
Możliwe jest również eksportowanie danych tabeli do S3, ale tabela musi mieć włączone PITR.
Istnieje GUI dla lokalnych usług Dynamo, takich jak DynamoDB Local, dynalite, localstack itd., które mogą być przydatne: https://github.com/aaronshaf/dynamodb-admin
Istnieją sposoby na dostęp do danych DynamoDB za pomocą składni SQL, dlatego typowe wstrzykiwania SQL są również możliwe.
W DynamoDB różne warunki mogą być używane do pobierania danych, jak w typowym wstrzykiwaniu NoSQL, jeśli możliwe jest łączenie więcej warunków w celu pobrania danych, można uzyskać ukryte dane (lub zrzucić całą tabelę). Można tutaj znaleźć warunki obsługiwane przez DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Zauważ, że różne warunki są obsługiwane, jeśli dane są uzyskiwane za pomocą query
lub za pomocą scan
.
W rzeczywistości, akcje Query muszą określać warunek "EQ" (równa się) w kluczu głównym, aby działały, co czyni je znacznie mniej podatnymi na wstrzykiwania NoSQL (a także ogranicza operację).
Jeśli możesz zmienić porównanie wykonywane lub dodać nowe, możesz pobrać więcej danych.
Ta podatność opiera się na filtrze skanowania dynamodb, który jest teraz przestarzały!
DynamoDB akceptuje obiekty Json do wyszukiwania danych w bazie. Jeśli odkryjesz, że możesz pisać w obiekcie json wysyłanym do wyszukiwania, możesz wykonać zrzut bazy danych, wszystkich jej zawartości.
Na przykład, wstrzykując w żądaniu takim jak:
atakujący mógłby wstrzyknąć coś takiego:
1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0
naprawić warunek "EQ" szukając ID 1000, a następnie szukać wszystkich danych z ciągiem Id większym niż 0, co obejmuje wszystko.
Inny wrażliwy przykład używający logowania mógłby być:
To byłoby podatne na:
Niektóre SDK umożliwiają użycie ciągu wskazującego filtrację, która ma być przeprowadzona, jak:
Musisz wiedzieć, że wyszukiwanie w DynamoDB w celu zastąpienia wartości atrybutu w wyrażeniach filtrujących podczas skanowania elementów, tokeny powinny zaczynać się od znaku :
. Takie tokeny będą zastępowane rzeczywistą wartością atrybutu w czasie wykonywania.
Dlatego logowanie, jak to poprzednie, można obejść za pomocą czegoś takiego:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)