【渗透实例】HTB:seventeen 困难模式
2022-10-6 11:25:21 Author: moonsec(查看原文) 阅读量:21 收藏

HTB:seventeen

1信息收集

端口扫描

使用nmap扫描之后,发现22,80,8000端口开放。

基于OpenSSH和Apache版本,主机可能运行的是 Ubuntu 18.04 

访问80端口,该网站适用于教育类型的公司:

目录爆破

使用feroxbuster工具对其目录进行爆破。

没找到有用的东西。

子域名枚举

使用wfuzz对主域名进行子域名探测,发现存在exam子域。

访问子域名。发现该站点是托管考试管理系统。

单击“admin”链接转到/admin/login.php,它只是弹出一个消息框:

继续对子域名的目录进行探测。

2漏洞利用

SQL注入漏洞

使用searchsplouit搜索历史漏洞。

通过历史漏洞搜索,发现其payload:poc=take_exam&id=1' AND 4755=4755 AND 'VHNu'='VHNu

经过测试之后,发现该版本还存在sql注入。

使用sqlmap枚举数据库

首先判断注入点。用法:sqlmap -u'http://exam.seventeen.htb/?p=take_exam&id=1'-p id --technique B --batch

接下来,使用--dbs列出数据库。

列出数据库里面的表。

接着读出表里面的用户。

在表里面,发现都指导了这个../oldmanagement/files/文件目录。

访问一下试试,发现是一个登录框。

接着继续读数据库里面的表。发现存在user表。

然后读里面的内容。发现了一些登录用户。

继续读下去。

密码解密

可以使用CrackStation:https://crackstation.net/来进行解密

或者使用somd5解密。密码为:autodestruction

使用id和密码成功登录进行。

3命令执行漏洞

发现是一个上传界面。我上传了一个php木马。

里面有一个pdf,看看里面有什么东西可以利用。是一份成绩单。

在里面发现了一个新的域名。

添加到/etc/hosts,然后访问看看。

查看版本信息

访问/CHANGELOG可以判断其版本,或者使用f12查看。

源代码分析

下载源代码,对其进行代码审计一下看看下载处的代码逻辑。

download.php很简单:

storage它从数据库的表中获取一行,并从结果中获取文件名。它返回readfile(files/[stud_no]/[filename])。

所以它应该在/var/www/oldmanagement/files/31234/0xdf.php.需要一个目录来放在我的上传文件旁边。download.php使用store_id获取路径,但也许我可以/files/31234直接访问

在这个文件夹中运行feroxbuster找到一个papers目录!

访问之后,发现提示报错。

首先上传一个php文件,然后将文件名更改为.htaccess

getshell

然后访问上传的php木马文件,成功getshell。

使用script /dev/null -c bash进行外壳升级

4主机信息收集

继续翻一下,机器里面的这些文件,找一些有用的东西。

发现数据库的登录密码。

$dBUsername = "root";

$dbPassword = "2020bestyearofmylife";

在mastermailer/config/config.inc.php我会找到这个连接字符串。

在oldmanagement/admin/conn.php另一个连接中,也含有一些信息。

ssh登录

使用上面获取到的登录密码进行登录。

获取user.txt

登录之后,发现存在user.txt

使用ls -la 判断当前用户的权限。

邮件提示

发现一个邮件,有 kavi 的邮件/var/mail:

邮件提到了一个新项目、一个私有注册表(有一些问题)和一个旧记录器被替换为loglevel(一个公开可用的 JavaScript记录应用程序)

查看监听端口,有一堆东西只在 localhost 上监听:

通过一些研究,我可以将其余这些端口分为:

Roundcube 的邮件服务器 - 110、143、993、995

用于各种网络服务器的 MySQL - 3306

域名系统 - 53

网站转发到 Docker - 8081 (exams), 8082 (oldmanager)

未知 - 4873,但在.npm上面的文件夹中引用。

老记录器

该电子邮件提到了“旧记录器”,并提升了“注册表”。

然后使用npm在本地注册表中搜索哪些日志记录模块。

运行npm install并将其指向本地存储库

将其下载到当前目录,从而创建一个node_modules目录。在那里,我看到了一堆模块,包括db-logger:

文件分析

该模块由一个 JavaScript 文件和一个package.json

该package.json文件描述了该模块

在js文件里面翻到了登录密码。

var mysql = require('mysql');

var con = mysql.createConnection({

  host: "localhost",

  user: "root",

  password: "IhateMathematics123#",

  database: "logger"

});

function log(msg) {

    con.connect(function(err) {

        if (err) throw err;

        var date = Date();

        var sql = `INSERT INTO logs (time, msg) VALUES (${date}, ${msg});`;

        con.query(sql, function (err, result) {

        if (err) throw err;

        console.log("[+] Logged");

        });

    });

};

module.exports.log = log

继续使用ssh进行登录。、

使用ls -la 查看有那些文件。

有一个.npmrc文件,它配置如何npm运行,将默认注册表设置为本地注册表:

5权限提升

kavi 用户也可以访问/opt/app

创建模块步骤:https://docs.npmjs.com/creating-node-js-modules

恶意的js模块

使用npm login,发现是注册被禁用。

我在上面注意到有一个.npmrc文件/home/kavi设置了这个用户使用的存储库。我将尝试将其更改为指向我的主机,然后让 Verdaccio 的实例在那里提供恶意程序包。

创建节点模块。

创建一个loglevl目录,然后使用npm init 开始本地的模块

创建一个loglevel目录,然后编辑index.js文件。

本地搭建

使用docker,本地搭建节点模块

注册模块

运行docker pull verdaccio/verdaccio(以 root 身份、使用sudo或使用我的用户在docker组中)以获取容器映像的副本。

发布模块

设置.npmrc文件

运行文件

运行脚本,sudo /opt/app/startup.sh 

成功获得shell。

获取root.txt

6总结

首先通过信息收集中的常规操作,先端口扫描,然后继续目录爆破,接着子域名枚举。发现一个登录页面,通过历史漏洞搜索,发现其存在sql注入漏洞,然后使用sqlmap枚举数据库。接着登录之后,发现可以上传文件,上传之后进行命令执行,命令执行获取shell之后,进行主机信息收集,搜索一些登录信息,然后ssh远程登录。登录之后,获取user.txt,接着发现一封邮件,然后根据提示,发现了node.js模块,然后进行恶意js的模块利用进行权限提升,接着获取root.txt。该靶机为困难模式的靶机,在gethsll的时候,有2种方法,权限提升到最高权限有3种方法。

7关注公众号

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMjc0NTEzMw==&mid=2653583606&idx=1&sn=23e9d39c367f50b4996e079e43bcf5d2&chksm=811b6eb4b66ce7a2f390dd8677deb5c0a6f1cf4a4fa23e3252d6f36dc8d302cfabe71ff5563b#rd
如有侵权请联系:admin#unsafe.sh