概述
SSRF 形成的原因大都是由于代码中提供了从其他服务器应用获取数据的功能但没有对目标地址做过滤与限
制。比如从指定 URL 链接获取图片、下载等。
漏洞示例
此处以 HttpURLConnection 为例,示例代码片段如下:
String url = request.getParameter("picurl");
StringBuffer response = new StringBuffer();
URL pic = new URL(url);
HttpURLConnection con = (HttpURLConnection) pic.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
BufferedReader in = new BufferedReader(new
InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
modelMap.put("resp",response.toString());
return "getimg.htm";
审计策略
1、应用从用户指定的 url 获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户;
2、应用获取用户制定 url 的数据(文件或者 html)。这个函数会使用 socket 跟服务器建立 tcp 连
接,传输原始数据;
3、应用根据用户提供的 URL,抓取用户的 web 站点,并且自动生成移动 wap 站;
4、应用提供测速功能,能够根据用户提供的 URL,访问目标站点,以获取其在对应经纬度的访问速度;
程序中发起 HTTP 请求操作一般在获取远程图片、页面分享收藏等业务场景,在代码审计时可重点关注一些