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
2
nmap -sT 192.168.114.128/24
nmap -sV -A 192.168.114.132
img

坑点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。同时暗示可能有多个用户…..

img

kali下自带cewl,生成了dc2.dict字典。然后拿去burp下跑用户(Mr.robot靶机接触过wordpress的用户爆破)

知识点1:wpscan及用户枚举

wpscan是检查wordpress的安全工具,可以快速分析当前版本、使用的主题、插件及其他安全漏洞

但并没有爆破到任何可用的账户,试了下admin账户倒是存在。但dc2.dict作为密码又跑不出结果。

这个时候看了下别人的wp,发现使用wpscan扫描的,于是试试吧。

1
2
## -e表示枚举 u表示
wpscan --url http://dc-2 -e u

这里wpscan通过利用wordpress各种缺陷或漏洞,进行用户枚举。同时会对枚举的用户进行确认和验证。

比如上面通过Json API枚举发现的用户jerry、通过暴力破解获取tom、通过RSS获得admin

img

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了,于是放弃。

img

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的限制:

  1. 使用命令cd更改目录
  2. 设置或者取消环境变量的设置(SHELL, PATH, ENV, or BASH_ENV)
  3. 指定包含参数’/‘的文件名
  4. 指定包含参数’ - ‘的文件名
  5. 使用重定向输出’>’, ‘>>’, ‘> |’, ‘<>’ ‘>&’,’&>’

总而言之rbash的限制多多。所以我们得回到正常的bash中。首先查看当前tom用户可用的程序:

发现只有以下四个程序能用:less、ls、scp、vi。差了下less vi 和scp 理论上都可以用

但实际测下来,DC-2这个环境,能用的只有vi。其他感兴趣的话可以看下上面的链接 rbash及逃逸总结

1
2
3
4
vi flag3.txt
## 进入文件
:set shell=/bin/bash
:shell

然后返回了bash的shell,但这里有个坑,很多命令还是执行不了,为什么呢?明明是bash的shell。

这里其实是因为没有设置环境变量,linux不知道命令或者程序的启动位置


6.4 环境变量设置

坑点&知识点:linux 环境变量设置

  • /bin 是超级用户和一般用户都可以使用的命令
  • /usr/bin 是安装的软件的命令
  • export 是给变量复制,注意会覆盖
1
2
export PATH=$PATH:/usr/bin
export PATH=$PATH:/bin

$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
2
sudo git help config
! /bin/bash

然后我们拿下最终的flag5,打完收工


7.写在结尾

对DC2的学习内容做个复盘:

1.信息收集部分: 对扫描和端口探测不够充分,前期没有发现7744,且未识别到是ssh服务,走了很多弯路

2.自动化工具使用: cwel爬虫字典、wpscan用户枚举、登录爆破的功能,在渗透测试过程中都可以自动化实现

3.linux环境变量: 对Linux的基础原理和命令执行环境缺乏了解,如path变量和/bin/ /usr/bin/ 等

DC-2 告一段落,下期再见