Skip to content

Vulnhub-dc9

靶机信息

下载链接

https://www.vulnhub.com/entry/dc-9,412/

目标

获得root权限和flag。

运行环境

靶机:NAT模式,靶机自动获取IP 攻击机:windows10、kali linux2021.1

信息收集

目标发现

shell
arp-scan -l

端口和服务识别

使用nmap扫描1-65535全端口,并做服务指纹识别,扫描结果保存到txt文件,命令:

shell
nmap -p1-65535 -A 192.168.160.200 -oN dc9.txt

发现目标主机端口和服务

shell
PORT   STATE    SERVICE VERSION
22/tcp filtered ssh
80/tcp open     http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Example.com - Staff Details - Welcome

扫描后,我们看到端口 22 被检测到但被过滤了,这表明确实有 SSH 服务,但有些东西从内部阻止了它。开启了 80 端口和 Apache httpd 服务。

漏洞挖掘

我们从端口 80 入手并尝试在我们的浏览器上访问。主页如下图所示

按个访问首页选项目录,但没有发现任何可用的东西,但发现了一个搜索框

可能存在sql注入,为了测试此搜索框中的 SQL 注入,在搜索表单中随意输入并通过单击搜索按钮发送请求。用 BurpSuite 拦截请求包。

复制拦截的POST请求并粘贴到一个文本文件,并将其命名为 sql.txt。这样做是为了将拦截的请求与 sqlmap 一起使用。使用 sqlmap 来检查搜索表单是否容易受到 SQL 注入攻击。如果它存在SQL注入攻击,将会爆出目标的数据库。

shell
sqlmap -r sql.txt --dbs --batch

成功爆出数据库:information_schemaStaffuser,存在sql注入,下面我们开始接着用SQLmap爆数据库的内容,因为 sqlmap 不允许同时使用多个数据库。我们将首先枚举staff数据

shell
sqlmap -r sql.txt -D Staff --dump-all --batch

员工数据库包含 2 个表。第一个表由电子邮件 ID、电话号码、名字、姓氏和用户的职位组成,第二个表由用户名和密码哈希组成。用户名是“ admin ”。所以,它暗示我们这可能是一个重要的帐户。

在继续进行哈希破解之前,让我们也枚举另一个数据库。名为users 的数据库。我们将再次以与之前类似的方式使用 sqlmap,但根据 -D 参数更改数据库名称,如下所示:

python
sqlmap -r sql.txt -D users --dump-all --batch

让我们回到我们的哈希,到https://hashes.com/en/decrypt/hash直接解密

破解的密码是transorbital1

现在我们有了管理员密码,我们有一个包含登录验证页面的管理选项卡。输入刚刚破解的密码。登入后出现了管理和添加记录。但让我们眼前一亮的是页脚。现在它说“文件不存在”。这意味着必须有一个包含在页脚中的文件现在丢失或放错了位置。这意味着这里可能存在文件包含漏洞

我们尝试使用最常见的 文件包含测试 URL 参数对其进行测试。我们在 URL 中插入测试参数,然后是welcome.php 文件。我们确实添加了“?file=”,以便它可以指向服务器上的本地文件。我们尝试查找 /etc/passwd 文件。我们看到它是可访问的。这证明我们确实存在文件包含漏洞。

?file=../../../../../../../etc/passwd

我们开始利用文件包含漏洞读取目标机器上的不同文件。偶然发现knockd.conf 的时候。这意味着涉及端口敲门。我们看到我们在这里配置了一个序列的 openSSH。我们记下这个序列并在这个序列中敲击 SSH 端口以使其启动并运行。

我们使用nc进行端口敲门。一定要按顺序敲门

现在我们有了 SSH 服务,我们需要密码才能进入。我们尝试了在 Web服务上使用的相同凭据,但没有成功。利用之前sqlmap爆出的用户数据库,为SSH Service的暴力破解制作了2个字典(user.txt和pass.txt)。

创建 user.txt 和 pass.txt 字典后,我们使用 hydra 工具对目标机器上的 SSH 服务进行暴力破解。经过一些尝试,我们看到用户 janitor 是具有 SSH 访问权限的用户。

hydra -L user.txt -P pass.txt 192.168.160.200 ssh

登陆成功后,查看目录文件以及对应权限,发现有一个隐藏的目录,标记为“ secrets-for-putin ”。

我们使用 cd 命令在新发现的隐藏目录中遍历。再次列出此目录中的所有内容,找到名为 passwords-found-on-post-it-notes.txt的文本文件。我们使用 cat 命令读取该txt得到了一系列密码。

编辑上面的 pass.txt 文件,并将新找到的密码附加到它。我们再次运行了 hydra bruteforce。这次我们看到我们有一些额外的有效登录账户以及密码

fredf:B4-Tru3-001

以 fredf 用户登录后,检查这个 fredf 用户有什么样的 sudo 权限,看到它可以在不输入任何密码的情况下以 root 用户身份运行一个名为test的程序。

查看test程序,它是一个简单的数据附加程序。它将以 2 个文件作为参数,然后将第一个文件的内容附加到第二个文件中。

![](https://cdn-zhiji-icu.oss-cn-hangzhou.aliyuncs.com/2021/vulnhub-dc9-1 (22).png)

权限提升

现在要提升权限,需要创建一个具有 root 访问权限的新用户,并使用 test 文件在 /etc/passwd 文件中创建该用户的ID。让我们创建一个用户及其密码哈希。可以使用 openssl 完成此任务。首先创建了一个名为 ckc的用户,密码为 空,得到了哈希值。

shell
openssl passwd -1 -salt ckc

添加用户名、冒号 (😃 和“:0:0::”来创建可以充当 root 用户的id。之后,我们使用echo 命令在/tmp 目录中创建了一个名为getflag的文件。然后我们使用我们之前在 getflag文件中找到的测试程序,并将我们刚刚创建的用户哈希附加到 /etc/passwd 文件中。在此之后,我们以我们创建的用户 ckc 登录。因为设置得是空密码,所以直接回车。

shell
echo 'ckc:$1$ckc$GVTd2x3Qys1gVqT2FSw6Z/:0:0::/root:/bin/bash' >> /tmp/getflag
sudo ./test /tmp/getflag /etc/passwd

成功提权并得到flag