web渗透测试----13、URL跳转漏洞


一、URL跳转

一般分为两种,客户端跳转和服务端跳转,两种跳转对用户来说,都是指向或者跳转到另一个界面,页面发生了变化。

1、客户端跳转

response.sendRedirect()

属于重定向,用户浏览器的地址栏URL会发生明显变化,比如,当前页面为http://www.xxx.com/news.php,当点击登录按钮后,变成了http://www.xxx.com/login.php,且页面发生了变化,这就是客户端跳转。相当于客户端向服务端发送请求之后,服务器返回一个响应,客户端接收到响应之后又向服务端发送一次请求,一共是2次请求,前后页不共用一个request,不能读取转向前通过request.setAttribute()设置的属性值。
可以重定向到本web页面之外的页面和网站。

2、服务端跳转

request.getRequestDispatcher().forward(request,response)

属于转发,也可以称为内部重定向,相当于方法的调用,服务端跳转时,用户浏览器的地址栏的URl是不会变化的。比如,当前页面URL为http://www.xxx.com/new.php,当点击登录按钮后,浏览器地址栏URL不会发生改变,但是页面会发生变化。在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和request.getAttribute()
这个请求不能转向到本web应用之外的页面和网站。

3、其他
直接向服务器发送请求
例如:

<a href ="http://www.xxx.com/news.jsp">新闻列表</a>

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

二、URL跳转漏洞

1、原理
URL跳转漏洞也叫做开放重定向,是指服务端未对传入的跳转url进行过滤和控制,导致用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。

 例如:
https://example.com/login.php?link=https://test.com/
后端代码形如:
response.sendRedirect(request.getParameter("url"))

2、常见的URL跳转代码:

Java:response.sendRedirect(request.getParameter("url"));
Flask:redirect_url = request.form['url']redirect(redirect_url)
PHP:$redirect_url = $_GET['url'];header("Location: " . $redirect_url);
.NET:string redirect_url = request.QueryString["url"];Response.Redirect(redirect_url);
Django:redirect_url = request.GET.get("url")HttpResponseRedirect(redirect_url)
Rails:redirect_to params[:url]

3、挖掘技巧:

1、在抓包历史中搜索返回状态码为302的请求包;
2、功能处:登录、注册、注销、改密,第三方应用交互,页面切换,业务完成跳转、返回上级、账号切换、保存设置、下载文件等;
3、常见的参数值有return、redirect、url、jump、goto、target、link、callback等;
4、输入任意URL地址看是否可以任意跳转,若后台进行过滤,探测过滤规则,绕过过滤;

三、绕过方法

源地址:www.xxx.com   跳转地址:www.hack.com
1. 单斜线"/"绕过
http://www.xxx.com/login.php?url=/www.hack.com
2. 缺少协议绕过
http://www.xxx.com/login.php?url=//www.hack.com
3. 多斜线"/"前缀绕过
http://www.xxx.com/login.php?url=///www.hack.com
http://www.xxx.com/login.php?url=www.hack.com
4. 利用"@"符号绕过
http://www.xxx.com/login.php?url=http://www.xxx.com?@www.hack.com
5. 利用"\"绕过
http://www.xxx.com/login.php?url=http://www.hack.com\www.xxx.com
6. 利用"#"符号绕过
http://www.xxx.com/login.php?url=http://www.hack.com#www.xxx.com
7. 利用"?"号绕过
http://www.xxx.com/login.php?url=http://www.hack.com?www.xxx.com
8. 利用"."绕过
http://www.xxx.com/login.php?url=.hack (可能会跳转到www.xxx.com.hack域名)
http://www.xxx.com/login.php?url=.hack.com (可能会跳转到hack.com域名)
9.重复特殊字符绕过
http://www.xxx.com/login.php?url=///www.hack.com//..
http://www.xxx.com/login.php?url=www.hack.com//..
10.编码;利用IP地址;对IP地址进行8进制、10进制、16进制编码;IPV6地址;更换协议(ftp://、gopher)等等。

四、防御

1、对输入进行验证,严格控制要跳转的域名,不让用户对跳转地址进行任意输入;
2、严格限制子域名,跳转地址采用白名单;
2、从体系架构和涉及规范上进行防范。


参考:
http://cwe.mitre.org/data/definitions/601.html
https://landgrey.me/static/upload/2019-09-15/mofwvdcx.pdf

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李沉肩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值