前话:
可以回看前文《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.jspinvoker=com.weaver.formmodel.mobile.skin.SkinAction&action=import
地址:
http://127.0.0.1/mobilemode/skin/C99ABD76E1D00001197FF6521E5B160/1.txt
最后
压缩包下必须存在_.xml、.css文件和images文件夹
xml文件必须有id、name、previewImg、isEnabled、order、subCompanyId的属性
路径:
/mobilemode/Action.jsp?invoker=com.weaver.formmodel.mobile.skin.SkinAction&action=import
马子:
http://127.0.0.1/mobilemode/skin/321321/1.jsp
求职:
笔者求深圳内推安全岗