漏洞描述
URL跳转漏洞是近几年来出现的比较新颖的一种漏洞利用形式,比如,目前很多的Web应用因为业务需要,需与内部的其他服务或者第三方的服务进行交互,这样就需要重定向的功能,由当前网页跳转到第三方的网页。
漏洞危害
http://www.any.com/index.jsp?url=http://www.xxx.com
URL跳转漏洞存在于URL跳转功能的业务系统中,若服务端对接收URL跳转的参数没有进行过滤和限制,攻击者就有可能构造一个恶意的URL地址,诱导其他用户访问恶意的网站。
因为是从可信站点跳转而来的,故很多用户的安全意识比较薄弱,这样攻击者就可以在用户没有察觉的情况下通过可信站点跳转至事先搭建的钓鱼网站进行钓鱼攻击
常见跳转方式
ModelAndView
返回String
sendRedirect
RedirectAttributes
一般的URL跳转,使用redirect即可满足要求。如果需要进行参数拼接,则一般使用RedirectAttributes
设置Header来进行跳转
常见关键字
- redirect
- sendRedirect
- ModelAndView
- Location
- addAttribute
漏洞修复
不过滤写法public static viod test1(HttpServletRequest req , HttpServletResponse resp) throws IOException{
String url = req.getParameter("url");
resp.sendRedirect(url);
}
整个漏洞的产生十分简单,因此我们的漏洞利用也相对简单。只需根据RequestMapping找到对应路由并拼入url参数,将url参数值改为需要跳转的地址即可,在真实情况下一般将跳转地址指向钓鱼页面
对于URL跳转漏洞,最有效的防御手段之一是严格控制要跳转的域名。若已知需要跳转URL,则可以直接在源码中写为固定值