一、准备阶段
准备工具如Kali Linux,下载并设置DC-2靶场机。确保攻击机和靶机在同一网络段,通常设置为桥接模式或NAT模式。
1.1 靶机描述
Much like DC-1, DC-2 is another purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing.
As with the original DC-1, it's designed with beginners in mind.
Linux skills and familiarity with the Linux command line are a must, as is some experience with basic penetration testing tools.
Just like with DC-1, there are five flags including the final flag.
And again, just like with DC-1, the flags are important for beginners, but not so important for those who have experience.
In short, the only flag that really counts, is the final flag.
For beginners, Google is your friend. Well, apart from all the privacy concerns etc etc.
I haven't explored all the ways to achieve root, as I scrapped the previous version I had been working on, and started completely fresh apart from the base OS install.
就像DC-1一样,DC-2是另一个特意构建的易受攻击的实验室,目的是在渗透测试的世界中获得经验。
和原始的DC-1一样,它也是为初学者设计的。
必须具备Linux技能和熟悉Linux命令行,以及一些基本渗透测试工具的经验。
就像DC-1一样,这里也有五个标志,包括最终的标志。
同样,就像DC-1一样,对于初学者来说,这些标志很重要,但对于有经验的人则不那么重要。
简而言之,唯一真正重要的标志,是最终的标志。
对于初学者来说,谷歌是你的朋友。嗯,除了所有的隐私问题等等。
我没有探索所有实现root的方法,因为我放弃了我之前一直在做的版本,并从基础操作系统安装开始完全重新开始了。
和DC-1一样,下载好DC-2的虚拟文件后倒入VM虚拟机,并设置为NAT模式。
这里不会的可以参照本专栏的上篇文章。
二、靶场渗透
DC-2是一个为渗透测试初学者设计的脆弱实验室,它包含了多个flag,但只有最终的flag才是最重要的。以下是对DC-2靶场渗透的步骤总结:
- 环境搭建:首先需要下载DC-2靶场环境,可以通过Vulnhub网站获取。下载后,使用虚拟机软件如VMware导入,并设置网络模式为NAT。
- 信息收集:使用工具如nmap进行端口扫描,确定靶机的IP地址和开放的端口。例如,使用
nmap -sP 192.168.233.0/24
来探测活动主机,然后使用nmap -A -p- -v 192.168.233.178
来探测开放的端口和服务。- 访问Web站点:访问靶机的Web服务,可能会发现需要添加域名解析到hosts文件,以便能够通过域名访问靶机。
- 发现flag1:在Web站点的某个部分,可能会直接找到flag1,或者需要根据提示使用特定工具(如cewl)来生成密码字典。
- 用户名枚举与密码爆破:使用wpscan工具枚举WordPress站点的用户名,然后使用生成的密码字典进行爆破,可能会发现如
admin
,jerry
,tom
等用户名。- SSH登录:使用爆破出的用户名和密码尝试SSH登录,可能会发现某个用户(如tom)可以成功登录。
- rbash限制绕过:登录后可能会遇到受限的shell(rbash),需要使用特定的技巧来绕过限制,例如使用
BASH_CMDS[su]=/bin/sh;a
或者修改环境变量来执行命令。- 提权:在成功绕过rbash限制后,可以尝试提权。可能会发现用户有sudo权限可以无密码执行某些命令,如git,可以利用这一点进行提权。
- 发现final-flag:提权后,可以搜索并获取最终的flag文件。
2.1 信息收集
2.1.1 发现靶机真实IP
和DC-1差不多,我们在一开始没有任何信息,所以需要我们先挖掘真实IP,以便我们能继续进行其他操作如远程连接或提权等。
使用nmap工具发现在同一网段下的其他IP地址,根据排除法我们知道DC-2的IP应该是172.16.130.175
因为本机IP为172.16.130.134;172.16.130.1是网卡;172.16.130.2是网关
2.1.2 探测端口及服务
使用命令探测开放的端口:
nmap -sV -p- [你要探测的IP]
或
nmap -A -p- -v [你要探测的IP]
两条命令功能类似,只不过一个直接简洁明了的给出我们开放端口,另一个给出我们更加详细的描述而已。
根据上图,我们可以看出他给出了DC-2开放了两个端口,80默认端口和7744端口。
2.1.3 网站配置
此时,我们输入DC-2的IP进行访问,发现无法访问,且IP地址自动被转换为了域名!由此我们可以想到:dc-2这个域名解析失败,我们需要更改hosts文件添加一个ip域名指向。
hosts
文件是一个系统文件,它将网络主机名映射到IP地址。当你的计算机尝试访问一个域名时,系统会首先检查hosts
文件以确定是否能找到对应的IP地址。如果没有找到,系统才会继续查询DNS服务器。如果你害怕此次的实验会对之后虚拟机的 使用产生影响,那么你可以在修改之前提前拍摄一张快照,或者之后将对应域名再从hosts文件中删除也可以。
hosts文件通常位于以下位置:
- 在Windows系统中,
hosts
文件通常位于C:\Windows\System32\drivers\etc\
目录下。 - 在Linux和macOS系统中,
hosts
文件通常位于/etc/hosts
目录下。
hosts文件的格式通常如下:
# 这是一个注释
127.0.0.1 localhost
# 以下行是映射某个域名到特定IP地址的例子
192.168.1.100 example.com
在 Kali Linux(或任何类 Unix 系统)中,hosts
文件是一个用于将主机名映射到 IP 地址的文件。它位于 /etc/
目录下。默认情况下,只有 root 用户或具有适当权限的用户才能编辑此文件。
要编辑 hosts
文件,你可以使用任何文本编辑器,如 nano
、vi
或 gedit
(如果已安装)。在此,我以vim编辑器举例:
sudo vim /etc/hosts
添加成功后保存退出,再次访问网站,发现这次可以解析了。
在网站中随便点点,拿下flag1
Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.
More passwords is always better, but sometimes you just can’t win them all.
Log in as one to see the next flag.
If you can’t find it, log in as another.
你通常的密码列表可能不管用,所以相反,你可能只需要使用 cewl。
更多的密码总是更好的,但有时候你就是赢不了它们全部。
作为其中一个登录就可以看到下一个标志。
如果你找不到,尝试作为另一个登录。
大致意思就是叫我们暴力破解账号密码
2.1.4 目录扫描
我们可以使用dirb命令进行目录扫描,看看网站下有什么东西
dirb http://dc-2/
在这其中有许多后台地址,但似乎没什么有用的东西
2.1.5 用户名枚举
既然如此,那么我们就从另外一个角度下手,从页面可以看出,这是一个wordpress站,我们采用专门针对wordpress的工具wpscan来进行扫描。
Wpscan 枚举,cewl 生成字典,爆破获取密码:
从页面信息中可以知道,此页面是 wordpress 为框架开发的 cms系统,WordPress 是一个免费的开源内容管理系统,用PHP 编写,并与 MySQL 或 MariaDB 数据库配对。功能包括插件架构和模板系统。cewl 是一个网页关键字抓取工具,cewl 是一个 kali 自带的密码生成工具,WordPress 有一个 kali 自带扫描工具 wpscan 可以爆破网站的用户名,可以用关键字作为密码继续进行爆破。
爬取网站生成字典的常用工具:cewl
cewl简介:
cewl 是一个 ruby 应用,爬行指定 url 的指定深度。也可以跟一个外部链接,结果会返回一个字典,这个字典可以传给其他工具进行密码暴力破解,kali中自带cewl。
现在,我们来试着使用cewl生成密码,这样,我们就生成了一个字典文件:
cewl -w dc2_passwords.txt http://dc-2 //生成字典
Wpscan简介:
WPScan 是一款专门针对 WordPress 网站进行安全漏洞扫描的工具,它能够检测包括 WordPress 核心、插件和主题在内的多种安全问题。这款工具对于安全研究人员和网站维护者来说非常有用,可以帮助他们发现并修复潜在的安全威胁。
使用 WPScan 时,你可以通过不同的参数来定制扫描任务,例如:
--url
或-u
:指定要扫描的 WordPress 网站的 URL。--enumerate
或-e
:枚举信息,如插件、主题和用户信息。--api-token
:提供 API 令牌以获取漏洞数据库的访问权限,这对于显示与检测到的插件或主题相关的已知漏洞信息是必要的。
wpscan --url http://dc-2
wpscan --url http://dc-2 --enumerate t 扫描主题
wpscan --url http://dc-2 --enumerate p 扫描插件
wpscan --url http://dc-2 --enumerate u 枚举用户
首先我们使用wpscan来扫描一下wordpress版本
wpscan --url http://dc-2
通过扫描我们可以发现wordpress的版本为4.7.10
wpscan还可以用来枚举用户,再尝试利用枚举到的用户爆破密码
wpscan --url http://dc-2 --enumerate u
通过爆破,我们得到了三个用户名:admin、jerry、tom
2.1.6 暴力破解密码
完成上述准备步骤后,我们可以根据flag1给我们的提示来进行暴力破解密码了
已知我们之前使用cewl生成了一个字典
现在我们来使用wpscan进行暴力破解:
wpscan --url http://dc-2 --passwords [你的字典]
可以看到,wpscan会用最原始的方法进行暴力破解,最终爆破出来两个账号的密码:jerry和tom
那么,我们尝试使用他们登陆站点,成功登陆,随便翻找一下,发现flag2
If you can't exploit WordPress and take a shortcut, there is another way.
Hope you found another entry point.
如果你不能利用 WordPress 并采取捷径,还有另一种方法。
希望你找到了另一个入口点。
由此信息,我们想到之前还发现了ssh(7744端口),现在让我们来试试。
2.1.7 登陆ssh
分别使用tom和jerry的密码进行远程登录,发现jerry无法正常登陆,那我们先使用tom的账号登陆ssh:
ssh tom@172.16.130.175 -p 7744
输入密码后成功连接
在tom的家目录中,我们发现了flag3,但是无法使用cat直接查看,我这里选择使用vi来查看,当然你也可以选择反弹shell
oor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
可怜的老汤姆总是在追杰瑞。也许他应该为他所造成的所有压力使用 su(切换用户)命令。
这里的 "su" 是指在 Linux 系统中使用超级用户(超级管理员)权限来执行命令
这提示我们,或许该采用一些权限更高的权限来执行命令
2.2 用户切换、权限提升
2.2.1 rbash绕过
在 Linux 系统中,rbash(restricted bash)是一种限制性的 shell 环境,它限制了用户执行某些命令和操作的能力。这通常用于提高安全性,防止用户执行可能对系统造成危害的命令。然而,在渗透测试或系统管理中,有时需要绕过这些限制来执行必要的操作。
在flag3中提示我们需要提权,但无法直接使用su命令提权到jerry,现在我来尝试rbash绕过,查看一下可以使用的命令:
echo $PATH
想cd到目录下,但系统拒绝了,那么我们先列出目录下的内容
我们无法切换目录往往是因为权限不够,那我们现在尝试使用echo来绕过rbash:
BASH_CMDS[a]=/bin/sh;a
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
echo /*
这段代码是用来在受限的 shell 环境中(如 rbash)绕过一些限制,以执行非限制性命令的技巧。下面是每行代码的解释:
BASH_CMDS[a]=/bin/sh;a
BASH_CMDS
是一个环境变量,通常在 rbash 环境中用来定义允许执行的命令列表。- 这行代码将
/bin/sh
添加到BASH_CMDS
环境变量中,使得sh
命令可以被执行。a
是一个变量,这里将其赋值为/bin/sh
,然后在命令的末尾调用它(a
),从而执行/bin/sh
。
export PATH=$PATH:/bin/
- 这行代码将
/bin/
目录添加到当前用户的PATH
环境变量中。PATH
环境变量定义了系统在哪些目录中查找可执行文件。- 通过添加
/bin/
到PATH
,用户可以尝试执行/bin
目录下的任何命令,即使这些命令在 rbash 中通常是被限制的。
export PATH=$PATH:/usr/bin
- 类似于上一行,这行代码将
/usr/bin
目录也添加到PATH
环境变量中。/usr/bin
是另一个包含许多系统命令的目录,这样做可以进一步增加可执行命令的范围。
echo /*
- 这行代码看起来像是一个示例或测试命令,它的作用是打印出根目录(
/
)下的所有文件和目录名称。- 在 rbash 中,如果限制了对
ls
命令的使用,这个命令可以作为一个替代方法来列出目录内容。这段代码的目的是为了在受限的 shell 环境中获取更多的自由度,以便能够执行更多的命令
现在我们有了权限,再来看看jerry目录下的内容
成功拿到flag4
Good to see that you've made it this far - but you're not home yet.
You still need to get the final flag (the only flag that really counts!!!).
No hints here - you're on your own now. :-)
Go on - git outta here!!!!
很高兴看到你已经走到了这一步 - 但你还没有到家。
你仍然需要获取最终的标志(唯一真正重要的标志!!!)。
这里没有提示 - 你现在只能靠自己了。:-)
继续吧 - 赶紧离开这里!!!
没什么提示,接下来就要靠我们自己了。
2.2.2 git提权
猜想我们需要提权才能获取到最终的flag,我们试着使用git来提权。
在已经在tom账户下绕过rbash的前提下,我们重新使用su切换用户,来到jerry用户。
查看一下jerry是否可以使用git:
sudo -l
可以看到,无需root权限,jerry可以使用git。
那么,现在我们就来使用git命令进行提权,输入下面命令:
sudo git help status
输入!/bin/sh,直接输入即可
现在,我们成功拿到了root权限!
三、总结
DC-2与DC-1的渗透步骤有一些相似之处,但也存在一些区别。以下是DC-2渗透步骤与DC-1的区别:
-
靶机发现与IP解析:
- DC-2:发现靶机真实IP后,需要修改hosts文件以解析域名到IP地址,因为直接访问IP时域名解析失败。
- DC-1:没有提到需要修改hosts文件,直接通过IP进行渗透测试。
-
端口探测:
- DC-2:探测到除了常见的80端口外,还有一个7744端口开放。
- DC-1:主要提到了22和80端口,没有提到7744端口。
-
网站配置与访问:
- DC-2:需要修改hosts文件后才能访问网站,且网站是基于WordPress的。
- DC-1:直接通过IP访问Drupal网站,没有提到需要修改hosts文件。
-
目录扫描与用户枚举:
- DC-2:使用dirb进行目录扫描,使用wpscan进行WordPress站点的用户枚举。
- DC-1:没有提到使用dirb或wpscan,而是直接利用Drupal的已知漏洞进行攻击。
-
密码破解:
- DC-2:使用wpscan结合cewl生成的字典文件对WordPress用户进行密码破解。
- DC-1:没有提到使用cewl生成字典文件,而是直接利用已知漏洞获取shell。
-
SSH登录与用户提权:
- DC-2:使用破解得到的用户名和密码尝试SSH登录,并在受限的rbash环境中尝试提权。
- DC-1:SSH登录和提权过程没有详细描述,主要关注于Drupal漏洞的利用。
-
提权技术:
- DC-2:尝试使用rbash绕过和git提权技术来获取更高权限。
- DC-1:提权过程主要关注于SUID提权。
-
最终提权与获取flag:
- DC-2:通过SSH登录、rbash绕过、git提权等步骤最终获取root权限,并找到flag。
- DC-1:通过SUID提权和数据库操作来获取flag。