mirror of
https://github.com/BishopFox/cloudfox.git
synced 2026-11-07 09:56:01 -10:00
181 lines
6.1 KiB
Go
181 lines
6.1 KiB
Go
package cli
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/BishopFox/cloudfox/azure"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
AzTenantID string
|
|
AzSubscription string
|
|
AzRGName string
|
|
AzOutputFormat string
|
|
AzOutputDirectory string
|
|
AzVerbosity int
|
|
AzWrapTable bool
|
|
AzMergedTable bool
|
|
|
|
AzCommands = &cobra.Command{
|
|
Use: "azure",
|
|
Aliases: []string{"az"},
|
|
Long: `See "Available Commands" for Azure Modules below`,
|
|
Short: "See \"Available Commands\" for Azure Modules below",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
cmd.Help()
|
|
},
|
|
}
|
|
AzWhoamiListRGsAlso bool
|
|
AzWhoamiCommand = &cobra.Command{
|
|
Use: "whoami",
|
|
Aliases: []string{},
|
|
Short: "Display available Azure CLI sessions",
|
|
Long: `
|
|
Display Available Azure CLI Sessions:
|
|
./cloudfox az whoami`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
err := azure.AzWhoamiCommand(AzOutputDirectory, cmd.Root().Version, AzWrapTable, AzVerbosity, AzWhoamiListRGsAlso)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzInventoryCommand = &cobra.Command{
|
|
Use: "inventory",
|
|
Aliases: []string{"inv"},
|
|
Short: "Display an inventory table of all resources per location",
|
|
Long: `
|
|
Enumerate inventory for a specific tenant:
|
|
./cloudfox az inventory --tenant TENANT_ID
|
|
|
|
Enumerate inventory for a specific subscription:
|
|
./cloudfox az inventory --subscription SUBSCRIPTION_ID
|
|
`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
err := azure.AzInventoryCommand(AzTenantID, AzSubscription, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzRBACCommand = &cobra.Command{
|
|
Use: "rbac",
|
|
Aliases: []string{},
|
|
Short: "Display role assignemts for Azure principals",
|
|
Long: `
|
|
Enumerate role assignments for a specific tenant:
|
|
./cloudfox az rbac --tenant TENANT_ID
|
|
|
|
Enumerate role assignments for a specific subscription:
|
|
./cloudfox az rbac --subscription SUBSCRIPTION_ID
|
|
`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
err := azure.AzRBACCommand(AzTenantID, AzSubscription, AzOutputFormat, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzVMsCommand = &cobra.Command{
|
|
Use: "vms",
|
|
Aliases: []string{"vms", "virtualmachines"},
|
|
Short: "Enumerates Azure Compute virtual machines",
|
|
Long: `
|
|
Enumerate VMs for a specific tenant:
|
|
./cloudfox az vms --tenant TENANT_ID
|
|
|
|
Enumerate VMs for a specific subscription:
|
|
./cloudfox az vms --subscription SUBSCRIPTION_ID`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
err := azure.AzVMsCommand(AzTenantID, AzSubscription, AzOutputFormat, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzStorageCommand = &cobra.Command{
|
|
Use: "storage",
|
|
Aliases: []string{},
|
|
Short: "Enumerates azure storage accounts",
|
|
Long: `
|
|
Enumerate storage accounts for a specific tenant:
|
|
./cloudfox az storage --tenant TENANT_ID
|
|
|
|
Enumerate storage accounts for a specific subscription:
|
|
./cloudfox az storage --subscription SUBSCRIPTION_ID
|
|
`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
err := azure.AzStorageCommand(AzTenantID, AzSubscription, AzOutputFormat, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzACRCommand = &cobra.Command{
|
|
Use: "acr",
|
|
Aliases: []string{"container-registries"},
|
|
Short: "Enumerates Azure Container Registries",
|
|
Long: `
|
|
Enumerate container registries for a specific tenant:
|
|
./cloudfox az acr --tenant TENANT_ID
|
|
|
|
Enumerate container registries for a specific subscription:
|
|
./cloudfox az acr --subscription SUBSCRIPTION_ID
|
|
`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
err := azure.AzACRCommand(AzTenantID, AzSubscription, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzFuncCommand = &cobra.Command{
|
|
Use: "func",
|
|
Aliases: []string{"functions"},
|
|
Short: "Enumerates Azure Function Apps and their configuration",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := azure.AzFuncCommand(AzTenantID, AzSubscription, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
AzAutomationCommand = &cobra.Command{
|
|
Use: "automation",
|
|
Aliases: []string{"automations"},
|
|
Short: "Enumerates Azure Automation Accounts and their assets",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if err := azure.AzAutomationCommand(AzTenantID, AzSubscription, AzOutputDirectory, cmd.Root().Version, AzVerbosity, AzWrapTable, AzMergedTable); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
},
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
|
|
AzWhoamiCommand.Flags().BoolVarP(&AzWhoamiListRGsAlso, "list-rgs", "l", false, "Drill down to the resource group level")
|
|
|
|
// Global flags
|
|
AzCommands.PersistentFlags().StringVarP(&AzOutputFormat, "output", "o", "all", "[\"table\" | \"csv\" | \"all\" ]")
|
|
AzCommands.PersistentFlags().StringVar(&AzOutputDirectory, "outdir", defaultOutputDir, "Output Directory ")
|
|
AzCommands.PersistentFlags().IntVarP(&AzVerbosity, "verbosity", "v", 2, "1 = Print control messages only\n2 = Print control messages, module output\n3 = Print control messages, module output, and loot file output\n")
|
|
AzCommands.PersistentFlags().StringVarP(&AzTenantID, "tenant", "t", "", "Tenant name")
|
|
AzCommands.PersistentFlags().StringVarP(&AzSubscription, "subscription", "s", "", "Subscription ID or Name")
|
|
AzCommands.PersistentFlags().StringVarP(&AzRGName, "resource-group", "g", "", "Resource Group name")
|
|
AzCommands.PersistentFlags().BoolVarP(&AzWrapTable, "wrap", "w", false, "Wrap table to fit in terminal (complicates grepping)")
|
|
AzCommands.PersistentFlags().BoolVarP(&AzMergedTable, "merged-table", "m", false, "Writes a single table for all subscriptions in the tenant. Default writes a table per subscription.")
|
|
|
|
AzCommands.AddCommand(
|
|
AzWhoamiCommand,
|
|
AzRBACCommand,
|
|
AzVMsCommand,
|
|
AzStorageCommand,
|
|
AzACRCommand,
|
|
AzFuncCommand,
|
|
AzAutomationCommand,
|
|
AzInventoryCommand)
|
|
|
|
}
|