Vulnhub打靶记录:momentum
相关信息
kali:10.0.0.9/24
靶机:10.0.0.16/24
靶机下载:https://download.vulnhub.com/momentum/Momentum.ova
目标:2
个 flag
+ root
权限
难度:中
未提及的相关知识点,命令和代码等等可以查看我其他三个blog:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
文字思路
全流程思路:
- 主机发现 端口扫描
- 信息搜集
WEB
路径爆破 xss
漏洞:这个漏洞在渗透的过程中有大量可以尝试的地方,不要遗漏JS
脚本分析:这其实是个非常非常常规的操作,但是却异常的关键不能够省略 AES解密Redis
认证漏洞:由默认安装redis
时自动时在0.0.0.0:6379
上打开的免密登陆引起的漏洞
下意识的操作
- 查看网页的
js
代码 - 一定是通过
passwd
文件来全面的了解靶机上的每一个用户,从而找出突破点,直接访问/home
里面的用户会遗漏一下系统用户。
主要的知识点
js
加解密模块的使用- 跨站脚本
xss
漏洞的发现 redis
数据库漏洞的利用和相关操作
具体流程
信息搜集
-
主机发现,端口扫描,版本确认。仅仅开放
22,80
端口,并没有太多有用的信息发现。 -
访问
web
页面,在id
这个url
参数中可以进行mysql,xss
等漏洞的尝试。 -
当键入
<script>alert(document.cookie)</script>
这个跨站脚本的时候,成功的进行了xss
的注入,获取如下cookie
信息:cookie=U2FsdGVkX193yTOKOucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBSZt
-
尝试进行
base64
解密发现为乱码,但通过salt
这个词就知道这个加密的密码文破解难度大,基本可以不用尝试进行暴力破解了。 -
web
上源码等基本测试也是没有太多的发现,下一步进行路径爬取,发现manual,js
目录。dirsearch -u http://10.0.0.16
-
/js
:在这个文件中发现了一个加密的函数,先包含了一个crypto-js
文件,然后是使用了AES
的encrypted
进行解密,SecretPassphraseMomentum
这个目前还不太确定它代表的具体含义。 -
/manual
:并没有帮助突破边界的发现。
-
-
根据函数中的
cryptojs
关键字进行搜索发现了他就是一个帮助js
实现加解密的框架,以下为其的gitee
托管网站:crypto-js: CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法 (gitee.com)通过
readme
的使用教程大致可以知道SecretPassphraseMomentum
就是salt
,ciphertext
是一个已经被加密的对象。可以使用:decrypt,toString
两个方法将加盐的密文解密并转换为字符串。 -
CryptoJS Example (codepen.io),这个网站可以直接编写使用
cryptojs
这个js
库免去我们搭建环境的麻烦,直接对照官网的示例就可以写出解密到的代码,解出刚刚的加密代码为:auxerre : auxerre-alienum##
突破边界/信息搜集
-
使用
auxerre : auxerre-alienum##
成功的登陆靶机,使用内核相关的漏洞无法完成提权,靶机上也不存在sudo
命令,只能暂且的搜获第一个flag
。 -
通过
passwd
文件发现靶机上存在redis
用户,表明极有可能存在redis
这个非关系型数据库。 -
通过
ss -pantu; ps -aux | grep redis
两个命令不难发现靶机上以redis
身份在127.0.0.1:6379
端口上运行这redis
。尝试免密进行登陆发现靶机确实没有进行任何的redis
防护,直接进入。键入info
查看redis
具体的情况。 -
使用
KEY *
获取redis
中所有的键:rootpass
,明显是个非常具有提示性的键。直接
GET rootpass
获取键的值:m0mentum-al1enum##
。
提权
-
直接
root : m0mentum-al1enum##
就可以成功root
登陆,拿下第二个flag
完成打靶。
相关工具/命令
工具
js的cryptojs库的环境网站
通过这个网站就可免去搭建js
环境直接尝试进行crytojs
模块的加解密操作:CryptoJS Example (codepen.io)
相关知识
重要
redis数据库
-
what? 返回
Redis是一种内存数据库,也被称为键值存储数据库。它是一个开源的、高性能的非关系型数据库(NoSQL),用于存储和检索数据。Redis支持各种数据结构,如字符串、哈希表、列表、集合和有序集合。这些数据结构可以通过键(key)来访问和操作。
Redis的主要特点是其快速访问速度和高吞吐量,这是因为它将数据存储在内存中,而不是在磁盘上。由于内存的快速读写速度,Redis非常适合用作缓存层或临时数据存储。此外,Redis还提供持久化功能,可以将数据定期保存到磁盘上,以防止数据丢失。
由于其灵活性和高效性,Redis被广泛用于各种应用场景,包括缓存、会话存储、实时分析、排行榜、消息队列等。
redis
这个数据默认安装是会打开0.0.0.0:6379
这个端口,同时不需要密码就可以登陆实现高权限操作。大多数使用redis
的服务器都会存在这个漏洞 -
how to use
-
启动Redis服务器:
redis-server
-
连接到Redis服务器:
redis-cli
-
存储键值对:
SET key value
-
获取键的值:
GET key
-
删除键:
DEL key
-
检查键是否存在:
EXISTS key
-
获取所有键:
KEYS pattern # KEY *
这个命令用于获取满足指定模式(pattern)的所有键。但是在生产环境中,不推荐在大规模数据库上使用此命令,因为它会阻塞服务器一段时间,影响性能。
-