Инъекция команд в Google Cloud Shell

Инъекция команд в Google Cloud Shell

Этичный Хакер

28 января 2022 года я общался в телеграм-группе TR Bug Hunters. Один из участников группы, Нуман Тюрле, сказал нам, что мы должны попробовать Google Cloud Shell, чтобы найти что-нибудь интересное. 

Я был на грани выгорания, но мое внимание привлекло исследование Cloud Shell. Итак, начнем.

Что такое Google Cloud Shell? (пояснение с https://cloud.google.com/shell ) 

Cloud Shell is an online development and operations environment accessible anywhere with your browser. You can manage your resources with its online terminal preloaded with utilities such as the gcloud command-line tool, kubectl, and more. You can also develop, build, debug, and deploy your cloud-based apps using the online Cloud Shell Editor.

Изучение Google Cloud Shell 

Во-первых, я всегда проверяю страницу веб-архива моей цели, чтобы найти интересные URL-адреса. 

URL-адресов было немного, но я смог найти некоторые параметры для изучения. 

Одним из них был параметр project. Значение этого параметра изменяет наш проект в Cloud Shell. 

Просто, если мы посетим https://shell.cloud.google.com/?project=test, имя нашего проекта изменится на test в терминале Cloud Shell. 

Я попробовал много вещей с этим параметром, но не смог ничего найти. Играя с этим параметром, я заметил, что есть еще один параметр show, который изменяет терминал Cloud Shell. 

По умолчанию Cloud Shell работает с show=ide,terminal. И этот терминал выглядит так:

Я изменил этот параметр на show=ide и получил такой терминал:

Находясь в этом терминале, я попробовал то же самое, что и в первом терминале. 

Я вставил asd' в параметр project и увидел что-то очень интересное в терминале.

Ты видишь то же, что и я? Терминал запускал скрипт Python, который вставлял значение параметра project без какой-либо кодировки. И я получил эту ошибку:

 File "<stdin>", line 9
  if 'asd'':
           ^
SyntaxError: EOL while scanning string literal

Символ апострофа в моем значении вызвал такую ошибку в коде Python. Я быстро изменил значение на asd':#, чтобы исправить эту синтаксическую ошибку. Однако я получил другую ошибку:

Итак, мое значение также отражается в другой строке кода. Я знаю, что первое место, if 'value': , а другое config.set('core', 'project', 'value'). Первое заканчивается на ':, а второе заканчивается на ')

Если мы посмотрим на многострочный синтаксис в Python, то увидим, что мы можем создавать многострочные тексты с тремя апострофами.

Здесь есть один апостроф в первой части кода и один апостроф в последней части кода. Итак, я просто добавил два апострофа в функцию print и сделал встроенный код фиктивным. 

Я изменил значение project на, asd':print('' и код Python заработал без каких-либо синтаксических ошибок! 

Я исправил синтаксис кода Python, и теперь я могу выполнить любой код Python после оператора if. Верно? Ага!

Я изменил значение своего проекта на asd':import os;os.system("cat /etc/passwd");print(''и получил это:

Бинго, получил ввод команды в Cloud Shell! Я также смог без проблем получить реверс шелл. Вот видео, демонстрирующее атаку.


Report Page