AWS - DynamoDB Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

DynamoDB

Podstawowe informacje

Amazon DynamoDB jest prezentowany przez AWS jako w pełni zarządzana, serwerowa, bazodanowa NoSQL typu klucz-wartość, dostosowana do zasilania aplikacji o wysokiej wydajności bez względu na ich rozmiar. Usługa zapewnia solidne funkcje, w tym środki bezpieczeństwa, nieprzerwane kopie zapasowe, zautomatyzowaną replikację w różnych regionach, zintegrowane pamięci podręczne oraz wygodne narzędzia eksportu danych.

W kontekście DynamoDB, zamiast tworzyć tradycyjną bazę danych, tworzone są tabele. Każda tabela wymaga określenia klucza partycjonowania jako integralnej części klucza głównego tabeli. Ten klucz partycjonowania, będący w zasadzie wartością skrótu, odgrywa kluczową rolę zarówno w pobieraniu elementów, jak i w dystrybucji danych między różnymi hostami. Ta dystrybucja jest kluczowa dla utrzymania skalowalności i dostępności bazy danych. Dodatkowo istnieje opcja dodania klucza sortowania, aby dalszo doprecyzować organizację danych.

Szyfrowanie

Domyślnie DynamoDB używa klucza KMS, który **należy do Amazon DynamoDB,**nawet nie zarządzanego przez AWS, który przynajmniej należy do twojego konta.

Kopie zapasowe i eksport do S3

Możliwe jest zaplanowanie generowania kopii zapasowych tabeli lub ich tworzenie na żądanie. Ponadto można włączyć odbudowę w punkcie czasowym (PITR) dla tabeli. Odbudowa w punkcie czasowym zapewnia ciągłe kopie zapasowe danych DynamoDB przez 35 dni, aby pomóc w ochronie przed przypadkowymi operacjami zapisu lub usuwania.

Możliwe jest również wyeksportowanie danych tabeli do S3, ale tabela musi mieć włączoną odbudowę w punkcie czasowym (PITR).

GUI

Istnieje interfejs graficzny dla lokalnych usług Dynamo, takich jak DynamoDB Local, dynalite, localstack, itp., który może być przydatny: https://github.com/aaronshaf/dynamodb-admin

Wyliczenie

# Tables
aws dynamodb list-tables
aws dynamodb describe-table --table-name <t_name> #Get metadata info
## The primary key and sort key will appear inside the KeySchema field

#Check if point in time recovery is enabled
aws dynamodb describe-continuous-backups \
--table-name tablename

# Backups
aws dynamodb list-backups
aws dynamodb describe-backup --backup-arn <arn>
aws dynamodb describe-continuous-backups --table-name <t_name>

# Global tables
aws dynamodb list-global-tables
aws dynamodb describe-global-table --global-table-name <name>

# Exports
aws dynamodb list-exports
aws dynamodb describe-export --export-arn <arn>

# Misc
aws dynamodb describe-endpoints #Dynamodb endpoints

Nieuwierzytelniony dostęp

pageAWS - DynamoDB Unauthenticated Access

Eskalacja uprawnień

pageAWS - DynamoDB Privesc

Po eksploatacji

pageAWS - DynamoDB Post Exploitation

Trwałość

pageAWS - DynamoDB Persistence

Wstrzykiwanie do DynamoDB

Wstrzykiwanie SQL

Istnieją sposoby dostępu do danych DynamoDB za pomocą składni SQL, dlatego też typowe wstrzykiwania SQL są również możliwe.

Wstrzykiwanie NoSQL

W DynamoDB można używać różnych warunków do pobierania danych, podobnie jak w przypadku typowego wstrzykiwania NoSQL, jeśli można łączyć więcej warunków do pobierania danych, można uzyskać ukryte dane (lub wydobyć całą tabelę). Tutaj znajdziesz 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.

Faktycznie, akcje Query muszą określić warunek "EQ" (równa się) w kluczu głównym, aby działały, co sprawia, że są one znacznie mniej podatne na wstrzykiwania NoSQL (a także sprawia, że operacja jest bardzo ograniczona).

Jeśli możesz zmienić porównanie wykonywane lub dodać nowe, możesz odzyskać więcej danych.

# Comparators to dump the database
"NE": "a123" #Get everything that doesn't equal "a123"
"NOT_CONTAINS": "a123" #What you think
"GT": " " #All strings are greater than a space

Wstrzykiwanie surowego Jsona

DynamoDB akceptuje obiekty Json do wyszukiwania danych w bazie danych. Jeśli odkryjesz, że możesz pisać w obiekcie json wysłanym do wyszukiwania, możesz spowodować wyciek całej zawartości bazy danych.

Na przykład, wstrzykując żądanie takie jak:

'{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}'

atakujący mógłby wstrzyknąć coś w rodzaju:

1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0

zmienić warunek "EQ" wyszukując ID 1000, a następnie szukając wszystkich danych z ciągiem Id większym niż 0, co oznacza wszystkie.

Wstrzykiwanie :property

Niektóre SDK pozwalają użyć ciągu znaków wskazującego na filtrowanie do wykonania, na przykład:

new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)

Musisz wiedzieć, że podczas wyszukiwania w DynamoDB w celu podstawienia wartości atrybutu w wyrażeniach filtrujących podczas skanowania elementów, tokeny powinny zaczynać się od znaku :. Takie tokeny zostaną zamienione na rzeczywistą wartość atrybutu w czasie wykonania.

Dlatego logowanie podobne do poprzedniego może zostać obejścione w ten sposób:

:username = :username or :username
# This will generate the query:
# :username = :username or :username = :username and Password = :password
# which is always true
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated