vulhub DC-2靶场实战

一、前言:

    今天是我们的第三个靶场实战,靶场的下载地址为:DC: 2 ~ VulnHub,废话不多说,现在就开始我们的靶场实战吧。

二、开始动手

   老样子还是用我们的老工具nmap,输入以下命令

nmap -sn --min-parallelism 200 --min-hostgroup 256 192.168.79.0/24

-sn 代表存活主机扫描,不进行端口测探。

–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。

–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。

更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。

可以知道我们这边的存活主机是192.168.79.144

此时继续用我们的nmap进行探测

输入以下命令

nmap -A -sV -p- --min-parallelism 200 192.168.119.127

-A 代表综合性扫描,能收集很多主要的信息

-sV 代表扫主要的服务信息

-p- 参数p是指定端口,后面的-代表所有端口。

可以知道开通了http服务,以及ssh服务,并且端口改成了7744

输入我们靶机对应的ip地址,看看页面能否给我们一些信息

此时页面提示无法访问,并且输入的ip地址转化成了域名,还有提示说不能建立到服务器dc-2的连接。这个应该在服务器上做了配置,将IP强制转换成域名,这种情况在实战中也会经常遇到,在一个服务器中有多个站点的情况下往往会禁止IP来访问服务器。这里无法访问网站的原因是DNS服务器无法解析这个域名,所以我们需要修改hosts文件内容,使域名dc-2对应IP 192.168.119.127
 

域名解析的流程是:

首先浏览器会读取缓存中是否有指定域名对应的IP,如果有则解析结束。
如果缓存中没有读到指定域名,则在hosts文件中寻找有无指定的域名信息,如果有则解析结束。
如果hosts中没有则访问DNS服务器,在DNS服务器中寻找域名对应的IP。
更详细的内容可以参考:https://blog.csdn.net/yanshuanche3765/article/details/82589210,详解DNS域名解析全过程

如果我们使用的是windows系统,在C:\Windows\System32\drivers\etc下,Linux的host文件就在/etc/hosts,打开hosts文件,把“目标网址 dc-2”加上就可以正常访问了,这里我使用的是windows系统

打开我们的hosts文件,写入以下命令

此时就将我们的域名与ip地址相对应起来了

继续输入我们我们的IP地址,就可以得到正确的页面信息

点开页面上的flag,此时的到如下信息

1.flag1

得到了我们的第一个flag,将下面英文进行翻译后的中文意思是:平时常用的字典可能会不起作用,你须用到cewl。cewl是一款密码字典生成工具,它可以从指定的网站爬取到关键词来生成特定的密码字典。

根据提示信息,我们输入以下命令来生成一本密码字典

cewl dc-2 -w wordlist.txt

此时得到了许多数据

生成字典成功,下面我们就获取该网站上的用户名。 通过网页底部的文字 Proudly powered by WordPress得知该网站是 WordPress搭建而成。有一款工具 wpscan是专门针对 WordPress的渗透工具,下面我们就用wpscan来获取该网站上的用户名信息。

输入以下命令

wpsan --url dc-2 -e u

-e 代表枚举,也就是列出指定参数的一些信息,u代表用户名,这命令的意思就是枚举所有用户名。

此时获取到了3个用户名,将这三个用户名写到user.txt中,用来进行暴力破解

在桌面上新建一个user.txt的文档,存入这三个名字

wpscan --url dc-2 -U user.txt -P wordlist.txt

-U 指定用户名文件

-P 指定密码字典文件

可以看出tom和jerry的成功了,此时我们接下来就登陆网站的后台。WordPress的默认后台登陆页面为 /wp-login.php

tom这里并没有找到些有用的东西,输入jerry用户

最终在jerry用户这里找到了我们所需的flag2,点开这个flag2看看里面说了什么

2.flag2

这里的中文意思是:如果你不能利用WordPress走捷径,还有另一种方法,希望你发现另一个入口

我这里查了一下WordPress的捷径应该是修改主题插件中的php文件,建立webshell,然后提权,这个我不是特别懂,只能用第二个路口了,应该就是我们先前发现的ssh

此时尝试进行ssh登录,输入tom以及密码,此时成功进入

在这个目录下找到了flag3,但是cat命令用不了,并且发现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存放的是用户安装的一些系统管理命令。

更多详细内容可参考:/bin、/sbin、/usr/bin和/usr/sbin的简单区别_李过饰非的博客-CSDN博客,/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只能改变外部命令的对应关系,对内置命令是无能为力的。

3.flag3

此时输入我们的第二种方法,发现cat命令可以用了,并且也成功得到了flag3

提权

通过find命令寻找具有s权限的文件,没有找到。用 sudo -l查看可以用root权限执行的命令,发现sudo不能用。也根据flag3的提示转换到jerry用户试试,用之前在web中跑出来的密码尝试登陆该账号。

输入以下命令

su jerry

此时我们成功切换到了jerry用户

4.flag4

很好,我们已经找到了我们的flag4

最后一步,我们就差flag5了,根据先前的经验还是用我们的suid进行提权,原理就不多阐述了,大家可以翻看我先前的博客

输入以下命令

find -perm -u=s -type f -exec ls -la {} \; 2>/dev/null

发现并没有可以提权的命令可以使用

尝试使用sudo -l

这边提示我们可以使用git进行一个提权,因为在git中可以执行shell命令。我们用root权限执行git,然后用git调用 /bin/bash即可获取一个拥有root权限的shell。

sudo git help config

这条命令是查看关于配置文件的帮助文档,在查看文档的时候可以执行shell命令,用法与vi,more,less等命令类似

!/bin/bash

!表示调用bash来执行shell命令

终于提权成功了!!

获取我们最后一个flag

5.the-finalflag.txt

三、总结

哇,这个靶场相比与dc-1难度又高了很多,但是也学到了好多新知识,我们最重要的是在这个里面看看有没有一些新的收获,还要感谢我的小伙伴,阿波,真的大佬,加油网安人!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值