Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2018-1058 | Kitploit
工具/GitHubGitHub/ccchme/cve-2018-1058
权限提升漏洞分析漏洞利用学习与教育数据库安全实验室与实践
GitHubccchme/cve-2018-1058

CVE-2018-1058

查看仓库
3个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2018-1058 — PostgreSQL 搜索路径演示

本仓库包含以下内容的最终报告和可复现性工件:

CVE-2018-1058:通过不受控制的搜索路径在 PostgreSQL 中实现权限提升

目标是使用安全的本地 Docker 环境演示 CVE-2018-1058 背后的搜索路径信任缺陷。

该演示不会复现历史上确切的 pg_dump 执行路径。相反,它复现了 PostgreSQL 指南中描述的相同根本原因:攻击者可写的模式中包含一个相似对象,而另一个会话将未限定的名称解析到该对象。


1. 目录

root@kitploit:~
.
├── report.pdf
├── docker-compose.yml
├── README.md
└── scripts/
    ├── init.sql
    ├── init_safe.sql
    ├── exploit.sql
    ├── victim_query.sql
    ├── verify_qualify.sql
    └── fix.sql

最终报告为 report.pdf,其中包含书面分析以及下方对应预期输出的屏幕截图。

无需 Dockerfile。本项目使用官方 postgres 镜像。

屏幕截图直接嵌入在 report.pdf 中,因此未单独提供图像文件。

2. 环境要求

安装:

  • Docker
  • Docker Compose
  • psql 客户端,可选但建议安装

演示使用两个 PostgreSQL 容器:

请确保端口 15432 和 15433 未被占用。

快速运行概览

预期的执行顺序如下:

  1. 启动易受攻击的 PostgreSQL 10.2 服务。
  2. 以 attacker 身份运行 exploit.sql。
  3. 以 victim 身份运行 victim_query.sql,观察 CVE-2018-1058 DEMO: 前缀。
  4. 以 victim 身份运行 verify_qualify.sql,观察正常的小写输出。
  5. 以 postgres 身份运行 fix.sql。
  6. 重新运行 victim_query.sql,观察正常的小写输出。
  7. 启动已加固的 PostgreSQL 10.3 服务。
  8. 在端口 15433 上重新运行 exploit.sql,观察 permission denied for schema public 错误。

3. 启动易受攻击的环境

root@kitploit:~
docker compose up -d pg_vulnerable
docker compose ps

预期结果:pg_vulnerable 服务应正在运行,并映射到端口 15432。

检查 PostgreSQL 版本:

root@kitploit:~
docker exec -it cve1058_pg_vulnerable psql -U postgres -d demo_cve1058 -c "SELECT version();"

预期结果:PostgreSQL 10.2。

4. 检查数据库角色

root@kitploit:~
docker exec -it cve1058_pg_vulnerable psql -U postgres -d demo_cve1058 -c "\du"

预期角色:

  • postgres
  • attacker
  • victim

攻击者不是 PostgreSQL 超级用户。

5. 运行漏洞利用

运行攻击者脚本:

root@kitploit:~
PGPASSWORD='AttackerPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U attacker -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/exploit.sql

预期输出:

root@kitploit:~
CREATE TABLE
GRANT
GRANT
CREATE FUNCTION

这会创建:

  • 一个无害的 public.exploit_log 表;
  • 一个伪造的 public.lower(varchar) 函数。

6. 以 victim 身份触发易受攻击的行为

root@kitploit:~
PGPASSWORD='VictimPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U victim -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/victim_query.sql

预期输出:

root@kitploit:~
CVE-2018-1058 DEMO: Alice Demo
CVE-2018-1058 DEMO: Bob Demo

这表明受害者的正常查询将 lower(...) 解析到了攻击者控制的函数。

7. 确认副作用

root@kitploit:~
PGPASSWORD='AttackerPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U attacker -d demo_cve1058 \
-c "TABLE public.exploit_log;"

预期结果:public.exploit_log 中至少有两行,受害者的查询每处理一行就会写入一行。

8. 演示防御性限定

root@kitploit:~
PGPASSWORD='VictimPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U victim -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/verify_qualify.sql

预期输出:

root@kitploit:~
alice demo
bob demo

这样做之所以有效,是因为 pg_catalog.lower(...) 强制 PostgreSQL 使用内置函数。

9. 在易受攻击的容器上应用修复

root@kitploit:~
PGPASSWORD='postgres' \
psql -h 127.0.0.1 -p 15432 -U postgres -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/fix.sql

预期输出可能包括:

root@kitploit:~
DROP FUNCTION
DROP TABLE
REVOKE
REVOKE

然后重新运行受害者查询:

root@kitploit:~
PGPASSWORD='VictimPw!ChangeMe' \
psql -h 127.0.0.1 -p 15432 -U victim -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/victim_query.sql

预期输出:

root@kitploit:~
alice demo
bob demo

攻击者控制的函数已消失,查询返回正常的小写字符串。

10. 启动已加固的环境

root@kitploit:~
docker compose up -d pg_fixed
docker compose ps

检查版本:

root@kitploit:~
docker exec -it cve1058_pg_fixed psql -U postgres -d demo_cve1058 -c "SELECT version();"

预期结果:PostgreSQL 10.3。

11. 验证漏洞利用在已加固环境中失败

root@kitploit:~
PGPASSWORD='AttackerPw!ChangeMe' \
psql -h 127.0.0.1 -p 15433 -U attacker -d demo_cve1058 \
-v ON_ERROR_STOP=1 -f scripts/exploit.sql

预期输出:

root@kitploit:~
ERROR: permission denied for schema public

这意味着攻击者无法在 public 中创建伪造函数,因此攻击链在名称解析之前就被阻止。

12. 清理

停止容器:

root@kitploit:~
docker compose down

删除卷并完全重置项目:

root@kitploit:~
docker compose down -v

13. 说明

该演示故意设计为无害。它不会窃取数据、访问文件或执行操作系统命令。

该漏洞利用使用可见的字符串前缀和日志表来证明 PostgreSQL 将未限定的函数名解析到了攻击者控制的对象。

官方 CVE 涉及 pg_dump 和其他客户端应用程序。本仓库在安全且可复现的教学环境中演示了相同的搜索路径信任缺陷。

14. 故障排查

如果端口已被占用,请停止任何本地 PostgreSQL 服务,或更改 docker-compose.yml 中的主机端口。

如果输出与预期结果不符,请使用以下命令重置环境:

root@kitploit:~
docker compose down -v
docker compose up -d pg_vulnerable

如果本地未安装 psql,仍然可以在容器内使用 docker exec 运行版本和角色检查命令。

如果漏洞利用在 pg_vulnerable 上失败,请确保数据库已重置,并且 scripts/exploit.sql 在 scripts/fix.sql 之前执行。

15. 参考

  • PostgreSQL CVE-2018-1058 公告:https://www.postgresql.org/support/security/CVE-2018-1058/
  • PostgreSQL Wiki,CVE-2018-1058 指南:https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
  • PostgreSQL 10.3 发行说明:https://www.postgresql.org/docs/release/10.3/
  • NVD CVE-2018-1058:https://nvd.nist.gov/vuln/detail/CVE-2018-1058
  • MITRE CVE-2018-1058:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1058
下载工具
ServiceVersionContainer nameHost portPurpose
pg_vulnerablePostgreSQL 10.2cve1058_pg_vulnerable15432易受攻击的演示
pg_fixedPostgreSQL 10.3cve1058_pg_fixed15433已修补/加固的对比