freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

实战打靶之seventeen
2022-10-21 11:01:08
所属地 北京

信息收集

端口扫描

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

1666621777_6356a151def009e289547.png!small?1666621778614

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

1666621788_6356a15c8dda92b6c187f.png!small?1666621789182

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

1666621797_6356a165a188bf6bcdc52.png!small?1666621798783

目录爆破

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

1666621806_6356a16ea1cec4d2c0f16.png!small?1666621807185

没找到有用的东西。

1666621817_6356a179168f8fe9539a5.png!small?1666621817811

子域名枚举

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

1666621826_6356a18251b3b14dec85e.png!small?1666621826866

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

1666621834_6356a18a0c3eb49e29aa8.png!small?1666621834636

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

1666621843_6356a193792abc8a39fd1.png!small?1666621843849

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

1666621860_6356a1a454d5a06854c73.png!small?1666621860990

漏洞利用

SQL注入漏洞

使用searchsplouit搜索历史漏洞。

1666621871_6356a1af28d9a57ce32b2.png!small?1666621871569

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

1666621884_6356a1bc4d74c39081d5a.png!small?1666621884883

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

1666621893_6356a1c56d1f276be75e5.png!small?1666621893828

使用sqlmap枚举数据库

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

1666621910_6356a1d64225be7f7bd49.png!small?1666621910812

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

1666621920_6356a1e03d3f1a06b0d26.png!small?1666621920778

列出数据库里面的表。

1666621932_6356a1ec821ce6b1aa596.png!small?1666621933304

接着读出表里面的用户。

1666621939_6356a1f3f235c460c1fb3.png!small?1666621940737

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

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

1666621946_6356a1faaa96717c495de.png!small?1666621947113

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

1666621953_6356a201d94c5eed2b3ab.png!small?1666621954425

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

1666621962_6356a20a3d530eb0a1a1e.png!small?1666621962893

继续读下去。

1666621971_6356a2134aff60d603f30.png!small?16666219718191666621978_6356a21ae730bd0a67d9c.png!small?1666621979467

密码解密

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

1666622006_6356a23674d24345f6676.png!small?1666622007141

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

1666622012_6356a23c1a6de5e70d6ee.png!small?1666622012595

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


命令执行漏洞

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

1666622023_6356a2472ab68c66d900d.png!small?1666622023771

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

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

1666622032_6356a250911c2c9e73517.png!small?1666622033048

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

1666622040_6356a2583b259745785c1.png!small?1666622040691

查看版本信息

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

1666622056_6356a2685e947d7942cdb.png!small?1666622057073

源代码分析

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

1666622066_6356a2725d5229f8d208f.png!small?1666622066852

download.php很简单:

1666622077_6356a27d3e47444b3b580.png!small?1666622077809

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

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

1666622086_6356a28693bbc8468eea7.png!small?1666622087360

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

1666622094_6356a28e65288b9e25252.png!small?1666622095129

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

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

1666622102_6356a296276cb344305fc.png!small?1666622102510

getshell

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

1666622110_6356a29e2bf303c2b1b08.png!small?1666622110586

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

1666622116_6356a2a4f0f47498737a9.png!small?1666622117680

主机信息收集

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

1666622128_6356a2b05d5d9b30e7c35.png!small?1666622128777

发现数据库的登录密码。

$dBUsername = "root";

$dbPassword = "2020bestyearofmylife";

1666622137_6356a2b91f3cc439fa0ad.png!small?1666622137639

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

1666622145_6356a2c146f31a0f1e696.png!small?1666622146165

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

1666622152_6356a2c84a58570d985fb.png!small?1666622152860

ssh登录

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

1666622160_6356a2d0daf5b5fe1023a.png!small?1666622161482

获取user.txt

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

1666622167_6356a2d73dea0ecd2c863.png!small?1666622167771

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

1666622175_6356a2df0d1d973650a90.png!small?1666622175607

邮件提示

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

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

1666622182_6356a2e6bd0774748da21.png!small?1666622183349

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

1666622189_6356a2ed521e2f0c8ba18.png!small?1666622189877

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

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

老记录器

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

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

1666622198_6356a2f64c2efc69478e5.png!small?1666622198902

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

1666622207_6356a2ff6493b1afd229c.png!small?1666622208102

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

1666622213_6356a305e7dbb11513be8.png!small?1666622214669

文件分析

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

1666622221_6356a30d0346340f869bf.png!small?1666622221487

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

1666622227_6356a313c4549c0e6c77c.png!small?1666622228338

在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 查看有那些文件。

1666622239_6356a31f62e071b6378b0.png!small?1666622239947

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

1666622247_6356a3271ee2ab7aaa1f4.png!small?1666622247782

权限提升

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

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

1666622255_6356a32fe162100538395.png!small?1666622256466

恶意的js模块

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

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

1666622264_6356a3389cfea8722684b.png!small?1666622265177

创建节点模块。

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

1666622272_6356a3409f320514379d1.png!small?1666622273161

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

1666622279_6356a3479a57dc6c95d41.png!small?1666622280085

本地搭建

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

1666622286_6356a34e186d57db9bd2a.png!small?1666622286555

注册模块

1666622294_6356a3565f479438b42ad.png!small?1666622294855

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

发布模块

1666622301_6356a35d498f5396a2929.png!small?1666622302012

设置.npmrc文件

1666622307_6356a363a212292d01c5d.png!small?1666622308103

运行文件

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

1666622314_6356a36a22fd61addb52f.png!small?1666622314633

成功获得shell。

获取root.txt

1666622320_6356a3703a83c64d682b0.png!small?1666622320979

总结

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

# 渗透测试 # web安全 # 系统安全 # 数据安全 # 漏洞分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录