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

DC-1 是一个专门建造的易受攻击的实验室,目的是获得渗透测试领域的经验。它旨在为初学者带来挑战,但它的难易程度取决于您的技能和知识以及您的学习能力。要成功完成这一挑战,您需要具备 Linux 技能、熟悉 Linux 命令行并具有使用基本渗透测试工具的经验,例如可以在 Kali Linux 上找到的工具。

获得 root 权限的方法有很多种,DC-1提供了一些包含初学者线索的标志。总共有五个标志,但最终目标是在 root 用户的主目录中查找并读取该标志。您甚至不需要 root 用户身份即可执行此操作,但是您需要 root 权限。根据您的技能水平,您可能能够跳过查找大多数这些标志的步骤并直接获取 root 权限。初学者可能会遇到以前从未遇到过的挑战,但只需进行 Google 搜索即可获得完成此挑战所需的信息。

0x01 信息搜集

拿到靶机之后正常导入VMware,之后开机修改网络连接方式:NAT方式。重启靶机确保网络连接方式已经修改。

使用nmap扫描靶机的IP地址:

确定靶机的IP地址之后,继续扫描开放的端口和服务。

看到靶机开放了80端口和22端口,尝试22端口的弱口令登录,发现无果,打开靶机的web界面,开局一个登录框,尝试弱口令去登录admin/admin123,密码不对,尝试其他功能点,均没有任何有用效果。

打开插件,发现是Drupal 7 之后去Google搜索历史漏洞

0x02 漏洞利用

看到这样一篇文章,而且对应的版本是6/7/8,正好我们的靶机也是其中一个版本,之后到msf当中去search一下有没有可用的exp。之后可以详细去了解一下漏洞出现的成因。

根据漏洞的CVE编号找到最近的EXP,使用EXP对靶机进行攻击。

0x03 渗透测试

我们可以使用python去模拟一个伪真实的命令行。

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

之后就是和正常的命令行一样了,看起来就会舒服很多。

cat一下flag1.txt可以看到里面的内容,大概的意思就是:一个好的CMS需要 一个配置文件。这说明我们要去找一下这个CMS的配置文件的位置。(这里我们可以通过Google去搜一下,或者直接用Linux命令去查询。

我建议是Google搜素一下,简单快捷。

通过Google搜索到配置文件在sites/default/目录下

看一下flag2的提示:

根据flag2的提示和拿到的数据库密码,我们直接去连接数据库,找到了存储后台账号密码的表:

密码是被加密处理过的,继续去文件里面找加密脚本,然后根据加密脚本去重新修改密码。这里我们就不一个个就看了

1
find -name "*pass*"

直接用这个命令就可以查到包含pass的文件。

用这个脚本把你要改的密码进行加密,然后更新数据库中的内容就可以了。之后用你更新的密码去登录后台。

1
update users set pass='$S$DyyA5HnUonyq8xJJZeWKGIsIxaDpzGM6jbKqPiERZ/lLMnsWkUB.' where name='admin';

之后就是提权阶段了。

0x04 权限提升

SUID是set uid的简称,它出现在文件所属主权限的执行位上面,标志为 $ 。当设置了SUID后,UMSK第一位为4。我们知道,我们账户的密码文件存放在/etc/shadow中,而/etc/shadow的权限为 ———-。也就是说:只有root用户可以对该目录进行操作,而其他用户连查看的权限都没有。当普通用户要修改自己的密码的时候,可以使用passwd这个指令。passwd这个指令在/bin/passwd下,当我们执行这个命令后,就可以修改/etc/shadow下的密码了。那么为什么我们可以通过passwd这个指令去修改一个我们没有权限的文件呢?这里就用到了suid,suid的作用是让执行该命令的用户以该命令拥有者即root的权限去执行,意思是当普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件了。

1
2
3
4
# 不同系统适用于不同的命令
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;

这里我就直接标注出可以用来提权的命令了。

1
2
find 命令说明
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。-exec参数后面跟的就是我们想进一步操作的命令,so,我们可以以root的权限命令执行了
1
如果这里直接使用exec参数,会让结果无限递归,因为并没有找到你需要的文件,所以你需要先创建一个123文件,然后确保能够`find`到这个文件再执行命令

注意

1
2
提权使用 find / -perm -4000 2>/dev/null来查看当前有哪些命令在使用的过程中具有root权限
find 123 -exec '/bin/sh' \; 使用find命令并执行/bin/sh调用命令解释器,解释器的权限也是root