URL重定向攻击

重定向类型

一,未做校验直接使用用户的输入进行URL重定向

产生原因

①.代码层忽视URL跳转漏洞,或不知道/不认为这是个漏洞;
②代码层过滤不严,用取子串、取后缀等方法简单判断,代码逻辑可被绕过; (属于开发人员意识到该风险已经设计实现了重定向校验,但是校验方法有漏洞,导致绕过)
③对传入参数操作(域名剪切/拼接/重组)和判断不当,导致绕过;属于开发人员意识到该风险已经设计实现了重定向校验,但是校验方法有漏洞,导致绕过
④原始语言自带的解析URL、判断域名的函数库出现逻辑漏洞或者意外特性;该问题源于开发者使用函数库自带的安全特性去校验URL合法时存在漏洞,造成校验的绕过。
⑤CVE-2017-7233讲解
服务器/容器特性、浏览器等对标准URL协议解析处理等差异性导致被绕过;

漏洞成因:

meta标签内跳转
js跳转
header跳转

meta的这种标签跳转
在这里插入图片描述

①直接重定向

<a href="http://bank.example.com/redirect?url=http://attacker.example.net">

②利用domain%2F进行重定向

#如
https://64.38.230.2/tipping/purchase_success/?product_code=4137&prejoin_data=domain%2Fevil.com
#重定向到了-->
`https://evil.com/tipping/purchase_success/?product_code=4137`

二、重定向导致泄露凭证

重定向导致ID,token泄露
即重定向请求发送到客户端后,客户端返回uid和token给url

https://mijn.werkenbijdefensie.nl/login?redirect_url=https://google.com
#构造
#返回-->进而实现了可以进行csrf攻击
https://www.google.com/?user=xxx&token=xxxx&channel=mijnwerkenbijdefensie

三.设计与实现缺陷绕过
在这里插入图片描述

拼接实现重定向绕过–>即构造内容绕,原因绕白名单导致的

#如
https://www.digits.com/login?consumer_key=9I4iINIyd0R01qEPEwT9IC6RE&host=https://www.digits.com&callback_url=https://www.periscope.tv
#将callback_url改为下面这个即可实现绕过
callback_url=https://attacker.com%ff@www.periscope.tv

原因

1、@的作用:在URL中用于标识用户的凭据,形式如:
http://user:password@XXX.com:8080/login
一般使用该符号绕过主机host的检测限制
2、通过通过fuzzing探测后端检测机制最后发现:系统最终返回的重定向的URL字符串会将非ASCII码转为符号“?”。
3、URL中的符号“?”:分隔实际的URL和参数,?符号后面为参数
所以上述能够重定向恶意URL的原理就是:

系统接收到callback_url参数值:`https://attacker.com%ff@www.periscope.tv`
识别到@符号,取@符号后面的URL进行host识别,www.periscope.tv识别通过
程序将字符串“`https://attacker.com{%ff}@www.periscope.tv”进行转义:将非ASCII码转为符号“?”,所以最后的代重定向的URL字符串为“https://attacker.com?@www.periscope.tv”。`(注:{}表示此处应该为url解码后的值,因为%ff解码后为不可见字符,所以这里为了文档化写成该表示)
浏览器接收到`https://attacker.com?@www.periscope.tv`,并访问该地址。由于?是分割URL参数的标志,此时@符号转为参数部分,最终attacker.com变为了host,客户端浏览器访问了攻击者定义好的恶意网页
这里犯的错误就是在使用不可信数据前没有标准化字符串为统一确定的标准格式,上述应该是先进行了使用(根据@符号定位取出host),在格式化字符串(将非ASCII转义为?)。如果先进行格式化,则将会通过?定位HOST。任何不可信数据使用前都应该确定有一个标准的格式再进行合法性校验。

不同框架重定向的不同方法

Django框架
重定向到百度

10.164.146.143:8000/redirectURLDemo?url=http://www.baidu.com
http://10.164.146.143:8000/redirectURLDemo?url=http://www.baidu.com

python语言

http://127.0.0.1:8000/URLRedirect/?url=http://www.baidu.com

java语言

response.sendRedirect[request.getParament["url"]);]

典型几门语言
在这里插入图片描述

重定向利用

利用
①构造xss漏洞
?url=javascript:alert
②构造实现url跳转结合钓鱼或者跳转获取到认证
③获取用户token,cookie

安全编码建议

校验+检验机制–>url白名单校验+检测是否是合法规则的url(典型方法–>编码时一般会在校验符合规则的URL时犯错误,例如使用indexof、contains、startwith等局部校验,必须全量校验URL中的所有字符满足规则,否则很容易绕过。)
删除机制
即请求中加入了%0d%0a类型的参数时(即非正常参数–>进行删除编码)
静态机制
后台中配置好url与参数值,且给一个索引,进行配置跳转

典型挖掘点

在js中 寻找
/direct?url=类的路径

redirect
redirect_to
redirect_url
url
jump
jump_to
target
to
link
linkto
Domain
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

goddemon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值