Delivery-Writeup

概述 (Overview)

70820590.png
时间:2021-07-09
机器作者:ippsec
困难程度:easy
描述: 考察信息收集能力及如何通过 Ticket Trick 进行攻击的实例,最后通过已知的信息枚举字典。
Flags: User: <md5>,Root: <md5>
INFORMATION:

  • Web
  • Bash
  • Account Misconfiguration

攻击链 (Kiillchain)

通过使用 nmap 识别获得开发的HTTP服务信息,通过查看页面的版本的信息识别部署的服务。通过在 osTicket 上创建一个新的功能,获得系统自动分配的站点邮箱,随后利用该邮箱注册 Mattermost 系统的登录账号,最后通过 osTicket 的工单信息查询接收 Mattermost 系统发来的邮箱激活信息,成功加入到目标系统的聊天组中。通过联通组中的历史信息,用该账号密码成功 mattermost 用户ssh。
最后通过对历史信息的查看,使用 hashcat 的 best64.rule 规则生成新增的密码字典,成功枚举出MYSQL中保存的 root 用户明文密码,成功得到 root flag。

枚举(Enumeration)

老规矩, Nmap 开局对目标开发端口及端口进行扫描识别:

Running a full scan on 10.10.10.222

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8065/tcp open  unknown

PORT     STATE SERVICE VERSION
8065/tcp open  unknown
| fingerprint-strings: 
|   GenericLines, Help, RTSPRequest, SSLSessionReq, TerminalServerCookie: 
|     HTTP/1.1 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     Connection: close
|     Request
|   GetRequest: 
|     HTTP/1.0 200 OK
|     Accept-Ranges: bytes
|     Cache-Control: no-cache, max-age=31556926, public
|     Content-Length: 3108
|     Content-Security-Policy: frame-ancestors 'self'; script-src 'self' cdn.rudderlabs.com
|     Content-Type: text/html; charset=utf-8
|     Last-Modified: Fri, 09 Jul 2021 06:27:05 GMT
|     X-Frame-Options: SAMEORIGIN
|     X-Request-Id: uabw1n4qej8xtficdbjxqx5isw
|     X-Version-Id: 5.30.0.5.30.1.57fb31b889bf81d99d8af8176d4bbaaa.false
|     Date: Fri, 09 Jul 2021 06:31:46 GMT
|     <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"><meta name="robots" content="noindex, nofollow"><meta name="referrer" content="no-referrer"><title>Mattermost</title><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="Mattermost"><meta name="format-detection" content="telephone=no"><link re
|   HTTPOptions: 
|     HTTP/1.0 405 Method Not Allowed
|     Date: Fri, 09 Jul 2021 06:31:47 GMT
|_    Content-Length: 0

使用浏览器查看目标服务器的HTTP服务,在页面源码发现中发现新的域名:

52232514.png

将其加入到 hosts 文件中进行访问:

10.10.10.222 helpdesk.delivery.htb delivery.htb

带域名访问 8065 端口看到了一个新的页面,需要输入账号密码用于登录,但很显然我们现在并不知道。

52479631.png

通过搜索 mattermost 信息,找到了一个类似的服务部署文档。看样子 mattermost 是一个开源的消息通知\聊天服务:
https://support.websoft9.com/docs/mattermost/stack-installation.html#mattermost-installation-wizard
https://docs.mattermost.com/

页面上有个 Create one now 新建账号,但提交后会提示需要接收邮箱信息进行确认才能激活,尝试后暂时放下。

在查看下另外一个域名,通过页尾信息可以获悉服务是 osticket(开源的工单系统):

52489225.png

尝试搜索 osticket default login ,使用默认的账号密码发现并不能登录。 通过 dirsearch 搜索发现 scp/login.php 访问后发现是另一个登录入口暂时清楚是用来做什么的:

52696092.png

立足点(Foothold)

helpdesk.delivery.htb 域名中上选择 Open a New Ticket 将会看到一个注册页面,通过手册(https://docs.osticket.com/en/latest/User/Ticket/Open%20A%20Ticket.html)了解到,这是用来创建新的工单的。

56357782.png
当创建完成后,将会被重定向到创建工单的请求确认页面:
56368561.png
这里的提示的信息和文档中的不太一样,存在一个 9768739@delivery.htb 邮箱。意思是告诉我可以通过工单ID:9768739 跳转到状态检查页面,如果有跟多信息需要补充,只需要发邮件至 9768739@delivery.htb

点击 Check Ticket Status 后输入 email 和 工单ID 可以看到之前提交的工单信息。

还记得 delivery.htb 里的 Create one now 吗?尝试使用上面得到的邮箱地址进行账号注册:

email address:9768739@delivery.htb
username:test1
password:.QWER!@#$56

再次回到 Check Ticket Status 页面,提交表单后就看到了带有注册成功的验证连接消息:

56642959.png

浏览地址将提示账号注册成功的提示:

56654541.png

当然我们输入注册的账号密码后,成功登录该系统:

56799184.png

看懂了吗?解释下:

  • 首先我们是没有一个能接收目标站点邮箱验证的邮箱,但当我们在子域名工单系统中发起工单时,它会为我们分配一个邮件。
  • 同时,通过分配的邮箱加分配的工单ID可以查看到邮件内的消息。
  • 这样组合起来我们就可以用工单分配的邮箱来接收注册验证信息。

在系统内翻一翻,找到了 root 用户在组里发布的消息:

56863365.png

从消息中我们得到了一组密码: maildeliverer:Youve_G0t_Mail!,使用该密码成功登录目标服务器,得到 user flag。

56955370.png

权限提升(Privilege Escalation)

传递 linpeas.sh 进行深度的信息收集,发现还存在一个 mattermost 的用户:

62021715.png

在进程信息中查看到存在一个同名的进程在执行:

62144344.png

接着在 /opt/mattermost/config/config.json 文件中获得到 mysql 数据库连接账号密码:

"SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:Crack_The_MM_Admin_PW@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",
... snip ...

随后在数据库中查询到含有 root 账号的密码表:

MariaDB [mattermost]> select username,Password from Users;
+----------------------------------+--------------------------------------------------------------+
| username                         | Password                                                     |
+----------------------------------+--------------------------------------------------------------+
| surveybot                        |                                                              |
| c3ecacacc7b94f909d04dbfd308a9b93 | $2a$10$u5815SIBe2Fq1FZlv9S8I.VjU3zeSPBrIEg9wvpiLaS7ImuiItEiK |
| 5b785171bfb34762a933e127630c4860 | $2a$10$3m0quqyvCE8Z/R1gFcCOWO6tEj6FtqtBn8fRAXQXmaKmg.HDGpS/G |
| root                             | $2a$10$VM6EeymRxJ29r8Wjkr8Dtev0O.1STWb4.4ScG.anuu7v0EFJwgjjO |
| ff0a21fc6fc2488195e16ea854c963ee | $2a$10$RnJsISTLc9W3iUcUggl1KOG9vqADED24CQcQ8zvUm1Ir9pxS.Pduq |
| channelexport                    |                                                              |
| test1                            | $2a$10$jWk9yKa.wMx4TbmyI2iirOY3t.HmVnJsvA.ZVZHYRU8ROzoKTanwq |
| 9ecfb4be145d47fda0724f697f35ffaf | $2a$10$s.cLPSjAVgawGOJwB7vrqenPg2lrDtOECRtjwWahOzHfq1CoFyFqm |
| test                             | $2a$10$ZdsNcAb3Vy7DmP3xfXVCfOjINTtOndgtYHHwfJ77NX9cQrTTs79NO |
+----------------------------------+--------------------------------------------------------------+
9 rows in set (0.001 sec)

但是我花了大量的时间去解密,字典都跑完了还是没解出来。怀疑是不是思路错了,最后在论坛里找到了点有用的信息:

63871224.png

这里说要注意提示中提到的工具,然后我又去看看了之前 root 发过的信息,最后一段中提到了 hashcat 还有单词的变体:

63900484.png

也就是说我们需要更具 PleaseSubscribe! 去生成常用单词,然后在尝试破解加密才行。

最终在文章 https://darkless.cn/2019/12/26/hashcat-rule/ 中找到了提示,使用 best64.rule 规则生成新字典:

echo 'PleaseSubscribe!' | hashcat -r /usr/share/hashcat/rules/best64.rule -o password.txt --stdout

66587357.png

成功解出密码哈希的明文为:PleaseSubscribe!21,获得 root flag。

67338010.png

有意思的是,在root用户下ippsec还留有一段话,注明制作该box的灵感来源。

67498432.png

2608758.png

参考