vulnhub-DC系列2
1.写在前面
这是是DC系列的第2个,也是vulnhub靶场练习的第3篇文章。有些事情,坚持下来,并没有那么困难。
Tips:DC2 一共有5个flag
2.知识点速记
- 基于网站爬虫生成字典 - wcel
- wpscan使用与用户枚举
- rbash及绕过方法
- scp可以拷贝bash、sh,但无法执行
- git提权
3.坑点总结
- 主机端口扫描不细致,最初未发现7744端口,也不知道其实是ssh服务
- wordpress的后台上传方式,通过medium上传shell包已行不通
- 测试rbash绕过,很多方式并不具备条件(如less、scp)
- linux 程序执行的环境变量设置(export 和 $PATH)
4.环境配置
直接去vulnhub官网下载 Vulnhub-DC2对应的ova文件即可,然后拖入vmware。这里为了方便宿主机与靶机通讯,将虚拟机的网络模式设置为了NAT模式
Win10 宿主机、kali2020 攻击机、vulnhub靶机
5.信息收集
环境配置好后,首先确认一下IP,在kali上查看当前IP为 192.168.114.128
对当前网段的主机进行扫描
1 |
|
坑点1:这里其实并没有发现靶机还开放了7744端口
这里比较好的习惯是:先发现目标主机存活,然后进行全端口的扫描和指纹识别,不放过任何一个信息!
总结下开放端口:
- 80:wordpress
- 7744:ssh
访问下对应的80端口,额,怎么访问不到,这网络不是通的吗?后面看到需要绑定host到域名。
这里有两种验证方式,第一种burp抓包看响应状态:发现跳转到dc-2了
或者nmap的时候加入 -R 参数,自动反向解析dns(title有些调皮—暗示不会自动跳转到dc-2的)
linux和windows绑定host域名方式基本一致/etc/hosts
,注意别找错文件了。。。
访问下网站吧,找的了flag1。flag1提示常规的字典爆破可能并没有效果,试试cewl
。同时暗示可能有多个用户…..
kali下自带cewl,生成了dc2.dict字典。然后拿去burp下跑用户(Mr.robot靶机接触过wordpress的用户爆破)
知识点1:wpscan及用户枚举
wpscan是检查wordpress的安全工具,可以快速分析当前版本、使用的主题、插件及其他安全漏洞
但并没有爆破到任何可用的账户,试了下admin账户倒是存在。但dc2.dict作为密码又跑不出结果。
这个时候看了下别人的wp,发现使用wpscan扫描的,于是试试吧。
1 |
|
这里wpscan通过利用wordpress各种缺陷或漏洞,进行用户枚举。同时会对枚举的用户进行确认和验证。
比如上面通过Json API枚举发现的用户jerry、通过暴力破解获取tom、通过RSS获得admin
OK,拿着这三个用户名去burp里跑一下(其实wpscan自带扫描功能),最终得到这两个可用账户:
tom/parturient
Jerry/adipiscing
补充下wpscan的利用方式:
wpscan --url http://dc-2 --passwords /home/wanghao/dc2.dict --usernames /home/wanghao/name.dict
6.漏洞利用
6.1 wordpress传shell
登录后发现,tom账号下面找不到flag2,Jerry账号下的pages页面找到了flag2(tom后台没有pages)
flag2的路径http://dc-2/index.php/flag-2/。根据提示,其实也可以爆破试着找找的
(后续:好吧是我想多了,这个提示是:别想通过wordpress拿下shell了,想想别的辙吧…)
这里花了大量的时间在测试通过Media
上传webshell,直接传php不行、传zip不行
然后查了一下,新版本的wordpress已经不支持通过媒体打包getshell了,于是放弃。
6.2 SSH登录
那么到底什么是another way 呢?—— 想想之前跑出来的7744端口ssh,要不试试用这俩账户ssh过去?
(实际上,自己一开始并没有发现7744端口,发现了还纳闷是什么服务?)
测试后,tom可以登录(实际上这里Jerry用户应该是小写jerry,但是也会提示permission denied的)
然后在tom的家目录发现flag3,flag3提示需要su到Jerry
6.3 rbash逃逸
同时,我们发现好多命令和程序都执行不了。这是由于tom的shell是rbash导致的
知识点2: rbash逃逸
针对rbash的介绍和绕过方式可见:rbash及逃逸总结
rbash的限制:
- 使用命令cd更改目录
- 设置或者取消环境变量的设置(SHELL, PATH, ENV, or BASH_ENV)
- 指定包含参数’/‘的文件名
- 指定包含参数’ - ‘的文件名
- 使用重定向输出’>’, ‘>>’, ‘> |’, ‘<>’ ‘>&’,’&>’
总而言之rbash的限制多多。所以我们得回到正常的bash中。首先查看当前tom用户可用的程序:
发现只有以下四个程序能用:less、ls、scp、vi
。差了下less vi 和scp 理论上都可以用
但实际测下来,DC-2这个环境,能用的只有vi。其他感兴趣的话可以看下上面的链接 rbash及逃逸总结
1 |
|
然后返回了bash的shell,但这里有个坑,很多命令还是执行不了,为什么呢?明明是bash的shell。
这里其实是因为没有设置环境变量,linux不知道命令或者程序的启动位置
6.4 环境变量设置
坑点&知识点:linux 环境变量设置
- /bin 是超级用户和一般用户都可以使用的命令
- /usr/bin 是安装的软件的命令
- export 是给变量复制,注意会覆盖
1 |
|
$PATH
是已有的 PATH
的值,冒号 :
是追加内容,将 /bin
追加到已有 PATH,并赋值给PATH
可以看下当前PATH环境的值,只有/home/tom/usr/bin
,也即tom自己安装的程序。
所以需要加入上面的/usr/bin
,/bin/
,这样才能正常执行一些命令。
这里对比一下加入环境变量前后:
ok了,很多命令都可以执行了。这里su一下Jerry账户,咦怎么不存在!
查看下/etc/passwd
发现是小写的 j
6.5 git提权
看下flag4,说还有一个最终的flag,且没有给提示。但最后一行 git outta here
还是有点猫腻。
搜了一下,发现git是一个分布式版本管理工具,可以想象成自己搭建的github一样。而linux下可以使用git提权
我们先用sudo -l
查看下当前jerry用户可执行权限:
发现jerry可以不经过验证直接以root权限运行git
git提权的思路其实有点像是less、vi那种suid提权,在有root权限下 执行返回shell的语句
1 |
|
然后我们拿下最终的flag5,打完收工
7.写在结尾
对DC2的学习内容做个复盘:
1.信息收集部分: 对扫描和端口探测不够充分,前期没有发现7744,且未识别到是ssh服务,走了很多弯路
2.自动化工具使用: cwel爬虫字典、wpscan用户枚举、登录爆破的功能,在渗透测试过程中都可以自动化实现
3.linux环境变量: 对Linux的基础原理和命令执行环境缺乏了解,如path变量和/bin/ /usr/bin/ 等
DC-2 告一段落,下期再见