URL重定向漏洞检测插件

admin 2023年8月20日23:05:50评论33 views字数 2565阅读8分33秒阅读模式

URL重定向漏洞检测插件本文作者Rookie,预计阅读时间7分钟

URL重定向漏洞检测插件

URL重定向漏洞

漏洞信息

URL重定向漏洞是由于目标网站未对程序跳转的URL地址及参数做合法性判断,导致应用程序直接跳转到参数中指定的的URL地址。

攻击者可通过将跳转地址修改为指向恶意站点。

比较容易出现的地方是登录、注册、访问订单信息、以及一些需要回到上个页面的地方。

此漏洞通常用于发起网络钓鱼、诈骗甚至窃取用户凭证等。

下面是一个比较典型的场景

URL重定向漏洞检测插件

漏洞本身是无法直接危害系统和用户安全的,按照通用漏洞定级标准属于低危,但该漏洞可被利用于钓鱼,在工信部远程检测工作中,该漏洞定义为高危。

漏洞检测

url重定向漏洞的检测初看会很像SSRF漏洞的检测:

URL重定向漏洞检测插件

但是仔细思考一下会发现这样并不合理,因为url重定向漏洞的跳转是针对客户端的,而客户端的跳转并不只有302一种方式,还是一些方式是使用其他浏览器前端的方式来完成跳转。

跳转方式

常见的跳转方式一共有三类(本质上是两类:一种http头,一种JS操作)

  • HTTP 响应头:

  • Location 最常见的302跳转
  • Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。类似Refresh: 5;URL=https://yaklang.com/
  • meta 标签:

    meta标签实现跳转的本质就是为添加一个指定的头,这个标签可以可以添加Refresh头,类似<meta http-equiv="refresh" content="5;URL=https://yaklang.com/">

  • JS(location)

    JS操作页面主要是操作 window.location对象,比如 window.location.href ="https://yaklang.com/"

  • 上述的检测方式只能检测到HTTP响应头直接跳转的情况,如果跳转是通过前端来完成,缺少浏览器渲染解析的扫描插件就无法检测出来。

    自动检测插件

    整体流程

    针对插件检测漏洞来说,就需要通过分析请求响应包来确定漏洞是否存在。

    URL重定向漏洞检测插件

    检测参数与确认输出位置

    url重定向漏洞的出现位置一般来说场景相对复杂,参数量不会太少,直接无脑对所有参数进行测试是不太合适的,应该筛选部分可疑的参数进行测试,期望的效果会更好。

    参数检测只有两个标准,一个是参数名是否敏感,一个是参数值是否为url或者path。

    在Yaklang里有着完善的测试基础设施,re库下的函数可以很简单的检测出第二标准

    len(re.ExtractURL(value) > 0 ||  len(re.ExtractPath(value))
                

    获取到需要检测的参数,首先需要去定位参数输出的位置,可以使用原值拼接随机字符串的方式来构造特征字符串,这样产生的字符串大概率合法。

    检查漏洞

    获取到拥有输出信息位置后的可疑参数后,开始对每一个参数进行测试。不同的位置采用不同的测试手法,但是本质上就是两个阶段:

    • 找到可能会被用于跳转的 输出值
    • 解析输出值(url)的host是否是预期的

    这里着重介绍一下JS的部分

    JS解析

    Yaklang依靠了成熟的轻量级在 Go 语言中嵌入 JavaScript 解释器的库——"otto",对其封装后Yaklang可以解析一段JS代码成为AST。

    本插件对JS的解析就是通过AST遍历,找到会自动执行的location重定向语句。

    下面是对Expression节点解析的代码

    expressionCheck = func(stat,payload){
        node = stat
        inerType = js.GetSTType(stat)
        if inerType == "ExpressionStatement"{
            inerType = js.GetSTType(stat.Expression)
            node = stat.Expression
        }
        switch inerType {
            case "CallExpression":
                if js.GetSTType(node.Callee) == "DotExpression"{
                    if DotExprCheck(node,payload){
                        return true
                    }
                }else if js.GetSTType(node.Callee) == "Identifier"{
                    if node.Callee.Name == "setTimeout"{
                        if js.GetSTType(node.ArgumentList[0]) == "FunctionLiteral"{
                            if jsAstCheck(node.ArgumentList[0].Body.List,payload){
                                return true
                            }
                        }
                        if expressionCheck(node.ArgumentList[0],payload){
                            return true
                        }
                    }
                    
                }
            case "AssignExpression":
                if js.GetSTType(node.Left) == "DotExpression"{
                    if AssignExprCheck(node,payload){
                        return true
                    }
                }
        }
    }

    测试

    针对Vulinbox中几个漏洞检测

    靶场
    预期
    检测结果
    header location重定向 有漏洞 有漏洞
    meta 重定向-无等待 有漏洞 有漏洞
    meta 重定向-等待5s 有漏洞 有漏洞
    window.location.replace 有漏洞 有漏洞
    window.location.hr 有漏洞 有漏洞
    window.location.assign 有漏洞 有漏洞
    URL重定向漏洞检测插件

    更新日志

    URL重定向漏洞检测插件
    Yakit v1.2.3-sp4
    URL重定向漏洞检测插件
    URL重定向漏洞检测插件
    URL重定向漏洞检测插件
    Yaklang 1.2.4-sp1/sp2
    URL重定向漏洞检测插件
    URL重定向漏洞检测插件

    More

    YAK官方资源

    YAK 语言官方教程:
    https://yaklang.com/docs/intro/
    Yakit 视频教程:
    https://space.bilibili.com/437503777
    Github下载地址:
    https://github.com/yaklang/yakit
    Yakit官网下载地址:
    https://yaklang.com/
    Yakit安装文档:
    https://yaklang.com/products/download_and_install
    Yakit使用文档:
    https://yaklang.com/products/intro/
    常见问题速查:
    https://yaklang.com/products/FAQ

    原文始发于微信公众号(Yak Project):URL重定向漏洞检测插件

    • 左青龙
    • 微信扫一扫
    • weinxin
    • 右白虎
    • 微信扫一扫
    • weinxin
    admin
    • 本文由 发表于 2023年8月20日23:05:50
    • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                     URL重定向漏洞检测插件http://cn-sec.com/archives/1963300.html

    发表评论

    匿名网友 填写信息