概述
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,抓取