VulnHub通关日记-EnuBox_Mattermost,逆向分析文件获取Flag

简介

靶机地址:EnuBox: Mattermost ~ VulnHub
Name:EnuBox:Mattermost
靶机介绍:The Mattermost chatting system may or may not hold sensitive information. Can you find your way in?

信息搜集

拿到靶机 IP 之后上神器 NMAP 对它就是一顿梭哈:

1
nmap -A -p- -T4 192.168.1.137

扫描完成后,发现它开放了 21(ftp)、22(ssh)、80(http)、3389(XRDP远程桌面)、8065(web) 端口。

其中 ftp 可以用匿名用户 anonymous 登陆:

由上图所示登陆到它的 ftp 后没有显示任何文件!那么我们还是先来看看 web (80、8065)的目录文件把:

1
2
dirb http://192.168.1.137
dirb http://192.168.1.137:8065

枚举目录出来后先是看了 80 端口的 index.html,它显示的是 403 没有找到,但是页面上的信息提示有一个 README.md 的文件:

我访问 README.md 发现是 404:

扫描二维码关注公众号,回复: 14139998 查看本文章
1
http://192.168.1.137/README.md

这个时候先放弃 80 端口,来到 8065 端口看看,它扫描出来是有一个 robots.txt 文件,访问但是空白的:

1
http://192.168.1.137:8065/robots.txt

这个时候我直接访问它的首页发现是一个登陆页面:

1
http://192.168.1.137:8065/login 

tftp下载README.md文件

它使用的 CMS 是 Mattermost ,它是一款易于使用、经过简化且可扩展的团队通信和企业消息传送系统。

尝试若口令无果,Google 上只有它的默认 Mysql 的账号密码,我用来尝试登陆 Web 无果。

思路回到上面,刚刚打开 80 端口的 Web 页面它提示了一个 README.md
文件,是不是作者告诉我们那个是关键点呢?刚好我们有了它的 ftp 匿名用户可以登陆,但是刚刚看过了没有任何文件,正当我一筹莫展的时候我下意识的在 tftp 里尝试能不能把 README.md 下载到本地,没想到真成了!

1
2
3
# 因为我写到这里的时候是第二天了,我重启后靶机的 IP 就变成 192.168.1.138 了!
tftp 192.168.1.138
# TFTP是一个传输文件的简单协议,它基于UDP协议而实现的。

把 README.md 下载到本地打开后发现我们得到了一个账号和密码:

1
admin:ComplexPassword0!

随后我登陆到了它到后台:

1
http://192.168.1.138:8065/login

来到后台后我大致看了看它的后台消息,翻译过来好像是一些没用的诗句?

额。。。先不管它!我又去了 exploit-db 上寻找了有关 Mattermost 的漏洞,但是没有得到我想要的信息:

Mattermost-后台获取FTP账号密码

随后我在后台的头像以及能上传的地方尝试看看能不能获取到一枚 webshell,很显然我没成功,我太菜了。

正当我一筹莫展的时候我发现了一个系统控制台找到了一个插件 zoom

它默认是 False 关闭的,我把它开启 True 后得到了一枚 URL

1
http://localhost/JK94vsNKAns6HBkG/AxRt6LwuA7A6N4gk/index.html

这个时候我是在 8065 端口打开的 URL 发现没有这个页面:

但是用 80 端口的 web 去访问这个页面的时候却得到一段提示:

1
http://192.168.1.138/JK94vsNKAns6HBkG/AxRt6LwuA7A6N4gk/index.html

1
Hello Admin, FTP credentials help you edit, transfer and delete files from your site. This is why it's important to keep these credentials handy. FTP Credentials: ftpuser / ftppassword Make sure to keep these to yourself. 

通过这个提示我有得到一枚账号和密码,是 FTP 的:

1
ftpuser:ftppassword

随后我便用得到的账号和密码成功登陆到它的 FTP 服务里:

1
ftp 192.168.1.148

获取到SSH的账号密码

登陆进去后发现有一个 examples.desktop 文件,还有一个 users 目录、mattermost 目录下有一个 message 文件,我把他们都下载到本地后查看了一下examples.desktop 文件没发现什么:

查看 message 文件发现里面有一段话:

这个时候有点懵了,整半天你给我了一句 Welcome!!! ?但是后来把一切结合起来想了想,刚开始是有一个 users 目录,然后是 mattermost 目录下有一个 message 文件,文件内容是 Welcome!!!

柯南:真実はいつも一つ(真相只有一个),mattermost 是一个用户名,而 message 文件内容 Welcome!!! 就是密码!!!按照我这个推理我尝试登陆到它到 SSH 没想到真成了!!!

1
2
3
USER:mattermost
PASS:Welcome!!!
ssh [email protected]

玩 CTF 靶机就是要多思考,根据我们得到到信息要去想它为什么会有这个信息?这个信息的线索是干嘛的?我可以用得到的信息做写什么?

毕竟CTF 就是这样不按常理出牌,你得像个黑客,以黑客的思维去思考问题!

登陆到 mattermost 用户后,我习惯性的 sudo -l 发现它没有权限去执行 sudo,需要密码:

接着我查看了一下有没有一些文件可以以 SUID 权限去执行:

1
find / -perm -u=s -type f 2>/dev/null

结果发现了刚好有一个文件 secret 文件是可以以 SUID 权限执行的,而且刚好在我所登陆的 mattermost 用户的 家目录下的桌面:

1
/home/mattermost/Desktop/secret

逆向分析secret文件获取Flag

随后我来到了 mattermost 用户的家目录,里面有一些目录和文件,除了 Desktop 目录里有文件,其他目录都是空的!

我先是看了看 README.md 文件,发现里面是一段话,大概意思是你有一个密钥,而且在 30 天后会过期

1
2
3
4
5
6
7
8
Hello User,

Your secret key is 48912.

Do not share this key with anyone.

!! NOTE:: This key is not valid after 30 days and has been changed by our internal systems.
!! NOTE:: Please contact the support desk to get new secret key.

吓的我迫不及待地去运行 secret 文件,运行后它让你输入密码,我用刚刚得到的密码发现出错了:

很显然密码以及过期了!这个时候怎么办呢?我先是把 secret 文件使用 nc 传到 KALI

之后各种百度各种Google关于逆向的文章,临时拜佛脚! WEB狗表示伤不起,一路硬钢下来的!呜呜呜~~~

经过查看源代码发现了一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
undefined8 main(void)

{
  long in_FS_OFFSET;
  int local_14;
  long local_10;
  
  local_10 = *(long *)(in_FS_OFFSET + 0x28);
  local_14 = 0;
  puts("Hello Admin, Please enter the secret key:");
  __isoc99_scanf(&DAT_00100992,&local_14);
  if (local_14 == 0xf447) {
    setuid(0);
    setgid(0);
    system("/bin/bash");
  }
  else {
    printf("Your is either invalid or expired\n.");
  }
  if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return 0;
}

拿到源代码之后开始审计,幸好以前学过一点点 C 语言,还是能看懂一点的,具体是要让 local_14 的值等于 0xf447 ,这个时候就成功运行 system 函数,切换到 /bin/bash !0xf447 是十六进制,我把它转化为十进制为:62535

最后运行 secret 文件获得 root 权限!

最终也是在 /root/Desktop 下拿到 Flag

交流群:

 微信公众号:

 知识星球:

猜你喜欢

转载自blog.csdn.net/qq_36304918/article/details/124679444