Preface

本篇文章记录为vulnhub系列DC2,练习过程中也参考了其他大师傅的文章,加上个人的一些思路见解就有了此文,个人拙见定会有出错,还请各位师傅们指正。参考文章

Process

信息搜集

靶机搭建完成以后发现无法访问正常页面,根据提示应该是无法将地址解析到域名,我们需要在本地hosts文件末尾添加一条解析记录

靶机IP dc-2

hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将网址域名与其对应的IP地址建立一个关联,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。hosts文件的优先级是高于DNS解析的

使用插件可以看到所使用的框架为wordpress4.7.10,首页可以看到flag1,翻译以后就是需要登录,我是直接用dirsearch扫的目录,如下:

dirsearch

试过其他页面以后也都没有什么结果,那么就从登录页面下手。最开始我是测试了一下是否在sql注入,之后我又百度找了wordpress4.7.1的漏洞,但是大部分都是修改文章的洞,没有什么实质性进展。那么接下来就登录进去,刚开始我是爆破的admin账号的密码,但是没有爆出来,让flag1翻译过来里面提示以其他身份登录,那么就开始爆破用户名,有两个方法:

Username

Method1

直接使用burpsuite爆破,这个就需要看自己的字典了,我用的是大佬给的字典,成功爆破出来了三个用户名(需要字典的师傅可以下方留言或者私信我哈)

bp_username

Method2

这个方法是看过其他师傅的文章以后才知道的,wpscan是专门用于扫描爆破wordpress的工具,kali里面自带的有。这里说一下payload里面的参数作用,其他详细参数还请师傅们百度或者查看帮助文档,但是我看的时候有些文章的选项参数都比较旧,所以还是建议help参考选项帮助吧。

1
wpscan --url http://dc-2 -e u

–url:指定网站的url

-e:枚举

u:枚举用户名

-U:爆破时指定的用户名

-P:爆破时指定的密码字典

结果:

wpscan_username

跟上面的方法一样,存在用户admin、jerry、tom,接下来就需要爆破密码了。

Password

最开始的时候我是用burpsuite让三个用户的密码都试了一遍,但是一个都没有爆破出来,后来看其他师傅的文章才知道flag1里面的cewl是一个工具。这里简单说一下,cewl工具就是爬取网站信息然后生成一个用于爆破用户名密码的字典,这里写下生成密码的payload,其他用法及详细介绍还请师傅们百度一下。

1
cewl http://dc-2 w dc-2_password

dc-2_password为要保存的搜集结果的文件名

接下来就结合wpsan里面的爆破模块开始爆破。当然都搜集到字典了同样可以使用burpsuite来进行爆破,不过方法都一样,所以这里就只写一下wpsan的爆破结果吧。

1
wpscan --url http://dc-2 -P dc-2.password -U admin

admin_password

tom_password

jerry_password

U1: tom P​1: parturient

U​2: jerry P2: adipiscing

最先爆破的是admin用户,但是没有爆破出密码,而且flag1里面也提示了用其他用户登录,就又试了另外两个用户,然后就成功得到密码,接下来登录进去直接找到flag2

flag2

翻译过来就是:如果您无法利用WordPress并采取捷径,那么还有另一种方法。希望您找到了另一个切入点。

用nmap扫描的时候看到靶机还开放了ssh端口,看来是要用ssh登录,不过这里吐槽一下:查看flag2只能jerry用户才能查看,而登录ssh只有tom用户能登录,看来每个信息都有用啊,这也是信息搜集的重要性。

Getshell&提权

根据提示直接用ssh登录,而且尝试以后发现只有tom用户能登陆成功,看下面就知道原因了。由于靶机更换了ssh默认端口,所以连接到时候需要指定端口

1
ssh -p 7744 tom@IP

登录进去以后发现当前目录下有flag3.txt,但是cat命令不能用,而且绝大部分命令都用不了,于是就查看了一下当前shell,发现是rbash,这里简单介绍一下rbash

rbash:全称restrict bash,即受限制的bash,受限 shell 是 LinuxShell 限制一些 bash shell 中的功能,并且是从名字上很清楚。 该限制很好地实现了命令以及脚本在受限 shell 中运行。 它为 Linux 中的 bash shell 提供了一个额外的安全层。

查看一下环境变量路径

view_rbash

然后就用ls查看一下哪些命令可用

ls_rbash

emmmm,先说一下刚开始我自己的思路:看到既然有less命令,那么直接用less查看flag3

flag3

意思应该是需要切换为jerry账号,也就是jerry的权限应该要比tom的高,不过我当时并没有着急切换账号。百度查看rbash一般情况下命令里面是应该不能包含”/“斜杠的,但是既然这里可以包含,那么就直接查看其他目录文件。果不其然,在/home目录下发现了jerry目录,而且里面还有flag4,那么还是用less查看

flag4

只看翻译的话应该是没有什么提示了,但是注意英文中有一个git,后来看其他师傅的文章发现是git提权,但是当时的我并不知道。既然可以用vi命令,那么我就直接试着在html目录下写shell,但是保存的时候才发现没有写入权限,然后看了下passwd和shadow文件以后也没有什么进展。然后就去看了大师傅们的文章,发现可以用vi/vim绕过rbash,这里放下命令

vi test

:set shell=/bin/bash

:shell

首先随便vi创建一个文件,进入以后直接在命令模式键入冒号设置shell为标准bash,然后再次键入冒号输入shell,我理解的作用是在当前vi环境下设一个标准shell,然后再在当前vi里面调用设置的shell,这点在exit退出标准shell以后会回退到vi里面就可以发现。然后还需要再添加一下环境变量

1
2
export PATH=$PATH:/usr/bin
export PATH=$PATH:/bin

然后就直接切换jerry用户

su_jerry

本来是想用SUID提权的,但是发现常见的方法比如:find、nmap并没有SUID权限,然后再结合flag4里面的提示,用sudo -l看到git有root权限,并且不需要密码

git

然后直接用git获取root权限

1
2
sudo git -p
!/bin/bash

我理解的是因为git具有root权限,所以直接进入git交互界面,需要输出信息比较多的,其他选项好像都不适用,然后再在git缓冲区调用bash,这样就是以root身份调用的shell了。不过需要说一下的是,我用的ssh终端是Fluent Terminal,进入git缓冲区交互界面需要小窗,全屏窗口会直接输出全部内容,无法进入缓冲区。使用MobaXterm测试过后发现也是这样,这点确实需要注意一下。

获得root权限以后目的其实就已经达成了,但还是看一下最后的flag吧

final_flag

至此本次渗透测试练习就完成啦!

Ending

测试过程中难免会去查看其他师傅们的方法,文中我只放了主要参考文章的链接,同时也谢谢其他参考文章的师傅们的付出。文中个人的思路及见解难免会有错误,还请各位大师傅们幸苦指正。

此刻独坐图书馆,突然思绪万千,日常生活虽有些许枯燥,但也是为了日后的精彩!

人间烟火气,最抚凡人心