GCP - Bigquery Enum

рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдореВрд▓ рдЬрд╛рдирдХрд╛рд░реА

Google Cloud BigQuery рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд, рд╕рд░реНрд╡рд░рд▓реЗрд╕ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╣реИ, рдЬреЛ рдкреЗрдЯрд╛рдмрд╛рдЗрдЯ рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ (PaaS), рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдФрд░ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред

рдпрд╣ ANSI SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡реЗрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рд╡рд╕реНрддреБрдПрдВ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЯреЗрдмрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ SQL рдбреЗрдЯрд╛ рдХреЛ рд░рдЦрддреЗ рд╣реИрдВред

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ Google-рдкреНрд░рдмрдВрдзрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЧреНрд░рд╛рд╣рдХ-рдкреНрд░рдмрдВрдзрд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА (CMEK) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдбреЗрдЯрд╛рд╕реЗрдЯ рдФрд░ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рднреАрддрд░ рдЯреЗрдмрд▓ рдкреНрд░рддрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рд╕рдорд╛рдкреНрддрд┐

рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдПрдХ рд╕рдорд╛рдкреНрддрд┐ рд╕рдордп рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдирдпрд╛ рдЯреЗрдмрд▓ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛, рдЙрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдмрд╛рд╣реНрдп рд╕реНрд░реЛрдд

Bigquery рдЕрдиреНрдп Google рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЧрд╣рд░рд╛рдИ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реИред рдмрд╛рдХреЗрдЯреНрд╕, рдкрдм/рд╕рдм, рдЧреВрдЧрд▓ рдбреНрд░рд╛рдЗрд╡, рдЖрд░рдбреАрдПрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ...

рдбреЗрдЯрд╛рд╕реЗрдЯ ACLs

рдЬрдм рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдПрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП ACLs рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдЙрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдорд╛рд▓рд┐рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬрд┐рд╕рдиреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдорд╛рд▓рд┐рдХ рдХреЛ рд╕рдореВрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдУрдирд░реНрд╕ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рд▓рд┐рдХ), рд░рд╛рдЗрдЯрд░ рдХреЛ рд╕рдореВрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░рд╛рдЗрдЯрд░реНрд╕, рдФрд░ рд░реАрдбрд░ рдХреЛ рд╕рдореВрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░реАрдбрд░реНрд╕ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

bq show --format=prettyjson <proj>:<dataset>

...
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "OWNER",
"userByEmail": "gcp-admin@hacktricks.xyz"
},
{
"role": "OWNER",
"userByEmail": "support@hacktricks.xyz"
},
{
"role": "READER",
"specialGroup": "projectReaders"
}
],
...

рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдкрд╣реБрдВрдЪ рдирд┐рдпрдВрддреНрд░рдг

рдПрдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рджреНрд╡рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рд░реЛ рдкрд╣реБрдВрдЪ рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдпреЗ DDL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣реБрдВрдЪ рдиреАрддрд┐ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЙрд╕ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдВрдЧреАред

# Create
CREATE ROW ACCESS POLICY apac_filter
ON project.dataset.my_table
GRANT TO ('user:abc@example.com')
FILTER USING (region = 'APAC');

# Update
CREATE OR REPLACE ROW ACCESS POLICY
CREATE ROW ACCESS POLICY sales_us_filter
ON project.dataset.my_table
GRANT TO ('user:john@example.com',
'group:sales-us@example.com',
'group:sales-managers@example.com')
FILTER USING (region = 'US');

# Check the Post Exploitation tricks to see how to call this from the cli
# Enumerate row policies on a table
bq ls --row_access_policies <proj>:<dataset>.<table> # Get row policies

рдХреЙрд▓рдо рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг

рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреЛ рдХреЙрд▓рдо рд╕реНрддрд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рдПрдХ рдЯреИрдХреНрд╕реЛрдирдореА рдФрд░ рдиреАрддрд┐ рдЯреИрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд░реЗрдВред рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдХреНрд╕реЛрдирдореА рдФрд░ рдиреАрддрд┐ рдЯреИрдЧ рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред https://console.cloud.google.com/bigquery/policy-tags

  2. рд╡реИрдХрд▓реНрдкрд┐рдХ: рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХреЛ рдбреЗрдЯрд╛ рдХреИрдЯрд▓реЙрдЧ рдлрд╛рдЗрди-рдЧреНрд░реЗрдиреНрдб рд░реАрдбрд░ рднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдиреЗ рдиреАрддрд┐ рдЯреИрдЧ рдмрдирд╛рдП рд╣реИрдВред

  3. рдЕрдкрдиреЗ рдмрд┐рдЧрдХреНрд╡реЗрд░реА рдХреЙрд▓рдореНрд╕ рдХреЛ рдиреАрддрд┐ рдЯреИрдЧ рд╕реМрдВрдкреЗрдВред рдмрд┐рдЧрдХреНрд╡реЗрд░реА рдореЗрдВ, рд╕реНрдХреАрдорд╛ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЛ рдПрдХ рдиреАрддрд┐ рдЯреИрдЧ рд╕реМрдВрдкреЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

  4. рдЯреИрдХреНрд╕реЛрдирдореА рдкрд░ рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЯреИрдХреНрд╕реЛрдирдореА рдореЗрдВ рд╕рднреА рдиреАрддрд┐ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

  5. рдиреАрддрд┐ рдЯреИрдЧ рдкрд░ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдиреАрддрд┐ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдФрд░ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдмрдВрдзрди (IAM) рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдиреАрддрд┐ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдЬреЛ рдиреАрддрд┐ рдЯреИрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдЬрдм рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╡реЗрд░реА рд╕рдордп рдкрд░ рдХреЙрд▓рдо рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд┐рдЧрдХреНрд╡реЗрд░реА рдХреЙрд▓рдо рдиреАрддрд┐ рдЯреИрдЧ рдФрд░ рдЙрд╕рдХреА рдиреАрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдзрд┐рдХрд╛рд░реА рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреБрдЫ рдХреЙрд▓рдореНрд╕ рддрдХ рдХрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕реНрдХреАрдорд╛ рдореЗрдВ рдХреЙрд▓рдо рдореЗрдВ рдЯреИрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯреИрдЧ рдХреА рдЯреИрдХреНрд╕реЛрдирдореА рдкрд░ рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рд▓рд╛рдЧреВ рдХрд░рдХреЗред

рдЯреИрдХреНрд╕реЛрдирдореА рдкрд░ рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

gcloud services enable bigquerydatapolicy.googleapis.com

рдЖрдк рд╕реНрддрдВрднреЛрдВ рдХреЗ рдЯреИрдЧ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде:

bq show --schema <proj>:<dataset>.<table>

[{"name":"username","type":"STRING","mode":"NULLABLE","policyTags":{"names":["projects/.../locations/us/taxonomies/2030629149897327804/policyTags/7703453142914142277"]},"maxLength":"20"},{"name":"age","type":"INTEGER","mode":"NULLABLE"}]
  • рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдХреЙрд▓рдо рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо:

# SELECT table_name, column_name FROM <proj-name>.<dataset-name>.INFORMATION_SCHEMA.COLUMNS

SELECT table_name, column_name FROM <project-name>.<dataset-name>.INFORMATION_SCHEMA.COLUMNS
  • рдЗрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдиреНрдп рдбреЗрдЯрд╛рд╕реЗрдЯ:

#┬аSELECT catalog_name, schema_name, FROM <proj-name>.INFORMATION_SCHEMA.SCHEMATA

SELECT catalog_name, schema_name, NULL FROM <project-name>.INFORMATION_SCHEMA.SCHEMATA

SQL Injection types:

  • рддреНрд░реБрдЯрд┐ рдЖрдзрд╛рд░рд┐рдд - рдХрд╛рд╕реНрдЯрд┐рдВрдЧ: select CAST(@@project_id AS INT64)

  • рддреНрд░реБрдЯрд┐ рдЖрдзрд╛рд░рд┐рдд - рд╢реВрдиреНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрди: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '

  • рд╕рдВрдШ рдЖрдзрд╛рд░рд┐рдд (рдЖрдкрдХреЛ bigquery рдореЗрдВ ALL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#

  • рдмреВрд▓рд┐рдпрди рдЖрдзрд╛рд░рд┐рдд: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#

  • рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдордп рдЖрдзрд╛рд░рд┐рдд - рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг:

рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЙрдиреНрдирдпрди рдФрд░ рдкреЛрд╕реНрдЯ рдЕрдзрд┐рдХрд╛рд░

GCP - BigQuery Privesc

рд╕реНрдерд┐рд░рддрд╛

GCP - BigQuery Persistence

рд╕рдВрджрд░реНрдн

рд╣реИрдХрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated