php 跳转到指定url_初识URL重定向漏洞

1

以上文章由作者【撕夜】有赏投稿,也欢迎广大朋友继续投稿,详情可点击OSRC重金征集文稿!!!了解~~。

60e3b9fafa0b804ed0e53e01f80b447e.png

简介

URL重定向/跳转漏洞,顾名思义就是服务端对用户通过某参数传入的url变量未进行检查和控制或过滤规则不够严谨,最终导致跳转至恶意地址。危害显而易见,跳转到攻击者控制的网站可利用钓鱼获取用户的个人信息和登录凭证等。(虽然低危奖金较低,但是一旦找到突破点几乎整站url跳转都可bypass)

漏洞场景

以下内容根据本人在src中遇到的实际情况进行分析。

漏洞成因

一般通过以下几种方式实现URL跳转:

META标签跳转

javascript跳转(某些情况下可以实现xss)

header跳转

URL可控会将用户的浏览器从可信站点转至不可信站点,若跳转同时附带了某些敏感数据(如用户登陆凭证,以下实例将会遇到)可泄露给攻击者。

php中典型的登录跳转实例:

php<?php $url = $_GET['goto'];header("Location: $url");

如果goto参数没有任何限制,攻击者可以将以下链接发给某用户来实现钓鱼等目的。

http://www.urlredirect.com/login.php?goto=http://hack.com****

以下为实际漏洞挖掘时遇到的情况:

1. 用户可控参数无任何过滤,可直接跳转至任意网站。2. 限制url为可信任地址,可利用white.com@baidu.com等其他方式绕过。3. 未限制http/https协议但是限制url形式需为:www.xxsrc.com/dir/。   可利用///www.xxsrc.com/../a.com绕过4. url白名单,此时可通过目标网站的其他可绕过或无限制的url跳转进行利用。

常见的参数名
returnUrlredirectredirectUrlredirectPathgotototargeturlreurlnextjumpUrltargetlinktolink
通常发生漏洞的位置

1. 用户注册、登录、退出登录等位置,认证完成后会跳转(很常见)2. 站内友情链接及点击其他网址链接时3. 网站报错页面,可能会跳转至前一页面

浏览器是如何对URL进行解析的

URL组成结构

ef00b018224ed7b66b6295f40bae7071.png

第一部分:协议名(以单个冒号结束)第二部分:用户信息 也就是账号密码!(登陆ftp时常用)第三部分:主机名(域名)第四部分:端口第五部分:查询 第六部分:片段ID

分析

此处只对一些不常见问题做一些简单的分析。

1. 以”?“,”#“,”/“为分隔符提取信息。

举个例子

http://xxsrc.com&par=test@www.baidu.com

由于浏览器提取协议名完成后,剩下部分并无以上提到的三个符号,因此浏览器无法获得一个字符串来获得主机地址,而后面存在@符号便被认为@之前的是认证信息,因此将访问www.baidu.com。

#以开头的php代码为例,尝试访问以下链接:

localhost/index.php?goto=http://www.baidu.com^parm=test@evi1.cn

注:不同浏览器处理不同,在chrome中将直接访问evi1.cn而firefox中会提示以www.baidu****登录evi1.cn网站。

2. 浏览器可接受的url格式

   /www.baidu.com/   //www.baidu.com/   ///@www.baidu.com/   诸如以上形式,@符号可有可无,起始位置反斜线可多可少。   http:/\/baidu.com   http:\\\//baidu.com   /\/baidu.com

利用方法

一些案例

1. 没有做任何限制,参数后直接跟恶意网址即可(某edusrc)

#登录后跳转http://*.***.edu.cn/RSP/PC/Account/Login?reurl=http://www.baidu.com

2. 协议限制

#只要url地址含有http/https即可http://xxsrc.com/redirect.php?url=https://www.baidu.com

3. 域名字符串检测

1) 字符串中存在白名单域名即跳转//伪代码如下

<?php $url = $_GET['url'];if(strstr($url,"www.**src.com") !== false){    header("Location: " . $url);}else{    die("Forbidden");}#bypasshttps://www.**src.com/redirect.php?url=http://www.**src.com.www.attacker.com/

2) 结尾为白名单域名即跳转

#bypasshttps://www.**src.com/redirect.php?url=http://www.attacker.com/www.**src.com或者购买xxx**src.comhttps://www.**src.com/redirect.php?url=http://www.attacker.com/www.xxx**src.com

3) 白名单站点多次重定向#某src实例

f3e71f9a3ed5a8b0fa6decba57ccb133.png

3a338c8fbe84b07cb9424cea67e8e120.png

a1e0f1a49bf35b4a0cf9d259bc848e27.png

4) 畸形地址绕过案例一:某src实例

2253aa4a5103a16b79901bd5046efed8.png

a1432ffa9d43f8695863f647273ecd35.png

可以理解为,www.src.com/被当成目录,在进行location或其他处理跳转时被后面的../跳过,直接访问后续url。

案例二:hackerone一个有趣的[案例]

1. 利用“#”绕过

http://localhost/redirect.php?url=http://evi1.cn#baidu.com/

2. 利用“@”绕过

http://localhost/redirect.php?url=http://baidu.com@evi1.cn

3. 利用“?”绕过

http://localhost/redirect.php?url=http://evi1.cn?www.baidu.com

4. 利用“\.”绕过

http://localhost/redirect.php?url=http://evi1.cn\.www.baidu.com

5. 重复特殊字符

http://localhost/redirect.php?url=baidu.com/../www.evi1.cn

6. 白名单字符串

http://localhost/redirect.php?url=http://evilbaidu.com
其他bypass思路

之所以说其他其实只是可以实现的一些姿势,但在本人挖掘漏洞过程中并未实际成功利用过。

1. 利用ip而非域名绕过 2. 利用"\"绕过  eg:http://localhost/redirect.php?url=http://evi1.cn\www.baidu.com 3. 利用十进制、八进制、十六进制等ip方式 4. 利用ipv6而非ipv4地址

修复方案

1.使URL跳转参数用户不可控

2.跳转地址采用白名单机制

3.合理的校验跳转目标地址,非己方地址时提醒用户注意风险

071daf0c9a9f6ca114a843f42d150e70.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值