靶机介绍

1)靶机地址:https://download.vulnhub.com/momentum/Momentum.ova

2)靶机难度:中

3)打靶目标: 取得 root 权限 + 2 Flag

4)涉及攻击方法:主机发现、端口扫描、信息收集、XSS漏洞、WEB路径爆破、JS脚本分、AES解密、Redis认证漏洞、权限提升

5)靶机简介:分析页面源码,是针对WEB系统进行信息收集阶段必做的一个步骤。页面源码可能泄漏隐藏资源,或者通过注释以及JavaScript脚本发现后端接口地址,这将扩大系统的攻击面,增加渗透成功的可能性。本次将在靶机源码中发现解密的密钥,进而还原AES密文,并以此突破边界打点成功。Redis是一种基于内存的非关系型数据库,默认无身份认证的配置,使其成为了近年来众多安全事件的罪魁祸首。利用该漏洞不但可以读写文件,更有可能直接执行操作系统命令,或严重的信息泄漏,并最终导致权限提升。

6)在线工具(JS解密):https://codepen.io/omararcus/pen/QWwBdmo

打靶过程

1)主机发现

# arp-scan --interface=eth1 --localnet

2)全端口扫描

# nmap -p- 192.168.56.126

3)服务版本扫描

# nmap -p22,80,10000 -sC -sV  192.168.56.126

4)通过浏览器访问靶机的80端口

http://192.168.56.126/

②尝试点击每一张图片,发现每一张图片都有一个id,且每一个图片对应URL中的id参数也变成了图片对应的ID

③尝试在URL中的参数id中进行SQL注入,或者包含一个文件,都不成功,都会将输入的内容原样的返回到页面中

http://192.168.56.126/opus-details.php?id=' and 1=1 --
http://192.168.56.126/opus-details.php?id=' and 1=2 --
http://192.168.56.126/opus-details.php?id=../../../../etc/passwd

④在id参数处,输入一个xss跨站脚本的检测代码,发现此处存在XSS漏洞

http://192.168.56.126/opus-details.php?id=<script>alert(123)</script>

⑤通过XSS漏洞获取到当前站点的cookie

http://192.168.56.126/opus-details.php?id=<script>alert(document.cookie)</script>
cookie=U2FsdGVkX193yTOKOucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBS

⑥通过base64解码cookie内容后,发现是一串被某种加密方式加密的字符,被加盐

5)通过手动查看源码,输入rebotx.txt等方式进行信息搜集,均为发现可用的信息。对其进行路径的爬取

# dirsearch -u http://192.168.56.126

通过搜索发现一个js/main.js的文件,该js文件的注释说明了一些加密的信息

从上述注释中,可看出该文件引用了一个crypto.js的库文件,通过该库文件使用AES算法对密文进行解密,再将解密后的字符转化成了UTF8的字符串。其中使用的解密密钥为SecretPassphraseMomentum

注:通过搜索发可发现使用crypto.js库加解密的使用方法https://gitee.com/mirrors/crypto-js#aes-encryption

6)使用在线工具,将加密后的密文,利用获取到的密钥,通过AES算法进行解密

工具地址:https://codepen.io/omararcus/pen/QWwBdmo

获取到解密的字符串:auxerre-alienum##

7)尝试通过用户名auxerre和密码auxerre-alienum##登录目标靶机,发现成功登录,获取到当前目录的第一个flag

# ssh auxerre@192.168.56.126

8)通过信息搜集发现当前靶机的内核版本为4.19,通过kali搜索4.19的本地提权漏洞利用代码,虽然可以搜索出来,但是都无法利用成功

9)通过查看用户文件发现本机存在一个redis用户,先检查本机是否启用了redis服务(redis默认安装完成后,是没有启用身份认证的)

$ ss -pantu

通过检查发现redis默认的端口6379是开放的。但是该端口是监听在本地的,无法通过外网直接连接到redis数据库

10)通过查看启动redis服务的用户,发现不是root用户,无法直接通过加载库的方式提权

$ ps -aux |grep redis

11)通过redis-cli客户端连接redis服务,输入info命令。如果返回系统的相关信息说明没有redis没有启用身份认证,如果不返回任何系统信息,说明redis启用了身份认证

$ redis-cli
127.0.0.1:6379> info

根据执行结果可判断,redis没有进行任何的身份认证

12)通过查看redis数据库的键值对,发现其中存在一个rootpass的键,其对应的值为m0mentum-al1enum##

127.0.0.1:6379> KEYS *
1) "rootpass"
127.0.0.1:6379> get rootpass
"m0mentum-al1enum##"

13)尝试通过用户名root和密码m0mentum-al1enum##使用su切换到root用户,可直接登录成功,获取到flag,拿到root权限

$ su - root
# cat /root/root.txt