> 文章列表 > 一次渗透测试的bug修复

一次渗透测试的bug修复

一次渗透测试的bug修复

一次渗透测试的bug修复

一、SSRF漏洞修复
1、SSRF漏洞可能存在的场景
● 分享,通过URL地址分享网页内容,通过URL获取目标页标签等内容
● 转码服务,适应硬件设备的大小;
● 图片的加载与下载
● 图片,文章的收藏;
2、风险描述
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统,正因为由服务端发起的请求,所以能够请求到与它相连的内部系统。
3、风险造成的危害
● 对服务器所在内网、本地进行端口扫描,获取服务的banner信息;
● 攻击运行在内网或本地的应用程序(比如溢出、远程命令执行);
● 对内网web应用进行指纹识别,通过指定内网URL实现;
● 攻击内网的web应用,可以实现的攻击(比如struts2,sqli等);
● 利用file协议读取本地文件等。
4、如何防御ssrf漏洞
● 统一错误信息
● 限制请求端口
● 黑名单内网IP
● 禁用不需要的协议
5、我的解决
原请求是直接传给后端图片URL,如下图所示:

针对商品资质下载接口,增加请求域名白名单,过滤非公司指定OSS请求,能解决该问题。

/**
* 检查请求域名是否合法,true存在非法地址
*
* @param urls 请求地址集合
* @return
*/
public static boolean checkIllegalRequest(List<String> urls) {//正则表达式解析URLPattern p = Pattern.compile("[^//]*?\\\\.(com|cn|net|org|biz|info|cc|tv)", Pattern.CASE_INSENSITIVE);//此为系统参数,存白名单,你们可以换成字符串ParamInfModel paramInfModel = paramInfModelService.findByInnerCode(INNER_REQUEST_WHITELIST_CODE);AssertExt.notNull(paramInfModel, BusinessExceptionEnum.INVALID_VALUE_EXCEPTION, "未配置内部请求白名单");String[] str = new String(paramInfModel.getParamValue()).split(",");AssertExt.notEmpty(str, BusinessExceptionEnum.INVALID_VALUE_EXCEPTION, "内部请求白名单为空");List<String> whiteList = Arrays.asList(str);List<String> collect;try {collect = urls.stream().filter(item -> {//解析域名Matcher matcher = p.matcher(item);matcher.find();String uri = matcher.group();if (!whiteList.contains(uri)) {return true;}return false;}).collect(Collectors.toList());}catch (Exception e){return true;}if (CollectionUtils.isNotEmpty(collect)) {return true;}return false;
}

二、用户枚举漏洞
1、漏洞可能存在的场景
● 用户登录
● 用户注册
2、风险描述
由于错误配置或设计缺陷,当向系统提交有效账户和无效账户时,服务器会有不同的响应。利用响应的不同,攻击者可以获取到系统已经存在的账户,可用于暴力破解,进一步获取账户的登录密码。
3、风险造成的危害
可以根据返回包情况,判断用户名或手机号是否存在或者注册,以此进行用户名手机号枚举,为进一步攻击收集信息,与其他问题搭配提升危害。
4、如何防御
● 用户登录处,登录失败应提示“账号或密码不存在”
● 用户注册处,限制请求频率或添加验证码
5、我的解决
用户注册处添加验证码`