vulnhub|vulnhub DC2 靶场练习
前言 这次练习的靶机是vulnhub平台下的DC系列靶机第二台,下载地址为https://www.vulnhub.com/entry/dc-2,311/。该靶机的难度系数为简单,和DC1一样,总共有五个flag。这次虚拟机的配置采用更为简单的一种配置方法。
虚拟机配置 这次采用的网络连接模式依然是NAT模式,为了避免扫描到其他物理主机。在导入虚拟机后,右击DC-2靶机,然后选中配置。依次点击网络配置
->NAT模式
->高级
->生成
,然后确认即可。
文章图片
收集信息
nmap -sn --min-parallelism 200 --min-hostgroup 256 192.168.119.0/24
-sn 代表存活主机扫描,不进行端口测探。
–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。
–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。
更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。
文章图片
通过nmap寻找到靶机的地址为
192.168.119.127
。下面就对靶机更加详细的扫描。nmap -A -sV -p- --min-parallelism 200 192.168.119.127
-A 代表综合性扫描,能收集很多主要的信息
-sV 代表扫主要的服务信息
-p- 参数p是指定端口,后面的-
代表所有端口。
文章图片
扫描出了http服务与ssh服务,其中ssh服务的端口改成了
7744
。修改hosts文件 用浏览器打开网站,看看有什么web层面的漏洞没有。在浏览器地址栏输入
http://192.168.119.127
。文章图片
刚刚输入的是个IP,现在变成了域名,还有提示说不能建立到服务器dc-2的连接。这个应该在服务器上做了配置,将IP强制转换成域名,这种情况在实战中也会经常遇到,在一个服务器中有多个站点的情况下往往会禁止IP来访问服务器。这里无法访问网站的原因是DNS服务器无法解析这个域名,所以我们需要修改hosts文件内容,使域名
dc-2
对应IP 192.168.119.127
。域名解析的流程是:首先打开hosts文件:
更详细的内容可以参考:https://blog.csdn.net/yanshuanche3765/article/details/82589210,详解DNS域名解析全过程
- 首先浏览器会读取缓存中是否有指定域名对应的IP,如果有则解析结束。
- 如果缓存中没有读到指定域名,则在hosts文件中寻找有无指定的域名信息,如果有则解析结束。
- 如果hosts中没有则访问DNS服务器,在DNS服务器中寻找域名对应的IP。
vim /etc/hosts
【vulnhub|vulnhub DC2 靶场练习】然后写入:
192.168.119.127 dc-2
文章图片
保存并退出,然后在器地址栏输入
http://dc-2
即可打开网站了,注意是 http
,不是 https
。文章图片
获取线索 点击导航栏上的flag即可获取到flag1,并且有提示说:平时常用的字典可能会不起作用,你须用到cewl。cewl是一款密码字典生成工具,它可以从指定的网站爬取到关键词来生成特定的密码字典。
文章图片
下面我就就使用cewl爬取dc-2上的信息,生成一本密码字典。
cewl dc-2 -w wordlist.txt
文章图片
生成字典成功,下面我们就获取该网站上的用户名。 通过网页底部的文字
Proudly powered by WordPress
得知该网站是 WordPress
搭建而成。有一款工具 wpscan
是专门针对 WordPress
的渗透工具,下面我们就用wpscan来获取该网站上的用户名信息。 wpscan --url dc-2 -e u
-e 代表枚举,也就是列出指定参数的一些信息,u代表用户名,这命令的意思就是枚举所有用户名。
文章图片
wpsan一共获取了三个用户名,把这三个用户名写到文件
user.txt
中去,以准备暴力破解。wpscan --url dc-2 -U user.txt -P wordlist.txt
-U 指定用户名文件
-P 指定密码字典文件
文章图片
已经成功破解了
jerry
和 tom
的密码,分别为:adipiscing
,parturient
。接下来就登陆网站的后台。WordPress的默认后台登陆页面为 /wp-login.php
。登陆了tom没发现flag,最终在jerry的管理页面发现了flag2。
文章图片
打开这个flag2的连接,看看里面说了什么。
文章图片
提示的意思为:
如果你不能利用WordPress走捷径,还有另一种方法,希望你发现另一个入口
。利用WordPress走捷径的方法就是修改主题插件中的php文件,建立webshell,然后提权。这种方式在之前的靶机中有遇到过,这种方法可以参考我之前写的博文:https://blog.csdn.net/rpsate/article/details/119336355。这次我们就从另一条路径入手,另一条路径指定应该就是ssh了。
通过ssh连接靶机 用刚才获取的网站后台账号尝试登陆一下ssh,注意端口需要指定为7744(这个端口是前面用nmap扫描出来的)。
ssh tom@192.168.119.127 -p 7744
文章图片
jerry这个账号没有登陆成功,经过尝试tom登陆成功了。登陆的目录下发现了flag3,但是
cat
命令用不了,经过测试可以使用vi
读取该flag3。文章图片
绕过rbash 但是发现了tom使用的是rbash,也就是受限制的bash。rbash的功能非常少,所以我们要绕过rbash。这里绕过rbash有两种方法,下面分别介绍这两种方法的操作与原理。
利用vi绕过rbash
vi
:set shell=/bin/bash
:shell
export PATH=/bin:/usr/bin:$PATH
因为rbash中执行的命令不能带
/
,所以不能直接执行 /bin/bash
。刚好vi中有个命令shell
可以调用bash,但是该系统中shell默认是指向rbash的,所以我们要通过set使其指向 /bin/bash
,然后执行shell调用 /bin/bash
,这样就绕过了rbash。问:那如果vi不能用时,可不可以在rbash中用一个变量指向
/bin/bash
,然后再执行这个变量呢?命令如下:
MY_SHELL=/bin/bash
$MY_SHELL
答:不可以,因为该命令还是通过rbash调用,即使是将
/
藏在变量中,在执行的时候rbash还是会识别到 /
。vi能绕过是因为执行 /bin/bash
的是vi,而不是rbash。问:命令
export PATH=/bin:/usr/bin:$PATH
的作用是什么 在调用bash后只能使用简单的内置命令,更多比较复杂的外部命令是在 /tmp
和 /usr/tmp
这两个文件夹中的。指定 /tmp
和 /usr/tmp
为环境变量后,bash就自动在这两个目录里中寻找外部命令,而不用将命令的绝对路径写出来。所以这条命令只是让你执行命令更方便一点,例如:我需要执行whoami
命令,不设置环境变量需要输入 /usr/bin/whoami
才能执行,设置环境变量后输入 whoami
即可。问:什么是内置命令,什么是外部命令? 内置命令是和bash是一体的,在系统启动是就调入内存。而外部命令是以单独的文件存储在指定的目录中,在需要执行外部命令时,bash会在环境变量的目录中去寻找,找到后调用这个文件。注意:有一些命令同时会是内置命令和外部命令,这种情况下内置命令只有有简单的功能,如果要用到更多参数执行更复杂的功能就要调用外部命令。可以用
type -a
来查看是置命令还是外部命令。更多详细内容可参考:https://blog.csdn.net/hidengxin/article/details/84708090,理解Linux内置命令与外部命令问:外部命令通常存在哪些文件夹中,怎么分类存放的? 外部命令通常存放在
/sbin
,/bin
,/usr/bin
,/usr/sbin
这几个目录中。其中/sbin
存放的是超级用户指令,通常是系统管理必备的命令,通常只有root才能执行。/bin
存放系统常用指令,一般用户也能执行。/usr/bin
存放的是一些后期安装的运行脚本,/usr/sbin
存放的是用户安装的一些系统管理命令。更多详细内容可参考:https://blog.csdn.net/qq_28702545/article/details/52577796,/bin、/sbin、/usr/bin和/usr/sbin的简单区别利用BASH_CMDS绕过rbash
BASH_CMDS[A]=/bin/bash
A
export PATH=/bin:/usr/bin:$PATH
我在网上看了很多经验贴都有提到这几条命令就可绕过rbash的限制,但是没有看到有那个贴讲了原理。于是我在国外某个网站上查到了以下内容:
文章图片
在bash的内部有一个bash表,这个bash表中有
命令
->命令文件路径
这样的键值对。BASH_CMDS是bash的一个内置数组,该数组下标
对应命令
,值
对应命令文件路径
。当我们将/bin/bash
赋值给BASH_CMDS[A]
是,那么 A
就是一条命令,执行A命令就等于执行了 /bin/bash
。所以当你执行A命令是,rbash发现其中没有 /
,所以就会顺利的执行。同理我们也可以指定
ls
,whoami
等系统命令。当你执行 BASH_CMDS[ls]=/usr/bin/whoami
是,你再执行 ls
,你会惊奇的发现命令行出现的是用户名,而不是陈列出目录。但是要注意的是BASH_CMDS只能改变外部命令的对应关系,对内置命令是无能为力的。只使用rbash是用容易绕过的,如果与提权 通过find命令寻找具有s权限的文件,没有找到。用chroot
命令结合使用就会有比较强的限制作用,更多内容可以参考: https://blog.csdn.net/guodongsoft/article/details/52549573
sudo -l
查看可以用root权限执行的命令,发现sudo
不能用。也根据flag3的提示转换到jerry
用户试试,用之前在web中跑出来的密码尝试登陆该账号。su jerry
很顺利的切换到了jerry账号,也发现了
/home/jerry
目录下的flag4,提示git
?文章图片
还是尝试一下
find -perm -u=s -type f -exec ls -la {} \;
2>/dev/null
和 sudo -l
,这两条命令在前面的靶机中几乎每次都用到,前面讲解得很详细,这里就不做解释了。最终通过
sudo -l
发现了可以用root权限执行git
。文章图片
那我们可是使用git提权,因为在git中可以执行shell命令。我们用root权限执行git,然后用git调用
/bin/bash
即可获取一个拥有root权限的shell。sudo git help config
这条命令是查看关于配置文件的帮助文档,在查看文档的时候可以执行shell命令,用法与vi,more,less等命令类似。
!/bin/bash
!表示调用bash来执行shell命令。
文章图片
提权成功!获取最终flag。
cd /root
cat final-flag.txt
文章图片
总结 该文章重点讲解了绕过rbash的方法与原理。
简述了dns的流程与hosts文件的作用。
了解的cewl与wpscan的基本用法。
大家可以自己尝试一下通过WordPress的后台直接获取webshell,方法可以参考我之前的文章:https://blog.csdn.net/rpsate/article/details/119336355。参考文献 [1] https://blog.csdn.net/hidengxin/article/details/84708090,理解Linux内置命令与外部命令
[2] https://blog.csdn.net/guodongsoft/article/details/52549573,chroot命令
[3] https://blog.csdn.net/qq_28702545/article/details/52577796,/bin、/sbin、/usr/bin和/usr/sbin的简单区别
[4] https://blog.csdn.net/weixin_44288604/article/details/108032112,vulnhub之DC2靶机
[5] https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html,Bash Variables
[6] https://blog.csdn.net/yanshuanche3765/article/details/82589210,详解DNS域名解析全过程
推荐阅读
- Docker安装+靶场环境
- PentesterLab靶场-sql注入
- SwiftUI|SwiftUI Widget 基础使用wwdc2020(教程含代码)
- PiKachu靶场之PHP反序列化漏洞
- 苹果WWDC20线上发布,今夜是否会“无人入睡”()
- 利用Vulnhub复现漏洞 - JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
- 反序列化漏洞学习笔记+靶场实战
- HDC2021技术分论坛(“积木拼装”,HarmonyOS弹性部署大揭秘!)
- Vulnhub-DarkHole_1|Vulnhub-DarkHole_1 题解
- HDC2021技术分论坛(盘点分布式软总线数据传输技术中的黑科技)