用户
搜索
  • TA的每日心情
    奋斗
    21 小时前
  • 签到天数: 61 天

    连续签到: 48 天

    [LV.6]常住居民II

    i春秋-脚本小子

    Rank: 2

    1

    主题

    23

    帖子

    1095

    魔法币
    收听
    1
    粉丝
    2
    注册时间
    2016-11-8
    发表于 6 天前 122583
    本帖最后由 ofei 于 2020-7-30 16:26 编辑

    本文原创作者ofei,本文属于i春秋原创奖励计划,未经许可禁止转载!

    1、前言

    随着微服务与前端UI框架的兴起,目前多数java应用已不再使用JSP作为视图层,造成上传jsp、jspx等脚本文件后无法解析,导致利用失败。因此单纯的文件上传漏洞在java应用的漏洞挖掘中的影响也在降低。在微服务环境下如何通过文件上传漏洞拿到java应用的权限是一个值得思考的新方向。
    要挖掘新方向新的利用手法就需要对目前的文件上传漏洞利用做一个总结,11年发布的Upload Attack Framework总结的比较全面,本文也以此为基础结合java应用做一个总结,尽量包含现有文件上传的利用方法,再通过一个开源cms的代码审计来实践文件上传的挖掘过程,最后总结java应用如何防范文件上传漏洞。

    2、文件上传漏洞利用

    文件上传的流程顺序为,客户端检测、服务端MIME检测、服务端路径检测、服务端文件扩展名检测、服务端内容检测5个部分,这里只列出方法,详细利用参见参考链接。

    2.1 客户端javascript 检测

    通常为前端js检查文件扩展名,轻量级检测,表现为网页直接操作弹窗后缀不合法。

    利用方法:
    burp提交请求绕过,不涉及后端,可参见我第一篇文件上传审计的文章

    2.2 服务端MIME 类型检测

    后端检测Content-Type 内容,目前使用此方法的应用较少遇到。
    > 利用方法:
    burp修改请求的MIME绕过

    2.3 服务端目录路径检测

    检测跟路径参数相关的内容,是否存在目录穿越、%00截断等,如路径是否可控,是否前端传入,有无路径合法检测。需重点关注

    利用方法:
    如前端传入可以考虑目录穿越,路径截断等

    2.4 服务端文件扩展名检测

    检测跟文件后缀相关的内容,分为黑名单检测和白名单检测,需要注意的是空字节截断漏洞版本JDK < java 7u40。java应用似乎没有解析漏洞问题。

    利用方法:

    1. 黑名单:可尝试文件名大小写、不常见扩展名、特殊文件名、截断绕过,解析漏洞。
    2. 白名单:截断、解析漏洞,文件包含配合。

    2.5 服务端文件内容检测

    检测内容是否合法或含有恶意代码,文件内容检测,幻数、文件合法验证等
    > 利用方法:
    > 插入合法内容,伪造幻数,尝试绕过文件渲染插入恶意数据

    可能的其他利用方法:
    比如双文件上传,office文件的xxe,zip文件的解压,war包解压,zip拒绝服务,上传后后台可修改后缀等等可以根据实际情况变通。

    3、文件上传审计实战

    纸上得来终觉浅,绝知此事要躬行。

    3.1 js查找入口

    还拿mcms来练手,选用5.0版本,上次我们分析了4.7的上传问题,前端上传js为ms.upload.js,前端限制的绕过不去分析,直接看js能给我们带来什么信息
    1.png

    3.2 根据入口查找处理类

    根据上图过一遍我们的总结的利用方法,发现文件后缀allowedFile,路径uploadPath、文件名isRename可能是可控的,这么多利用的点后端大概率有问题。
    后端定位到ms-basic,路径为\net\mingsoft\basic\action\web\FileAction.class

    3.3 构造上传下断点

    在upload方法上下断点,本地html构造上传测试

    <form action="http://ip:8090/ms-mcms/file/upload.do" enctype="multipart/form-data" method="post">
    <input name="file" type="file" />
    <input type="submit" />

    2.png
    F8跟进到78行,upload,发现逻辑为先存储,后验证
    3.png

    3.4 跳入处理类仔细分析

    F7跟入,发现从ms.upload.denied读入黑名单,默认拒绝.exe .jsp
    4.png
    F8到45行,用substring(fileName.indexOf("."))读取文件后缀存到fileType
    56行 如果前断传入isRename参数,就是用原始文件名和后缀,否则使用当前时间戳命名
    63行遍历黑名单使用equals方法判断是否与黑名单相符,相符则返回空
    5.png
    后续为常规的文件保存,89行返回上传文件的路径,最后通过BaseAction的outString方法输出

    3.5 总结利用点

    到此文件上传的后端分析就完成我们来缕一缕。

    1. 客户端检测:前端js有限制,可以绕过,且上传接口可未授权访问
    2. 服务端MIME: 不涉及
    3. 服务端路径检测: 路径可控,后端未检查过滤
    4. 服务端扩展名检测:文件名可控,黑名单机制,java默认配置不解析大小写
    5. 服务端内容检测:不涉及
      3和4组合就可以有很多骚操作,比如绕过解析,这里暂且不表留给大家思考,感兴趣的可以留言互动。

    4、文件上传的防御总结

    最后我们总结java如何防御,和php相比默认配置的java应用解析漏洞几乎没有,后端只要使用白名单方式合适就可以避免大多数文件上传问题。为防止红队的骚操作我们应当注意一下几点

    1. 前端js检测必不可少,减轻后端的负载,拦截少量攻击行为;
    2. 上传接口加授权访问,捋顺文件上传逻辑,合法性检测须先做;
    3. 尽量使用白名单机制,并正确的检测路径与文件后缀合法性;
    4. 正确检测内容合法性,如裁剪,二次渲染等,防止图片马与文件包含问题;
    5. 允许上传zip,office文档时,还要注意zip的正确解压,防止跨目录文件覆盖,zip大文件,office文档的xxe问题。

    参考链接:
    http://www.owasp.org.cn/OWASP_Training/Upload_Attack_Framework.pdf
    https://www.freebuf.com/vuls/128846.html
    https://xz.aliyun.com/t/7365

    感谢分享
    使用道具 举报 回复
    谢谢表哥
    使用道具 举报 回复
    感谢分享~
    使用道具 举报 回复
    感谢分享
    使用道具 举报 回复
    来看看
    使用道具 举报 回复
    有兴趣的老哥可以尝试回复3+4的利用思路,一起探讨
    使用道具 举报 回复
    实战那写的很不错啊表哥加个好友一起学习
    使用道具 举报 回复
    A1key1ng 发表于 2020-7-31 09:14
    实战那写的很不错啊表哥加个好友一起学习

    可以私聊+好友
    使用道具 举报 回复

    感谢分享
    论如何学习,我们来聊一聊经验呀784278256
    使用道具 举报 回复
    回复3+4的利用思路,哈哈哈哈
    使用道具 举报 回复
    iglory 发表于 2020-7-31 14:15
    回复3+4的利用思路,哈哈哈哈

    你不是人造革,是真皮
    使用道具 举报 回复
    3+4的利用思路

    好了,讨论吧
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册