靶场环境

局域网网段:192.168.47.0/24

攻击机 kali:192.168.47.128/24

目标器 DC-2:192.168.47.136/24

打靶目标

找到藏在DC-2靶机中的五个flag。

信息收集

已知目标机器和攻击机器在同一个局域网内,网段为192.168.47.0/24。

寻找靶机真实IP

同样使用nmap扫描网段内的ip,使用命令:

nmap -sP 192.168.47.0/24
-sP参数常用于发现主机,而不进行端口扫描,使用ping,也就是发送icmp数据包,探测ip段内的主机是否在线

第一个为网关地址,192.168.47.128为本kali机地址,那么192.168.47.136就是目标机器地址了。

探测服务以及端口

nmap使用命令

nmap -A -p- -v 192.168.47.136/24
-A表示全面扫描,包括端口,服务,操作系统等等。-p-是扫描主机开放的全部端口,而不只是常见的端口。-v就是显示更详细的扫描结果和信息。

目标靶机开放了80端口的web服务和7744端口的ssh,7744端口并不是ssh的常见端口。

寻找flag

获取flag1

扫描到目标靶机开放了web服务,游览器访问靶机ip,跳转到域名:http://dc-2/,本机可能解析不了,在hosts文件中添加DNS域名解析记录,游览器访问,在当前页面中发现flag1。

它提示我们登录获取下一个flag。很明显,这个网站用的是WordPress框架。

获取flag2

提示我们登录进去,那么首先得找到后台登录页面,用kali自带的dirb扫描目录。

dirb扫描目录
dirb是kali自带的一种扫描工具,dirb是一个基于字典的web目录扫描工具,采用递归的方式来获取更多的目录,可以查找到已知的和隐藏的目录,基于字典扫描,就类似于dirsearch,命令也很简单,直接用dirb后面接上url

有后台管理目录,访问跳转到后台登录页面。

一般登录网站的后台,首先都会想到弱口令和爆破。那么关于弱口令,怎么又去收集字典。

cewl生成字典
cewl是一个字典生成工具,kali自带。Cewl可以通过抓取指定的目标网页并提取其中的文本内容来构建字典。它会遵循链接,并递归地爬取其他页面。分析爬取的文本内容,提取其中的单词、短语和特定模式的字符串。基于提取的单词和短语,Cewl将它们组合成一个自定义字典(wordlist)。这个字典可以用于密码破解、社会工程学攻击、安全测试和其他相关用途。
通过命令cewl http://dc-2/ > 1.txt 爬取靶机web页面的信息用于生成爆破账号密码的字典保存在1.txt中。
枚举出用户名

前面我们提到用的是WordPress的站,那么可以用专门针对于WordPress的工具来进行渗透。

WPScan是一款用于WordPress网站的安全扫描工具,旨在帮助评估和增强WordPress网站的安全性。它是一个开源工具,具有广泛的功能和功能,可以用于渗透测试、漏洞评估和安全审计。
它可以对WordPress站点进行漏洞扫描,弱密码爆破,枚举用户名,识别主题插件,敏感信息泄露,扫描数据库等等。
扫描目标网站:wpscan --url <target_url>
扫描目标网站并且输出详细信息:wpscan --url <target_url> --enumerate <option>
弱密码破解:wpscan --url <target_url> --passwords <wordlist_path>
扫描目标网站的数据库:wpscan --url <target_url> --enumerate d
扫描目标网站漏洞:wpscan --url <target_url> --enumerate vp
扫描网站主题插件:wpscan --url <target_url> --enumerate t

使用wpscan –url http://dc-2 –enumerate u命令对用户名进行枚举

枚举出三个可用用户名,分别为admin,jerry,tom这三个。

暴力破解密码

直接使用wpscan工具的弱密码爆破功能,使用相关命令:

wpscan --url http://dc-2 --passwords 1.txt

爆破出了两个密码,用其中一组账号密码登录到后台。登录进去后随便翻翻看看,在Pages模块中找到flag2。

提示说如果你不能利用WordPress并采取一条捷径,还有另外一种方法。那么就是靶机开放的另一种服务了,也就是ssh。

获取flag3&&flag4

登录ssh
SSH登录远程主机的命令格式:
ssh [选项] [用户名@]主机
其参数可控,-p指SSH服务的端口,-i指定用于身份验证的私钥文件,-l指定登录的用户名,-A启用身份验证代理。这将允许您在通过SSH登录到一个主机后,无需再次输入密码或密钥即可连接到其他主机。

使用相关命令:ssh tom@192.168.47.136 -p 7744登录。

在家目录中找到flag3,cat命令用不了,vi编译器查看文件。可以看到当我们使用cat命令查看的时候,会有rbash的报错,而rbash是一种受限制的命令解释器,rbash是Bash的一种配置,用于提供有限的操作和限制用户的权限,以增加系统安全性。那这种限制是否能够绕过呢?答案是可以的。

绕过rbash

试了一下几个命令cd,cat都不行。拿到的shell也是用处不大的,所以我们需要绕过rbash。这篇文章只记录绕过的方法,原理分析改天再记录,相关文章:https://www.freebuf.com/articles/system/188989.html

echo $PATH 输出环境变量

使用ls查看以下这个目录的相关信息

四个可用命令,使用以下命令来绕过rbash。

BASH_CMDS[a]=/bin/sh;a
#利用bash_cmds自定义一个shell,将/bin/sh与与变量a关联
export PATH=$PATH:/bin/
#将当前PATH环境变量的值与/bin/路径进行连接,然后将结果重新赋值给PATH环境变量。
export PATH=$PATH:/usr/bin
#将当前PATH环境变量的值与/usr/bin路径进行连接,并将结果重新赋值给PATH环境变量。
echo /*
#输出根目录下的文件

其实绕过rbash的限制的根本方法就是再执行一个/bin/bash命令,生成一个新的,没有添加限制的纯天然shell解释器。以上代码就是重新定义一个shell变量a,将/bin和/usr/bin拼接原有环境变量赋予给新的shell变量中,目的就是为了能够执行这两个路径下的命令。最后在这个shell变量中执行echo语句。

总的来说,这段代码的目的是通过利用关联数组来绕过rbash的限制,并将/bin/sh路径关联到键a。然后,通过更新PATH环境变量,添加/bin//usr/bin路径,以绕过rbash对特定路径下命令的限制。这样,我们可以通过执行关联数组中的键a间接执行/bin/sh,并使用更新的PATH环境变量来访问/bin//usr/bin中的命令。

成功绕过rbash。进入到jerry目录发现了flag4,可以用cat命令查看:

提示说还有最后一个旗帜,最后一句提示用git。

获取final_flag

提权
su jerry 切换到jerry用户

直接使用ssh远程登录到jerry用户是行不通的。切换账号后发现没有rbash的限制。

不能进入到root目录,因为权限不够。输入sudo -l列出当前用户在当前主机上的sudo特权

它允许用户”jerry”以root身份执行”/usr/bin/git”命令,而无需进行密码验证。那么我们就可以通过/usr/bin/git来提权。百度git提权,输入命令 sudo git help status 该命令打开git命令的帮助文档,在下面直接输入!/bin/bash进行提权。

提权成功,最后就进入root找到最后的flag了。

本靶场通关结束。