vulnhub-DC2
flag1
用nmap扫瞄子网段,确定靶机IP。
此时需要在本机的hosts文件加一个域名解析,不然会出错,这里为192.168.123.147 dc-2
。我想是因为访问这个IP,会自动跳转到http://dc-2
,要不加解析,就变成向DNS服务器寻求解析了,而DNS服务器显然是没有这个的,会造成无法访问页面。
这里需要再用nmap扫描一下目标IP的65535个端口,防止错失一些端口信息。看到有80和7744端口。nmap好像默认是扫前1000个端口,这里就用-p-让它扫全部端口。
看到靶机开放有80端口,浏览器访问,可以看到第一个flag。提示我们惯用的字典可能不管用,让我们cewl。
flag2
cewl是一个从目标网站选取关键词,并生成字典的工具。这里生成一个字典dc_passwords.txt。
但我们此时还没有用户名,不知道怎么登录。用谷歌插件Wappalyzer,看到是一个WordPress的CMS。
WPScan是很多安全系统默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞,并且支持最新版本的WordPress。值得注意的是,它不仅能够扫描类似robots.txt这样的敏感文件,而且还能够检测当前已启用的插件和其他功能。
WPScan常用参数如下:
- –url 目标网站地址
- -e, –enumerate [OPTS] 枚举
- vp 枚举有漏洞的插件
- ap 枚举所有插件
- p 枚举所有插件
- vt 枚举有漏洞的主题
- at 枚举所有主题
- t 枚举流行的主题
- tt 枚举缩略图
- cb 枚举备份配置文件
- dbe 导出数据库
- u 枚举用户
- m 枚举媒体
- -t, –max-threads VALUE 最大线程数,默认为5
- -U, –usernames LIST 枚举用户
- –password-attack ATTACK 指定用户爆破密码
- -P, –passwords FILE_PATH 爆破密码,当没有指定用户时候,会默认使用
-e u
枚举出来的用户进行爆破
使用wpscan命令wpscan --url https://dc-2
扫描,看到一些配置信息,还能看到当前版本不是最新的,就有可能存在漏洞。
再用wpscan --url https://dc-2 -e u
,枚举WP的用户。
使用之前的生成的密码字典爆破,wpscan --url https://dc-2 -e u-t 50 -P dc_2passwords.txt
。看到两个账户和密码。
那有了账户和密码怎么登录呢,网页上又没有登录接口。查了一下,知道WordPress的后台地址为wp-admin,访问http://dc-2/wp-admin
,就会有登录页面。输入jerry和密码,登录成功。在Pages页面找到第二个flag,提示我们如果无法利用WordPress并采取捷径的话,换另一种方法。希望我们找另一个入口点。
在查找网站域下面的地址时,用kali下的dirb也是一个不错的选择。
flag3
另一个入口点在哪儿呢,这时想到之前的SSH端口,尝试去登录一下。用jerry试了几次,都发现登录失败。
那就换下一个账户,登录成功。
ls后,看到第三个flag。想直接查看时,发现出错:命令没找到。
rbash全称Restricted Shell,是一个被阉割的shell,只能使用被指定的命令。而且使用了rbash,还会有以下限制(禁止事项):
- 使用
cd
来改变路径 - 设置或取消SHELL,PATH,ENV或BASH_ENV变量的值
- 指定的命令里包含
/
- 指定包含
/
的文件名作为传递参数给内建命令的参数 - 指定包含斜杠(slash)的文件名作为-p选项的参数,传递给hash内建命令
- 启动时从shell环境中导入函数定义
- 启动时解释shell环境中SHELLOPTS的值
- 使用
>
,>|
,<>
,>&
,&>
,>>
等重定向操作符重定向输出 - 使用
exec
内建命令来意另一个命令替换shell - 使用
enable
内建命令的 -f 和 -d 选项来增加和内建命令 - 使用
enable
内建命令来允许和禁止shell内建命令 - 指定command内建命令的 -p 选项
- 使用
set +r
或set +o restricted
来关闭受限模式
知道有了许多限制之后,就先看我们能使用哪些命令,用echo $PATH
查看环境变量。我们不能使用cd,那就使用ls来查看目标文件夹内容。
看到less命令,就想到之前的suid提权就有它。我想用它提权,发现rbash限制执行命令后再输入’/‘,么的办法。vi命令可以直接用来编辑文件,那直接用它也能查看文件内容。(其实也可以用less查看,less可以指定行数,输出文件后面几行内容)查看flag3.txt,看到提示:可怜的老汤姆总是追逐着杰瑞。也许他应该承受自己所造成的所有压力。
flag4
上面提示杰瑞,可能在jerry用户下面有信息。
查看内容,提示:还没有到家,需要找到最终的flag。
flag5
还有最后一个,说没其他提示,可能就是root权限了。说没提示,但还是有的,上面最后一行:继续,git离开这里。离开哪里?离开这受限的rbash。怎么离开?git提权。前面常见的suid提权没有这个,长见识了。但git提权是要sudo命令的,还是先要跳出这个rbash。绕过限制的方法为下面几条的命令,执行完毕就可以执行其他命令。
1 | BASH_CMDS[a]=/bin/sh;a # 把/bin/sh赋值给BASH_CMDS[a]变量 |
git提权方法(两种):
1 | sudo git help config |
尝试的时候,发现tom并没sudo这个命令。
那尝试换到jerry,发现是可行的。
进行git提权。
发现我们已经是root用户了。
切换到root根目录,看到最后的flag。
回顾过程
- 信息收集
- 目标IP探测
- Nmap端口扫描
- CMS漏洞搜索
- 识别WordPress CMS管理系统
- 使用WPScan扫描
- 生成字典并爆破
- bewl生成字典
- WPScan扫描账户
- 爆破账户密码
- SSH连接
- 绕过rbash切换用户
- git提权
- 查看最终flag
参考