就是某个BC系统的客服,在实战过程中找出了heapdump泄露,任意文件读取,SSRF,SQL注入,fastjson反序列化。漏洞挺多的,继续审。
filter反序列化
需登录客服后台。
/apps/contacts/dis
打开这个页面,F12就很容易发现此页面和反序列化有关
filter=rO0A,很明显的序列化流base64头,看代码
public ModelAndView dis(ModelMap map, HttpServletRequest request, String itemid, String ckind, String[] ids, String size, String filter, String organ) throws JsonParseException, JsonMappingException, IOException {
_________________________
if (!StringUtils.isBlank(filter)) {
String filterstr = (String)UKTools.decode(filter.replaceAll(" ", "+"), String.class);
ObjectMapper objectMapper = new ObjectMapper();
FilterCriteria filterCriteria = (FilterCriteria)objectMapper.readValue(filterstr, FilterCriteria.class);
if (filterCriteria != null) {
filterCriteria.setContactsids((ids != null && ids.length > 0) ? Arrays.<String>asList(ids) : null);
map.addAttribute("filter", UKTools.encode(UKTools.toJson(filterCriteria)));
}
跟进UKTools.decode()
public static <T> T decode(String str, Class<T> clazz) {
Base64 base64 = new Base64();
try {
return (T)toObject(base64.decode(str));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
跟进toObject()
public static Object toObject(byte[] data) throws Exception {
ByteArrayInputStream input = new ByteArrayInputStream(data);
ObjectInputStream objectInput = new ObjectInputStream(input);
return objectInput.readObject();
}
因此只需要构造/apps/contacts/dis?filter=URLDNS+base64即可。
一般情况这里需要将base64中的加号替换为%2B,但有段代码很贴心的帮我们把空格替换为加号了,所以就不用了。
同类下的其他很多接口都有此问题,搜UKTools.decode即可。
原文始发于微信公众号(珂技知识分享):某java客服系统后续代码审计
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论