记录一次CTF web题目解决过程
今天在某CTF网站做练习的时候发现这个web题还蛮经典的,涉及的点也不错,因此想借此写一篇文章讲解一下。
目录
审题思路
测试过程
验证SSTI漏洞
利用漏洞
总结
本题涉及漏洞 SSTI(服务端模板注入)
通用CWE编号:CWE-1336
审题思路
我们先看这个题目
于是打开主页面后发现也没啥特别的,在搜索结果的页面尝试跑一下sqlmap也是没有找到注入点。有个员工登录页面同样没有弱口令。
回看题目有提示,告诉我们用dirsearch有惊喜,跑了一下后果然有东西
这个网站存在git目录泄露
对于测试人员来说,有了git目录便有了:
完整的源代码历史
配置文件
开发者的提交记录
可能包含的敏感数据
瞄准这个方向我们可以接着进行下去了
测试过程
第一步我先用git_dumper命令将这个git目录下载下来
看到了这几个重要的文件
app.py config.py requirements.txt static templates进入app.py中,看到这个重要的信息
是的,我们得到了管理员的账号密码 admin Nexusadmin2025!@#,同时通过分析此文件中内容我们知道了dashboard是控制室入口
但事实是我们直接登录会显示这个
错误:该账户已启用多因素认证 (MFA),请使用硬件密钥登录。
然而在config.py中我们发现了一个旧的Key
因此我们可以尝试使用 flask-unsign工具构建一个session进行登录,打开burp抓包工具,访问dashboard页面,添加Cookie: session值
可以看到返回了正确登录的结果,同时我们发现一个问题,这个页面会把访客的名字直接显示出来,我们可以大胆猜想以下这个页面会不会存在SSTI漏洞
验证SSTI漏洞
我们可以进行如下测试,当我们访问/dashboard?u={{3*3}},可以看到返回了数值9,是的,我们输入的被服务器执行了,这是服务器端模板注入漏洞
利用漏洞
因此利用这个漏洞,我们接下来可以使用tplmap进行自动化测试(是不是很熟悉,sql注入有sqlmap,SSTI有tplmap)
简单验证一下,执行whoami,返回了root
执行 ls -la /命令,可以看到存在flag文件,直接使用cat /flag,成功得到flag
总结
我们的测试主要包含了如下过程:
- 使用dirsearch发现了git目录泄露
- 将目录下载下来通过分析源文件发现了dashboard的功能,以及发现了key用来构造session
- 使用burp抓包工具验证session的可行性以及SSTI的存在
- 借助tplmap工具进行--os-shell交互性执行命令找到了flag文件
