常规绕过前端和后端的任意文件上传已经没意思了,本文记录下之前和最近遇到的2个不太常规的任意文件上传Getshell的案例。
Nmap快速全端口扫描发现开放22,80和3306端口。访问目标,使用[hfinger](https://github.com/HackAllSec/hfinger)扫描发现Web应用使用了Spring Boot
和Ueditor
,同时在留言页面发现有个上传图片功能:
抓包发现上传采用自定义API实现,没有任何限制。但是访问正常图片、txt文件、html文件都可以,访问jsp时却返回404:
经过查询可能的原因是:
缺少依赖:如spring-boot-starter-tomcat
和javax.servlet-api
配置错误:application.properties
或application.yml
中的JSP配置可能不正确
文件位置不正确:JSP文件必须放在正确的目录下,通常是/src/main/webapp/WEB-INF/views/
访问index.jsp
也返回404,应该是使用了默认的配置没有解析jsp。难道煮熟的鸭子就这么飞了?
俗话说只有不努力的黑客,没有攻不破的系统,继续尝试采用目录穿越上传到其它目录,发现报错信息返回了网站绝对路径,可以看出有tomcat(其实Spring Boot默认内置了Tomcat Web容器)。
根据暴露的网站绝对路径,直接构造4个../
将文件上传到网站根目录下,利用Tomcat进行解析jsp成功:
然后替换为Webshell即可拿下目标:
某次项目中发现用户批量导入功能前端没有校验文件后缀和内容:
但是提交后会返回“文件名称不支持”:
而上传包含.xls
或.xlsx
的后缀时返回导入失败:
这说明后端可能执行了Excel文件导入操作。上传名称为xxx.xls.xxx
的正常模板文件时没有报错,这说明猜想是正确的。
然后构造名称为xxx.xls.jsp
的webshell文件,虽然返回导入失败,但是根据目录扫描发现的uploads
目录拼接上传的文件名后,返回200:
然后成功连接webshell:
拿下目标:
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款