记录某微的0day挖掘过程
【摘要】 前话:可以回看前文《java代码审计新-从0到无》,这里就不再诉述。第一:看历史漏洞泛微前台注入/js/hrm/getdata.jsp注入点前台注入https://www.cnblogs.com/0day-li/p/14637680.html,关键点java全局搜索“request.getParameter(”并且java类里面必须存在“executeSql”。第二:流Stream搜索文件上...
前话:
可以回看前文《java代码审计新-从0到无》,这里就不再诉述。
第一:看历史漏洞
泛微前台注入/js/hrm/getdata.jsp注入点前台注入
https://www.cnblogs.com/0day-li/p/14637680.html,关键点java全局搜索“request.getParameter(”并且java类里面必须存在“executeSql”。
第二:流Stream
搜索文件上传的关键类或者方法,这里我直接搜索流(Stream),全局搜索new BufferedInputStream(,idea只能显示一部分可以利用sublime_text进行搜索,我就用后者搜索可以显示多点,不过这里不懂怎么指定后缀搜索,搜索出285处133个文件,主要看java类。
这里跟进到这个文件(类),可以用idea看会好看一点,也比较看得懂。
思路:
1:获取/mobilemode/skin的文件夹目录
2:file文件上传参数赋值给i,默认为0
3:判断sql查询imagefile的filerealpath,isaesencrypt,aescode返回是否有值
4:将sql查询到的filerealpath值赋值到str3
5:通过file实例获取str3赋值到file2
6:通过file实例获取/mobilemode/skin和当前时间+1L创建新的实例赋值到file3,不存在文件夹就创建(随机文件夹)
7:file2和file3的路径加载到upzip方法,并创建压缩文件实例进行解压
8:创建BufferedOutputStream和BufferedInputStream,BufferedOutputStream实例将file3读取并设置根目录,而BufferedInputStream实例将通过zipfile对象获取流
9:以1024字节读取BufferedInputStream并以1024字节写入BufferedOutputStream的流里,也就是解压的文件,并刷新。
10:回到_import方法,判断file3下的_.xml、.css文件和images文件夹是否存在
11:将file4的值(xml文件)加载到readxml方法进行读取,检查是否有id、name、previewImg、isEnabled、order、subCompanyId的属性并利用三元表达式进行判断,并返回skin。(建议都不为空)
12:判断返回值是否为空并且id属性不能为空,后面的就不关心了
调用链:
classbean/com/weaver/formmodel/mobile/skin/SkinAction.java(怎么搜索的?全局搜索)execute方法判断action等于import就加载_import方法,
并且将httpServletRequest对象加载进去,而这个getAction怎么来的?他这个方法是继承了extends MobileAction并通过http请求获取action参数,然后进行全局jsp文件搜索SkinAction,发现通过了jionActionUrl方法调用,在第2行包含了<%@ include file="/mobilemode/init.jsp"%>,根据里方法构造出路径。
路径:
/mobilemode/Action.jsp?invoker=com.weaver.formmodel.mobile.skin.SkinAction&action=import
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)