渗透测试综合靶场 DC-2 通关详解

news/2024/9/19 12:45:02/ 标签: ubuntu, linux, 运维
一、准备阶段

准备工具如Kali Linux,下载并设置DC-2靶场机。确保攻击机和靶机在同一网络段,通常设置为桥接模式或NAT模式。

1.1 靶机描述 
Much like DC-1, DC-2 is another purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing.
As with the original DC-1, it's designed with beginners in mind.
Linux skills and familiarity with the Linux command line are a must, as is some experience with basic penetration testing tools.
Just like with DC-1, there are five flags including the final flag.
And again, just like with DC-1, the flags are important for beginners, but not so important for those who have experience.
In short, the only flag that really counts, is the final flag.
For beginners, Google is your friend. Well, apart from all the privacy concerns etc etc.
I haven't explored all the ways to achieve root, as I scrapped the previous version I had been working on, and started completely fresh apart from the base OS install.就像DC-1一样,DC-2是另一个特意构建的易受攻击的实验室,目的是在渗透测试的世界中获得经验。
和原始的DC-1一样,它也是为初学者设计的。
必须具备Linux技能和熟悉Linux命令行,以及一些基本渗透测试工具的经验。
就像DC-1一样,这里也有五个标志,包括最终的标志。
同样,就像DC-1一样,对于初学者来说,这些标志很重要,但对于有经验的人则不那么重要。
简而言之,唯一真正重要的标志,是最终的标志。
对于初学者来说,谷歌是你的朋友。嗯,除了所有的隐私问题等等。
我没有探索所有实现root的方法,因为我放弃了我之前一直在做的版本,并从基础操作系统安装开始完全重新开始了。

和DC-1一样,下载好DC-2的虚拟文件后倒入VM虚拟机,并设置为NAT模式。

这里不会的可以参照本专栏的上篇文章。

二、靶场渗透

DC-2是一个为渗透测试初学者设计的脆弱实验室,它包含了多个flag,但只有最终的flag才是最重要的。以下是对DC-2靶场渗透的步骤总结:

  • 环境搭建:首先需要下载DC-2靶场环境,可以通过Vulnhub网站获取。下载后,使用虚拟机软件如VMware导入,并设置网络模式为NAT。
  • 信息收集:使用工具如nmap进行端口扫描,确定靶机的IP地址和开放的端口。例如,使用nmap -sP 192.168.233.0/24来探测活动主机,然后使用nmap -A -p- -v 192.168.233.178来探测开放的端口和服务。
  • 访问Web站点:访问靶机的Web服务,可能会发现需要添加域名解析到hosts文件,以便能够通过域名访问靶机。
  • 发现flag1:在Web站点的某个部分,可能会直接找到flag1,或者需要根据提示使用特定工具(如cewl)来生成密码字典。
  • 用户名枚举与密码爆破:使用wpscan工具枚举WordPress站点的用户名,然后使用生成的密码字典进行爆破,可能会发现如admin, jerry, tom等用户名。
  • SSH登录:使用爆破出的用户名和密码尝试SSH登录,可能会发现某个用户(如tom)可以成功登录。
  • rbash限制绕过:登录后可能会遇到受限的shell(rbash),需要使用特定的技巧来绕过限制,例如使用BASH_CMDS[su]=/bin/sh;a或者修改环境变量来执行命令。
  • 提权:在成功绕过rbash限制后,可以尝试提权。可能会发现用户有sudo权限可以无密码执行某些命令,如git,可以利用这一点进行提权。
  • 发现final-flag:提权后,可以搜索并获取最终的flag文件。
2.1 信息收集
2.1.1 发现靶机真实IP

和DC-1差不多,我们在一开始没有任何信息,所以需要我们先挖掘真实IP,以便我们能继续进行其他操作如远程连接或提权等。

使用nmap工具发现在同一网段下的其他IP地址,根据排除法我们知道DC-2的IP应该是172.16.130.175

因为本机IP为172.16.130.134;172.16.130.1是网卡;172.16.130.2是网关

2.1.2 探测端口及服务

使用命令探测开放的端口:

nmap -sV -p- [你要探测的IP]
或
nmap -A -p- -v [你要探测的IP]


两条命令功能类似,只不过一个直接简洁明了的给出我们开放端口,另一个给出我们更加详细的描述而已。

根据上图,我们可以看出他给出了DC-2开放了两个端口,80默认端口和7744端口。

2.1.3 网站配置

此时,我们输入DC-2的IP进行访问,发现无法访问,且IP地址自动被转换为了域名!由此我们可以想到:dc-2这个域名解析失败,我们需要更改hosts文件添加一个ip域名指向。

hosts文件是一个系统文件,它将网络主机名映射到IP地址。当你的计算机尝试访问一个域名时,系统会首先检查hosts文件以确定是否能找到对应的IP地址。如果没有找到,系统才会继续查询DNS服务器。

如果你害怕此次的实验会对之后虚拟机的 使用产生影响,那么你可以在修改之前提前拍摄一张快照,或者之后将对应域名再从hosts文件中删除也可以。

hosts文件通常位于以下位置:

  • 在Windows系统中,hosts文件通常位于C:\Windows\System32\drivers\etc\目录下。
  • 在Linux和macOS系统中,hosts文件通常位于/etc/hosts目录下。

hosts文件的格式通常如下:

# 这是一个注释
127.0.0.1       localhost
# 以下行是映射某个域名到特定IP地址的例子
192.168.1.100   example.com

在 Kali Linux(或任何类 Unix 系统)中,hosts 文件是一个用于将主机名映射到 IP 地址的文件。它位于 /etc/ 目录下。默认情况下,只有 root 用户或具有适当权限的用户才能编辑此文件。

要编辑 hosts 文件,你可以使用任何文本编辑器,如 nanovigedit(如果已安装)。在此,我以vim编辑器举例:

sudo vim /etc/hosts

添加成功后保存退出,再次访问网站,发现这次可以解析了。

在网站中随便点点,拿下flag1

Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.More passwords is always better, but sometimes you just can’t win them all.Log in as one to see the next flag.If you can’t find it, log in as another.你通常的密码列表可能不管用,所以相反,你可能只需要使用 cewl。更多的密码总是更好的,但有时候你就是赢不了它们全部。作为其中一个登录就可以看到下一个标志。如果你找不到,尝试作为另一个登录。

大致意思就是叫我们暴力破解账号密码

2.1.4 目录扫描

我们可以使用dirb命令进行目录扫描,看看网站下有什么东西

dirb http://dc-2/

在这其中有许多后台地址,但似乎没什么有用的东西


2.1.5 用户名枚举

既然如此,那么我们就从另外一个角度下手,从页面可以看出,这是一个wordpress站,我们采用专门针对wordpress的工具wpscan来进行扫描。

Wpscan 枚举,cewl 生成字典,爆破获取密码:

从页面信息中可以知道,此页面是 wordpress 为框架开发的 cms系统,WordPress 是一个免费的开源内容管理系统,用PHP 编写,并与 MySQL 或 MariaDB 数据库配对。功能包括插件架构和模板系统。cewl 是一个网页关键字抓取工具,cewl 是一个 kali 自带的密码生成工具,WordPress 有一个 kali 自带扫描工具 wpscan 可以爆破网站的用户名,可以用关键字作为密码继续进行爆破。

爬取网站生成字典的常用工具:cewl

cewl简介

cewl 是一个 ruby 应用,爬行指定 url 的指定深度。也可以跟一个外部链接,结果会返回一个字典,这个字典可以传给其他工具进行密码暴力破解,kali中自带cewl。

现在,我们来试着使用cewl生成密码,这样,我们就生成了一个字典文件:

cewl -w dc2_passwords.txt http://dc-2	//生成字典

Wpscan简介

WPScan 是一款专门针对 WordPress 网站进行安全漏洞扫描的工具,它能够检测包括 WordPress 核心、插件和主题在内的多种安全问题。这款工具对于安全研究人员和网站维护者来说非常有用,可以帮助他们发现并修复潜在的安全威胁。

使用 WPScan 时,你可以通过不同的参数来定制扫描任务,例如:

  • --url 或 -u:指定要扫描的 WordPress 网站的 URL。
  • --enumerate 或 -e:枚举信息,如插件、主题和用户信息。
  • --api-token:提供 API 令牌以获取漏洞数据库的访问权限,这对于显示与检测到的插件或主题相关的已知漏洞信息是必要的。
wpscan --url http://dc-2
wpscan --url http://dc-2 --enumerate t 扫描主题
wpscan --url http://dc-2 --enumerate p 扫描插件
wpscan --url http://dc-2 --enumerate u 枚举用户

首先我们使用wpscan来扫描一下wordpress版本

wpscan --url http://dc-2


通过扫描我们可以发现wordpress的版本为4.7.10

wpscan还可以用来枚举用户,再尝试利用枚举到的用户爆破密码

wpscan --url http://dc-2 --enumerate u

通过爆破,我们得到了三个用户名:admin、jerry、tom

2.1.6 暴力破解密码

完成上述准备步骤后,我们可以根据flag1给我们的提示来进行暴力破解密码了

已知我们之前使用cewl生成了一个字典

现在我们来使用wpscan进行暴力破解:

wpscan --url http://dc-2 --passwords [你的字典]


可以看到,wpscan会用最原始的方法进行暴力破解,最终爆破出来两个账号的密码:jerry和tom

那么,我们尝试使用他们登陆站点,成功登陆,随便翻找一下,发现flag2


If you can't exploit WordPress and take a shortcut, there is another way.Hope you found another entry point.如果你不能利用 WordPress 并采取捷径,还有另一种方法。希望你找到了另一个入口点。

由此信息,我们想到之前还发现了ssh(7744端口),现在让我们来试试。

2.1.7 登陆ssh

分别使用tom和jerry的密码进行远程登录,发现jerry无法正常登陆,那我们先使用tom的账号登陆ssh:

ssh tom@172.16.130.175 -p 7744

输入密码后成功连接

在tom的家目录中,我们发现了flag3,但是无法使用cat直接查看,我这里选择使用vi来查看,当然你也可以选择反弹shell


oor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
可怜的老汤姆总是在追杰瑞。也许他应该为他所造成的所有压力使用 su(切换用户)命令。这里的 "su" 是指在 Linux 系统中使用超级用户(超级管理员)权限来执行命令

这提示我们,或许该采用一些权限更高的权限来执行命令

2.2 用户切换、权限提升
2.2.1 rbash绕过

在 Linux 系统中,rbash(restricted bash)是一种限制性的 shell 环境,它限制了用户执行某些命令和操作的能力。这通常用于提高安全性,防止用户执行可能对系统造成危害的命令。然而,在渗透测试或系统管理中,有时需要绕过这些限制来执行必要的操作。

在flag3中提示我们需要提权,但无法直接使用su命令提权到jerry,现在我来尝试rbash绕过,查看一下可以使用的命令:

echo $PATH

想cd到目录下,但系统拒绝了,那么我们先列出目录下的内容

我们无法切换目录往往是因为权限不够,那我们现在尝试使用echo来绕过rbash:

BASH_CMDS[a]=/bin/sh;a
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
echo /*

这段代码是用来在受限的 shell 环境中(如 rbash)绕过一些限制,以执行非限制性命令的技巧。下面是每行代码的解释:

  1. BASH_CMDS[a]=/bin/sh;a

    • BASH_CMDS 是一个环境变量,通常在 rbash 环境中用来定义允许执行的命令列表。
    • 这行代码将 /bin/sh 添加到 BASH_CMDS 环境变量中,使得 sh 命令可以被执行。
    • a 是一个变量,这里将其赋值为 /bin/sh,然后在命令的末尾调用它(a),从而执行 /bin/sh
  2. export PATH=$PATH:/bin/

    • 这行代码将 /bin/ 目录添加到当前用户的 PATH 环境变量中。
    • PATH 环境变量定义了系统在哪些目录中查找可执行文件。
    • 通过添加 /bin/ 到 PATH,用户可以尝试执行 /bin 目录下的任何命令,即使这些命令在 rbash 中通常是被限制的。
  3. export PATH=$PATH:/usr/bin

    • 类似于上一行,这行代码将 /usr/bin 目录也添加到 PATH 环境变量中。
    • /usr/bin 是另一个包含许多系统命令的目录,这样做可以进一步增加可执行命令的范围。
  4. echo /*

    • 这行代码看起来像是一个示例或测试命令,它的作用是打印出根目录(/)下的所有文件和目录名称。
    • 在 rbash 中,如果限制了对 ls 命令的使用,这个命令可以作为一个替代方法来列出目录内容。

这段代码的目的是为了在受限的 shell 环境中获取更多的自由度,以便能够执行更多的命令

现在我们有了权限,再来看看jerry目录下的内容


成功拿到flag4

Good to see that you've made it this far - but you're not home yet. You still need to get the final flag (the only flag that really counts!!!).  No hints here - you're on your own now.  :-)Go on - git outta here!!!!
很高兴看到你已经走到了这一步 - 但你还没有到家。你仍然需要获取最终的标志(唯一真正重要的标志!!!)。这里没有提示 - 你现在只能靠自己了。:-)继续吧 - 赶紧离开这里!!!

没什么提示,接下来就要靠我们自己了。

2.2.2 git提权

猜想我们需要提权才能获取到最终的flag,我们试着使用git来提权。

在已经在tom账户下绕过rbash的前提下,我们重新使用su切换用户,来到jerry用户。

查看一下jerry是否可以使用git:

sudo -l

可以看到,无需root权限,jerry可以使用git。

那么,现在我们就来使用git命令进行提权,输入下面命令:

sudo git help status

输入!/bin/sh,直接输入即可

现在,我们成功拿到了root权限!

三、总结

DC-2与DC-1的渗透步骤有一些相似之处,但也存在一些区别。以下是DC-2渗透步骤与DC-1的区别:

  1. 靶机发现与IP解析

    • DC-2:发现靶机真实IP后,需要修改hosts文件以解析域名到IP地址,因为直接访问IP时域名解析失败。
    • DC-1:没有提到需要修改hosts文件,直接通过IP进行渗透测试。
  2. 端口探测

    • DC-2:探测到除了常见的80端口外,还有一个7744端口开放。
    • DC-1:主要提到了22和80端口,没有提到7744端口。
  3. 网站配置与访问

    • DC-2:需要修改hosts文件后才能访问网站,且网站是基于WordPress的。
    • DC-1:直接通过IP访问Drupal网站,没有提到需要修改hosts文件。
  4. 目录扫描与用户枚举

    • DC-2:使用dirb进行目录扫描,使用wpscan进行WordPress站点的用户枚举。
    • DC-1:没有提到使用dirb或wpscan,而是直接利用Drupal的已知漏洞进行攻击。
  5. 密码破解

    • DC-2:使用wpscan结合cewl生成的字典文件对WordPress用户进行密码破解。
    • DC-1:没有提到使用cewl生成字典文件,而是直接利用已知漏洞获取shell。
  6. SSH登录与用户提权

    • DC-2:使用破解得到的用户名和密码尝试SSH登录,并在受限的rbash环境中尝试提权。
    • DC-1:SSH登录和提权过程没有详细描述,主要关注于Drupal漏洞的利用。
  7. 提权技术

    • DC-2:尝试使用rbash绕过和git提权技术来获取更高权限。
    • DC-1:提权过程主要关注于SUID提权。
  8. 最终提权与获取flag

    • DC-2:通过SSH登录、rbash绕过、git提权等步骤最终获取root权限,并找到flag。
    • DC-1:通过SUID提权和数据库操作来获取flag。

http://www.ppmy.cn/news/1527645.html

相关文章

Flutter - Win32程序是如何执行main函数

Win32程序的主体结构 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,_In_ wchar_t *command_line, _In_ int show_command) {// Attach to console when present (e.g., flutter run) or create a// new console when running with a debugger.if …

软件编程随想

已经做了16年左右的软件开发,从最初的Delphi开发,到后来的Web开发(.net)再到Java Web(Spring MCV,SpringBoot)开发,以后Python,NodeJS等开发,做了这么多年,全部是以解决单…

C++ 元编程

目录 C 元编程1. 术语2. 元函数1. 数值元函数示例:阶乘计算 2. 类型元函数示例:类型选择 3. 混合编程1. 常规的计算点积范例2. 混合元编程计算点积 4. typelist实现设计和基本操作接口(算法)完整代码 5. tuple 实现基础知识1. 左值…

HTML讲解(一)body部分

目录 1.什么是HTML 2.HTML基本框架 3.标题声明 4.修改标题位置 5.段落声明 6.修改段落位置 7.超链接访问 8.图像访问 9.改变网页背景及文本颜色 10.添加网页背景图 11.超链接改变颜色 12.设置网页边距 小心!VS2022不可直接接触,否则&#xff…

Linux文件IO(一)-open使用详解

在 Linux 系统中要操作一个文件,需要先打开该文件,得到文件描述符,然后再对文件进行相应的读写操作(或其他操作),最后在关闭该文件;open 函数用于打开文件,当然除了打开已经存在的文…

最新EmlogPro影视主题模版/简约暗黑纯净Mould主题模板/博客网站源码

源码简介: 最新EmlogPro影视主题模版,它是一个简约暗黑纯净Mould主题模板,也能做博客网站源码。 Mould这个主题模板啊,真的是设计得特别有感觉。它的布局和设计都超级流畅,用起来特别直观,简单多了。不管是…

c++206 友元类

#include<iostream> using namespace std; class A { public://声明的位置 和public private无关friend void modifyA(A* pA, int _a);//函数modifyA是A的好朋友A(int a, int b){this->a a;this->b b;}int getA(){return this->a;} private:int a;int b; };vo…

力扣题解2332

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;​&#xff1a; 坐上公交的最晚时间 给你一个下标从 0 开始长度为 n 的整数数组 buses &#xff0c;其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一…

Spring Boot-Session管理问题

Spring Boot 中的 Session 管理问题及其解决方案 1. 引言 在 Spring Boot Web 应用中&#xff0c;Session 是用来维护用户状态的重要机制。由于 HTTP 协议本质上是无状态的&#xff0c;Session 提供了一种方式来存储和共享用户的会话数据。Spring Boot 提供了多种方式来管理 …

SpringMVC后续4

文件上传下载 导入maven <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.2</version></dependency> 配置MultipartResolver <bean id"multipartRes…

PointNet2(一)分类

发现PVN3D中使用到了pointnet2和 densfusion等网络&#xff0c;为了看懂pvn3d&#xff0c;因此得看看pointnet2&#xff0c;然而带cpp&#xff0c;cu文件的程序一时办事编译不成功&#xff0c;因此找到了一个 Pointnet_Pointnet2_pytorch-master&#xff0c;里面有pointnet和po…

孙怡带你深度学习(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader&#xff08;数据加载器&#xff09;4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

java-springboot 实现文件 图片的上传 以及渲染

在 Java Spring Boot 应用中实现文件和图片的上传以及渲染&#xff0c;通常涉及以下几个步骤&#xff1a; 配置文件上传&#xff1a;使用 Spring Boot 的 MultipartResolver 来配置文件上传。 创建上传接口&#xff1a;创建一个 REST 控制器来处理上传请求。 保存文件到服务器&…

C#基础(14)冒泡排序

前言 其实到上一节结构体我们就已经将c#的基础知识点大概讲完&#xff0c;接下来我们会讲解一些关于算法相关的东西。 我们一样来问一下gpt吧&#xff1a; Q:解释算法 A: 算法是一组有序的逻辑步骤&#xff0c;用于解决特定问题或执行特定任务。它可以是一个计算过程、一个…

linux-Shell 编程-常用 Shell 脚本技巧

Linux Shell 编程&#xff1a;常用 Shell 脚本技巧 一、概述 Shell 脚本是 Linux 系统管理员和开发人员日常自动化任务的重要工具。通过编写 Shell 脚本&#xff0c;用户可以自动化重复性工作、简化系统维护、管理服务器资源等。Shell 脚本的强大之处在于其简洁和灵活性&…

手势识别-Yolov5模型-自制数据集训练

1、源码下载&#xff1a; 大家可以直接在浏览器搜索yolov5即可找到官方链接&#xff0c;跳转进github进行下载&#xff1a; 这里对yolov5模型补充说明一下&#xff0c;它是存在较多版本的&#xff0c;具体信息可在master->tags中查看&#xff0c;大家根据需要下载。这些不同…

Golang如何优雅的退出程序

Golang如何优雅的退出程序 在 Go 中优雅地退出程序&#xff0c;通常需要处理一些清理工作&#xff0c;如关闭文件、网络连接、释放资源等。以下是一些常见的方法&#xff1a; 一、使用 os.Signal 和 signal.Notify 捕获系统信号&#xff1a;可以使用 os/signal 包来捕获中断…

Android中如何处理运行时权限?

在Android中&#xff0c;处理运行时权限是开发过程中一个至关重要的环节&#xff0c;它自Android 6.0&#xff08;API级别23&#xff09;引入&#xff0c;旨在提高用户隐私保护和应用的透明度。以下将详细阐述Android中处理运行时权限的方法、步骤、注意事项以及相关的最佳实践…

最优化理论与自动驾驶(十一):基于iLQR的自动驾驶轨迹跟踪算法(c++和python版本)

最优化理论与自动驾驶&#xff08;四&#xff09;&#xff1a;iLQR原理、公式及代码演示 之前的章节我们介绍过&#xff0c;iLQR&#xff08;迭代线性二次调节器&#xff09;是一种用于求解非线性系统最优控制最优控制最优控制和规划问题的算法。本章节介绍采用iLQR算法对设定…

使用阿里OCR身份证识别

1、开通服务 免费试用 2、获取accesskay AccessKeyId和AccessKeySecret 要同时复制保存下来 因为后面好像看不AccessKeySecret了 3.Api 参考 https://help.aliyun.com/zh/ocr/developer-reference/api-ocr-api-2021-07-07-recognizeidcard?spma2c4g.11186623.0.0.7a9f4b1e5C…