Vulnhub-DC-2渗透学习
一、环境搭建
攻击机:Kali-2021.3:192.168.8.105
靶机:Vulnhub-DC-2:192.168.8.222
二、信息收集
首先使用nmap进行主机探活
1 | nmap -sP 192.168.8.0/24 |
然后逐个扫描,判断出靶机的IP地址
1 | nmap -A -p- 192.168.8.222 |
发现我们的目标开放了80和7744端口,80端口是默认端口,7744端口是开放了ssh服务
使用whatweb继续寻找相关信息
1 | whatweb 192.168.8.222 |
然后发现这个网站使用的CMS是WordPress 4.7.10
三、实战
flag1
首先访问一下80端口,发现flag就在下面
这里有点奇怪,网上的大部分教程在这一步都会出现域名无法解析的情况,因为在访问这个网址的时候,直接跳转到了http://dc-2/的域名上了,而我们的本地hosts文件里是没有该域名的解析ip,所以导致无法访问。但是我这里直接就访问成功了,有点奇怪
正常流程是需要在本机的hosts文件中加入指向该域名的ip地址
1 | Windows: |
打开hosts文件后加入下面的内容
1 | 192.168.8.222 dc-2 |
再次访问就能够访问成功了,并找到第一个flag
翻译:
您通常的单词表可能不起作用,因此,也许您只需要成为 cewl。
更多的密码总是更好,但有时你无法赢得所有密码。
以一个身份登录以查看下一个标志。
如果找不到,请以另一个身份登录。
flag2
flag1提示中提到cewl,检索一下发现这是一个生成密码字典的工具,很明显这是让我们用这个工具来生成密码来爆破,可是现在我们还没有用户名。
信息收集里我们已经知道了这个网站的CMS是WordPress,而Kali中自带有一个专门用来扫描该CMS的工具:wpscan
Kali(渗透工具):WPScan的使用(WordPress扫描工具)
1 | wpscan --url http://dc-2 --enumerate u //枚举出用户名 |
发现一共存在三个用户
将这三个用户存入txt文件中:
1 | echo -e "admin \njerry \ntom" > users.txt |
然后通过cewl来生成我们的密码字典
1 | cewl http://dc-2/ -w passwd.txt |
那么接下来就是爆破了,但爆破前得找到这个网站的登录入口,有两种方法
-
通过浏览器检索关键信息来寻找
-
通过扫描网站后台文件来寻找
这里理论上可以使用御剑来扫后台,前提是你的字典足够大
而我这里则推荐使用Kali中的一款web页面扫描工具:nikto
1
2nikto -host 192.168.8.222
nikto -url 192.168.8.222扫描完后可以找到该网站的登录页面的地址
两种方法都可以进入登录页面:
使用wpscan开始爆破
1 | wpscan --url http://dc-2/ -U users.txt -P passwd.txt |
成功爆破出了两个账户密码
1 | Username: jerry, Password: adipiscing |
尝试登录,进去后就能找到flag2,除此以外就没什么有用的信息了,两个账号的信息是一样的,没必要登录两次
翻译:
如果您不能利用 WordPress 并走捷径,还有另一种方法。
希望你找到另一个切入点。
flag3
提示说我们需要换一个切入点,还记得之前的7744端口吗,这很有可能就是另一个切入点,所以尝试使用刚刚的账号密码登录SSH服务,因为ssh的默认端口是22,因此我们需要在后面加上指定端口,这里在尝试后会发现只有tom账号可以成功登录
1 | ssh jerry@192.168.8.222 -p 7744 |
这里如果前提是不知道账号密码的话,可以使用hydra进行ssh破解
1 | hydra 192.168.8.222 -L users.txt -P passwd.txt -s 7744 ssh |
这个工具的破解所花的时间比较久,得耐心等会
然后连接tom账号的ssh服务,成功登录!
寻找到flag3,但是发现是rbash,就是被限制了的shell
大致限制情况如下:
- 不能通过 cd 来改变工作目录
- 不能设置或取消环境变量: SHELL, PATH, ENV, BASH_ENV
- 命令名中不能包含目录分隔符 ‘/’
- 不能使用包含有 ‘/’ 的文件名作为内置命令 ‘.’ 的参数(即文件名中不能有 ‘/’)
- 不能使用
>, >|, <>, >&, &>, >>
等重定向操作符 - 不能使用 exec 内置命令
- …
但是我们依然可以使用vi
或less
命令,所以可以查看到flag3的值
1 | vi flag3.txt |
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
flag4
提示中提到了su,这不难理解,既然rbash使我们的权限受到了限制,那我们就得想办法绕过它,然后通过su jerry
切换用户
通过vi编辑器进行绕过
1 | vi //终端上运行vi编辑器 |
然后出来就能看到不是rbash了
然后再设置一下环境变量
1 | export PATH=$PATH:/bin/ |
第一条命令的作用是添加根目录的bin文件夹到$PATH
第二条命令的作用和上一条一样,添加usr/bin文件夹到$PATH
里面的冒号只是起分隔作用,并没有其他作用
这样我们就可以使用这些文件夹中的命令了,接下来就是切换用户了
切换成功后发现还是在tom的工作目录上,所以更换工作目录,然后就能很快找到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!!!
flag5
猜测最后一个flag大概率位于root中,所以我们得提权,先来看看SUID提权
查看具有SUID权限的命令
1 | find / -perm -4000 -print 2>/dev/null |
发现并没有像DC-1的find命令那样可以用来提权
于是去查看一下具有root权限的命令
1 | sudo -l |
发现存在一个免密的git命令(具有root权限)
同时flag4中也提示了git,因此用到了git提权
1 | sudo git help config |
成功得到了root权限,进入root就能得到flag