1.下载靶机
本篇文章是DC靶机系列的第二个篇,针对DC-2,建议感兴趣的读者从DC-1开始练习((26条消息) 渗透测试学习之靶机DC-1_xdbzdgx的博客-CSDN博客)。
DC-2的下载地址为DC: 2 ~ VulnHub。三个地址建议使用磁力下载,比较快。下载后解压为.ova文件,该格式可直接在VMware上打开,如果显示打开失败,点击重试即可成功,如果仍无法成功可百度、谷歌解决。
在VMware加载成功之后显示如下界面:
默认状态我们是打不开该系统的,也不知道账号密码的,毕竟我们的目的就是在不知道账号密码的情况下拿到root权限,找到flag。注意,这里建议把DC-2靶机的网络链接模式改为NAT模式。本文使用的攻击机为kali(安装在VMware上,IP为:192.168.179.128)。
2.收集靶机信息
由于本文的攻击机和靶机在同一个网络下,因此在kali上输入命令: arp-scan -l,显示如下
可判断出靶机的ip为192.168.179.130.接着使用nmap对该ip进行扫描,输入命令:nmap -sV -p- 192.168.179.130
这里有个点要注意,我扫描的习惯操作是nmap IP,但是从本题可以看出,该靶机故意更改了ssh的默认端口,这样使用nmap ip就扫描不出来了,所以建议以后做nmap扫描一定要对全端口进行扫描,尽可能地仔细。
同时我们看到靶机开放了80端口,那么我们使用浏览器去登陆http://192.168.179.130:80看看有没有什么有效信息。登陆发现了浏览器将其解析成http://dc-2并且访问失败,这说明是本题解析dc-2失败,因此需要在本题host文件上添加192.168.179.130 dc-2
vim /etc/hosts
此时登陆,页面为
观察一下页面,发现flag,点击可得到第一个flag文件,并且发现网站左下角Proudly powered by WordPress ,说明该网站的CMS是wordpress。
这里有三个提示,一个是需要登陆(又用户名肯定需要登陆呀),一个是使用cewl,另一个是暗示我们可能获得不止一个用户,但是不是所有的用户都有用(如果访问失败不妨试试另一个,又暗示了两个用户权限可能不同)。
此外我们可以看到此时的url为http://dc-2/index.php/flag/,这个时候就考验大家的好奇心了,可以在url后面试试加admin,passwd,includes之类的,看看有没有其他页面,然后就发现了竟然还有意外惊喜。发现在url后面加任何名词都会显示如下界面
然后我们在好奇心地随便搜搜(这里好奇心是开玩笑啦,一般来说,面对网站一定要尽可能地熟悉和点击,尽可能地挖掘有效信息,虽然99.99%的试探都是徒劳无功,但是万一呢)。然后就发现了第二个flag,提示
再一次暗示WordPress。接下来我们利用这些线索进行漏洞挖掘。
3.漏洞挖掘
1.找到登陆页面
本人翻看了网站,发现没有看到登陆页面,所以这里需要我们自己思考一下,又两种方式可以找到:
第一,我们已知该网站是使用wordpress,则在网上搜搜发现默认登陆页面为wp-admin,测试一下,果然发现了登陆页面。
第二,使用网站目录暴力猜解工具,如gobuster 、dirb、metasploit等,我们这里使用dirb.
输入命令行:dirb http://dc-2,可以通过猜解得到wp-admin可以访问成功。
2.生成该网站的密码破解字典
输入命令行:cewl http://dc-2 -w dc-2-password.txt ,利用cewl针对该网站生成密码字典,并将密码存储在txt文件中。
3.爆破该网站登录名
WPScan是一款针对wordpress的安全扫描软件;WPScan可以扫描出wordpress的版本,主题,插件,后台用户以及爆破后台用户密码等。当然也可以使用其他扫描网站目录的工具。
输入命令行:wpscan --url http://dc-2 -e u,其中-e表示枚举,u表示要扫描的目标:用户名
发现扫描出三个用户名,admin,jerry,tom.
并将其保存为dc-2-user.txt 文件
4.爆破登录名及对应密码
仍利用wpscan工具,输入命令行:wpscan --url http://dc-2 -P dc-2-password.txt -U dc-2-user.txt
结果发现只破解出两个账号密码
Username: jerry, Password: adipiscing Username: tom, Password: parturient
5.登陆
利用账号密码登陆,翻遍网页发现了flag(哈哈,好奇心已经让我们提前拿到了)
4.渗透利用
根据flag2的提示,这条路可能无法再挖掘出更多信息了,并建议我们试试其他的注入点。从开头nmap我们知道,除了80还有ssh的7744端口,接下来我们尝试来连接shh。
1.登陆ssh
此时我们有两个账号,可以分别测试一下,发现jerry登陆失败,tom访问成功
输入命令行 ssh [email protected] -p 7744
然后我们随机查看一下
发现有flag3.txt,但是我们打不开,此时发现了-rbash,rbash(restricted bash)
,即受限制的 bash。常常仅使用 ssh 来访问网页。这就说明了我们要提权或者绕过。这里先讲绕过,本题的解决方式有两种。
第一,使用vi,less,more,git等可提权的命令测试。该靶机可使用vi flag3.txt,发现可以访问。
第二,绕过,关于绕过有几种方式,详细参考RBash - 受限的Bash绕过 - 云+社区 - 腾讯云 (tencent.com)
(1)本人使用的是输入命令行
vi 4.txt #随便打开一个txt文件(文件名随意填) 然后再末端输入(就是按一下esc):set shell=/bin/bash 再按一下esc,接着输入 :shell 注意,上面两行的冒号也要输入。
(2)很多博主使用的如下方法
输入如下命令行
BASH_CMDS[a]=/bin/sh ; a #调用/bin/sh命令解释器 /bin/bash #使用bash命令解释器
无论使用哪一种方式,紧接着都要创建一个环境变量
export PATH=$PATH:/bin/
看到这里,大家不妨思考为什么要创建环境变量?大佬请绕行。其实再进行上面操作之前,查看当前的变量
输入命令行 echo $PATH
原来是因为我们的当前环境变量 /home/tom/usr/bin
下面!所以我们的 shell
被限制了,这导致我们不能执行一些命令。
而(1)方法则是通过转义环境变量的方式,(2)方法是定义一个环境变量,然后再添加我们新的环境变量,这样才能得到一个不受限的shell。
然后cat flag3.txt 查看flag信息。
该信息提示使用su ,并切换用户
我们输入命令: su jerry,然后输入密码,进入jerry的目录。
这个时候jerry对/home/tom肯定是没有权限的,因此 cd /home/jerry
此时找到了第四个flag,提示我们可以使用git
5.提权
接着我们查看查看可以使用root权限无密码的命令,输入 sudo -l
发现git命令可以使用root权限,并且提示利用git提权。可以在网络上搜索如何利用git提权
发现有两种方式
1、sudo git help config #在末行命令模式输入 !/bin/bash 或 !'sh' #完成提权 2、sudo git -p help !/bin/bash #输入!/bin/bash,即可打开一个用户为root的shell
这两种方式的前提是把shell窗口变小,使得不能在一页全部显示,才可以输入。
![(C:\Users\Lin\AppData\Roaming\Typora\typora-user-images\image-20211108173501687.png)
如果不能输入,说明你的shell窗口不够小。
获得root权限,输入命令行,查找
find / -name "*flag*"
最后一行为final-flag.txt,
最后一个flag成功到手!