AWS - Redshift Privesc

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!

HackTricks를 지원하는 다른 방법:

Redshift

RDS에 대한 자세한 정보는 다음을 확인하세요:

pageAWS - Redshift Enum

redshift:DescribeClusters, redshift:GetClusterCredentials

이 권한을 사용하면 모든 클러스터의 정보 (이름 및 클러스터 사용자 이름 포함)를 얻을 수 있으며 해당 클러스터에 액세스하기 위한 자격 증명을 얻을 수 있습니다:

# Get creds
aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1
# Connect, even if the password is a base64 string, that is the password
psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:<username>" -d template1 -p 5439

잠재적 영향: 데이터베이스 내에서 민감한 정보 찾기.

redshift:DescribeClusters, redshift:GetClusterCredentialsWithIAM

이러한 권한을 사용하면 모든 클러스터의 정보를 얻을 수 있으며, 액세스 자격 증명을 얻을 수 있습니다. IAM 신원을 사용하여 자격 증명을 얻는 데 사용된 권한을 가진 postgres 사용자가 있음을 유의하십시오.

# Get creds
aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1
# Connect, even if the password is a base64 string, that is the password
psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439

잠재적 영향: 데이터베이스 내부에서 민감한 정보 찾기.

redshift:DescribeClusters, redshift:ModifyCluster?

내부 postgres (redshift) 사용자의 마스터 암호를 aws cli에서 수정할 수 있습니다 (필요한 권한은 아마도 이것들이지만 아직 테스트하지 않았습니다):

aws redshift modify-cluster –cluster-identifier <identifier-for-the cluster> –master-user-password ‘master-password’;

잠재적 영향: 데이터베이스 내부의 민감한 정보 발견.

외부 서비스 접근

모든 다음 리소스에 액세스하려면 사용할 역할을 지정해야 합니다. Redshift 클러스터에는 사용할 수 있는 AWS 역할 목록이 할당될 수 있으며, ARN을 알고 있다면 해당 역할을 사용할 수 있습니다. 그렇지 않으면 기본으로 할당된 것을 사용하려면 "default"를 설정할 수 있습니다.

또한, 여기에서 설명된대로, Redshift는 역할을 연결하여 추가 액세스를 얻을 수 있도록 허용하지만, 그냥 쉼표구분하여 첫 번째 역할이 두 번째 역할을 가정할 수 있는 경우에만 가능합니다: iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Lambdas

https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html에서 설명된대로, redshift에서 람다 함수를 호출하는 것이 가능합니다.

CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT)
RETURNS INT
STABLE
LAMBDA 'lambda_function'
IAM_ROLE default;

S3

https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html에서 설명한 대로, S3 버킷으로 읽고 쓸 수 있습니다:

# Read
copy table from 's3://<your-bucket-name>/load/key_prefix'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region '<region>'
options;

# Write
unload ('select * from venue')
to 's3://mybucket/tickit/unload/venue_'
iam_role default;

Dynamo

https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html에서 설명한 대로, DynamoDB에서 데이터를 가져올 수 있습니다:

copy favoritemovies
from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

데이터를 제공하는 Amazon DynamoDB 테이블은 REGION 옵션을 사용하여 Amazon DynamoDB 테이블이 위치한 AWS 지역을 지정하지 않는 한 클러스터와 동일한 AWS 지역에 생성되어야 합니다.

EMR

https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html를 확인하세요.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요!

HackTricks를 지원하는 다른 방법:

最終更新