最近很多小伙伴反馈看不到最新的推文,由于微信公众号推送机制改变了,解决办法:
给公众号设为星标
本文来自团队小伙伴
Zjacky
博客地址
好心酸写这篇文章的时候,因为已经是下午四点整了,从早上的10点开始审这个代码,到现在只解决了一个问题,想SI的心都有了,还是含泪记录下本次Java
的踩坑记录吧,可能有师傅遇到过可能也觉得我很逗比,但还是发出来减少大家遇到这种问题的情况吧
upload
一个一个找 发现了在这里@RequestMapping({"/attachment/*"})
fileUpload.action
映射saveFile
方法 发现是接口的方法,寻找实现接口的类重写的saveFile
方法\service\impl\AttachmentServiceImpl.java
String fileSuffix = FileUtil.getFileSuffix(uFile.getOriginalFilename()); // 直接获取用户上传的文件名后缀
String fileName = String.valueOf(DateUtils.formatNow("yyyyMMddHHmmssSSS")) + fileSuffix; // 并且与时间进行拼接
String url = String.valueOf(basePath) + "uploadFile/" + attachment.getMark() + "/" + attachment.getUsername() + "/" + fileName; // 生成文件的路径
//接着就是真正的将上传的文件写入到一个File对象当中存储
byte0 = uFile.getBytes();
File targetFile = new File(pathUrl, fileName);
uFile.transferTo(targetFile);
targetFile.setReadOnly();
所以代码逻辑就清楚了,后续的关于Attachment
其实就是存储文件信息而已,实际已经上传成功了,但是其实这个上传是后台的上传。因为在web.xml
中发现过滤器是需要鉴权的
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.xxx.xxx.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
就是个判断登录的逻辑,所以只能是后台了,由于是很早很早之前的就拿到的源码,当时是找到了账号的初始密码,所以通过默认密码+账号爆破再一次进入到该站的后台当中
/xxxx/xxxxx/fileUpload.action;jsessionid=xxxxxx?mark=xxxxx&fileUUID=xxxxx
说明fileUUID
跟 mark
都为可控点并且是某个处理逻辑进行处理的,比较轻松的就是他返回了上传地址,但是上传jsp的时候就返回了:
上传材料格式不正确
if (!fileSuffix2.endsWith("jpg") && !fileSuffix2.endsWith("jpeg") && !fileSuffix2.endsWith("gif") && !fileSuffix2.endsWith("png") && !fileSuffix2.endsWith("bmp") && !fileSuffix2.endsWith("jsp") && !fileSuffix2.endsWith("js") && !fileSuffix2.endsWith("html")) {
msg = "上传材料格式不正确";}
上传材料格式不正确
关键词 ,发现仅仅只有四处存在上传材料格式不正确
发现肯定是能走进去的上传材料格式不正确
也不可能 因为根本走不到这里,因为只要后缀名为空就会被catch
捕捉到报错而进行报错,并不会因为后缀名为空就进入到这个上传材料格式不正确
中.jsp
并没有被白名单所匹配到 emmmm。。。存疑?可是我本地没问题啊。。。一样的代码,根本不需要考虑过滤器的原因,如果过滤器这地方拦了就不会显示上传材料格式不正确
了,好奇怪Jadx
的问题,我发现他针对单文件的反编译是很正常的,但是只要是一个目录下,他就发生了一些错乱,比如 增加莫名其妙的代码或者是反编译错误把别的地方的代码混杂在一起,以下是踩坑记录首先目录结构如下
IDEA的反编译
+ jd-gui.exe
+ jadx
三个反编译工具进行演示,以下都关注方法fileUpload
内容AttachmentController.class
jd-gui.exe
直接打开AttachmentController.class
此时使用Jadx
打开单文件
接下来就是坑点了,使用Jadx
打开当前的目录
Jadx
进行提交Issues
认为百分百是Jadx
的多文件目录反编译问题 然后得到@skylot 那牛子的感谢然后觉得今天一天的踩坑非常的值得,可惜做梦是美好的 然而,当我一打开整个目录发现一样可以正常反编译一点毛病都没我当场已经裂开了,真的不知道用什么心情可以形容当时的我classbak
我没仔细看直接就反编译了,我一口老血吐出来,然后带着这些文件我再次打开这个目录果然万恶之源就是这个备份!!最终问题解决,一天时间又这样子没了,害,这就是Java
吧
Java
真是个神奇的东西,稍微不细心一天就没了,原来时间就这么流逝的,好开心,因为Java
又活了一天啦,谢谢你Java
"""
Author: Zjacky
Date: 2024/1/9
Name: bak_finder.py
"""
# rest of the code goes here
import os
import argparse
parser = argparse.ArgumentParser(description='Scan files for keywords.')
parser.add_argument('-r', '--root', help='the root directory to scan')
args = parser.parse_args()
# 定义你想要匹配的关键字列表
keywords = ['bak', 'beifen']
for dirpath, dirnames, filenames in os.walk(args.root):
for filename in filenames:
if any(keyword in filename for keyword in keywords):
print(os.path.join(dirpath, filename))
# python3 back.py -r 目录
点分享
点收藏
点点赞
点在看