短网址安全浅谈
何谓短网址(Short URL)?顾名思义,就是形式上比较短的网址,当前主要是借助短网址来替代原先冗长的网址,方便传输和分享。短网址服务也就是将长网址转换为短网址的服务,这种服务在方便了广大网民的同时也带来了一定的安全风险。
Tencent Blade Team专门对短网址的安全问题进行过研究,也在KCON 2018上进行过分享过部分成果,本文也是对议题《短网址的攻击与防御》的解读和补充。
特别感谢:lake2、Wester、martinzhou
一、短网址基础
短网址服务可以提供一个非常短小的URL以代替原来的可能较长的URL,将长的URL地址缩短。用户访问缩短后的URL时,通常将会重定向到原来的URL。短网址服务主要起源于一些具有字数限制的微博客服务,但是现在广泛用于短信、邮件等。
很多安全问题是跟安全场景相关的,随着场景的不断变化,安全问题也是变化的。短网址的初衷是在微博这种限制字数的公共平台使用,也就是说它基本是公开的,但是后续在个人短信和邮件之中,其实有部分已经是私密的。 这直接引发了短网址第一个比较大的潜在风险。
在了解短网址风险和漏洞之前,我们首先应该了解下短网址是什么以及如何工作。
短网址服务的基本流程:用户将长网址提交到短网址服务中,之后短网址服务经过URL处理之后,利用转换算法对长网址进行转换,最后分别将长网址和短网址存储到数据库之中。部分短网址服务为了防止出现对短地址进行连续转化或者提供一些展示长网址TITLE的功能,所以会对长网址进行访问。
其实对于短网址服务最核心的问题就是短网址的转换算法。那么常用的短网址算法有哪些呢?我们分析了GitHub上star数量最多的十个短网址服务对应的算法,大致分为三类:进制算法、随机数算法和HASH算法。
下面我利用简单的三个小例子介绍下对应的算法:
(1)进制算法:
算法简述:一个以数字、大小写字母共62个字符的任意进制的算法。
数据库中ID递增,当ID为233,则对应短网址计算过程如下:
①设置序列为“0123456789abcdefghijklmnopqrstuvwxyz”
② 233/36=6
③ 233%36= 17
④依次取上述字符的6位,17位,则为6h
其生成之后的短网址为xx.xx/6h
(2)随机数算法:
算法简述:每次对候选字符进行任意次随机位数选择,拼接之后检查是否重复
若要求位数为2,则其对应短地址为计算过程如下:
①设置字符序列“0123456789abcdefghijklmnopqrstuvwxyz”
②根据字符个数设置最大值为35,最小值为0,取2次随机数假设为:6,17
③依次取上述字符的6位和17位,则为6h
其生成之后的短网址为xx.xx/6h
(3)HASH算法:
算法简述:对id进行hash操作( 可选:利用随机数进行加盐),并检查是否重复
设置ID自增,若ID=233,则其对应短地址为计算过程如下:
①取随机数为盐
②对233进行sha1加密为:aaccb8bb2b4c442a7c16a9b209c9ff448c6c5f35:2
③要求位数为7,直接取上述加密结果的前7位为:aaccb8
其生成之后的短网址为xx.xx/2e8c027
了解完长网址转为短网址的流程之后,我们下边主要简单说明下短网址转化为长网址的流程,用户访问短网址,短网址服务返回一个302或者301的响应,从而跳转到长网址。这个地方,几乎所有短网址服务商会选择302,因为302方便统计和分析用户属性等数据。
二、短网址服务风险
由于短网址服务自身存在的设计缺陷问题,尤其是一般短网址采用6位或者7位字母和数字的集合,可以被很好的预测,从而被针对性的爆破。
而在爆破中最重要的一个步骤就是如何检测当前短网址使用的算法,从而生成该算法对应的字典,下边我们给出一些常见的算法检测过程:
1、进制算法
(1)第三方短网址服务
针对第三方的短网址服务,可以多次输入网址,查看返回短网址是否连续,连续则为进制算法,如下:
此外注意,由于个别为分布式短网址服务,id非单一递增,会出现多个字符规律变化,如:87BNwj、87BO82、87BOqw、87BOGz、87BPpD
(2)自营短网址服务:
对于自营短网址服务可以采用以下两个步骤进行,,
① 直接访问xx.xxx/1及xx.xxx/2低位等后缀,若均存在基本可以判定使用了进制算法进行转换。
② 对存在记录的后缀进行增加或减少尝试,若均存在记录或者规律间隔存在记录则基本认为使用了进制算法。
即:若某短网址存在http://xxx.xx/Abzc4 ,对Abzc4中最后一个单字符{0-Z}共62次变化。若均存在记录或存在a,c,e等有规律间隔情况,则同样可以认为使用了进制算法。
2、hash算法&随机数算法
(1)第三方短网址服务
对于第三方可以多次输入网址,查看返回短网址是否连续,不连续无规律则为HASH算法&随机数算法。如下图:
(2)自营短网址服务
① 直接访问xx.xxx/1及xx.xxx/2低位等后缀,若均不存在则进行步骤2。
② 对存在记录的后缀进行增加或减少尝试,若非均匀间隔存在记录则基本认为使用了进制算法。
即:若某短网址存在http://xxx.xx/Abzc4 ,对Abzc4中最后一个单字符{0-Z}共62次变化。若无明显规律则基本认为为HASH&随机数算法
接下来,我们分享一下短网址的两个攻击场景,第一个是由于部分短网址在传输过程使用了含有敏感权限和敏感信息的长网址,由此造成大量个人信息泄露:,第二个是由于短网址的可预测和可爆破,有时候可能会产生一些想象不到的效果。
何谓短网址(Short URL)?顾名思义,就是形式上比较短的网址,当前主要是借助短网址来替代原先冗长的网址,方便传输和分享。短网址服务也就是将长网址转换为短网址的服务,这种服务在方便了广大网民的同时也带来了一定的安全风险。
Tencent Blade Team专门对短网址的安全问题进行过研究,也在KCON 2018上进行过分享过部分成果,本文也是对议题《短网址的攻击与防御》的解读和补充。
特别感谢:lake2、Wester、martinzhou
一、短网址基础
短网址服务可以提供一个非常短小的URL以代替原来的可能较长的URL,将长的URL地址缩短。用户访问缩短后的URL时,通常将会重定向到原来的URL。短网址服务主要起源于一些具有字数限制的微博客服务,但是现在广泛用于短信、邮件等。
很多安全问题是跟安全场景相关的,随着场景的不断变化,安全问题也是变化的。短网址的初衷是在微博这种限制字数的公共平台使用,也就是说它基本是公开的,但是后续在个人短信和邮件之中,其实有部分已经是私密的。 这直接引发了短网址第一个比较大的潜在风险。
在了解短网址风险和漏洞之前,我们首先应该了解下短网址是什么以及如何工作。 本文来自无奈人生安全网
短网址服务的基本流程:用户将长网址提交到短网址服务中,之后短网址服务经过URL处理之后,利用转换算法对长网址进行转换,最后分别将长网址和短网址存储到数据库之中。部分短网址服务为了防止出现对短地址进行连续转化或者提供一些展示长网址TITLE的功能,所以会对长网址进行访问。
其实对于短网址服务最核心的问题就是短网址的转换算法。那么常用的短网址算法有哪些呢?我们分析了GitHub上star数量最多的十个短网址服务对应的算法,大致分为三类:进制算法、随机数算法和HASH算法。
下面我利用简单的三个小例子介绍下对应的算法:
(1)进制算法:
算法简述:一个以数字、大小写字母共62个字符的任意进制的算法。
数据库中ID递增,当ID为233,则对应短网址计算过程如下:
①设置序列为“0123456789abcdefghijklmnopqrstuvwxyz”
② 233/36=6
③ 233%36= 17
④依次取上述字符的6位,17位,则为6h
其生成之后的短网址为xx.xx/6h
(2)随机数算法:
算法简述:每次对候选字符进行任意次随机位数选择,拼接之后检查是否重复
若要求位数为2,则其对应短地址为计算过程如下:
①设置字符序列“0123456789abcdefghijklmnopqrstuvwxyz”
②根据字符个数设置最大值为35,最小值为0,取2次随机数假设为:6,17
③依次取上述字符的6位和17位,则为6h
其生成之后的短网址为xx.xx/6h
(3)HASH算法:
算法简述:对id进行hash操作( 可选:利用随机数进行加盐),并检查是否重复
设置ID自增,若ID=233,则其对应短地址为计算过程如下:
①取随机数为盐
②对233进行sha1加密为:aaccb8bb2b4c442a7c16a9b209c9ff448c6c5f35:2
③要求位数为7,直接取上述加密结果的前7位为:aaccb8
其生成之后的短网址为xx.xx/2e8c027
了解完长网址转为短网址的流程之后,我们下边主要简单说明下短网址转化为长网址的流程,用户访问短网址,短网址服务返回一个302或者301的响应,从而跳转到长网址。这个地方,几乎所有短网址服务商会选择302,因为302方便统计和分析用户属性等数据。
二、短网址服务风险
由于短网址服务自身存在的设计缺陷问题,尤其是一般短网址采用6位或者7位字母和数字的集合,可以被很好的预测,从而被针对性的爆破。
而在爆破中最重要的一个步骤就是如何检测当前短网址使用的算法,从而生成该算法对应的字典,下边我们给出一些常见的算法检测过程:
1、进制算法
(1)第三方短网址服务
针对第三方的短网址服务,可以多次输入网址,查看返回短网址是否连续,连续则为进制算法,如下:
此外注意,由于个别为分布式短网址服务,id非单一递增,会出现多个字符规律变化,如:87BNwj、87BO82、87BOqw、87BOGz、87BPpD
(2)自营短网址服务:
对于自营短网址服务可以采用以下两个步骤进行,,
① 直接访问xx.xxx/1及xx.xxx/2低位等后缀,若均存在基本可以判定使用了进制算法进行转换。
② 对存在记录的后缀进行增加或减少尝试,若均存在记录或者规律间隔存在记录则基本认为使用了进制算法。
即:若某短网址存在http://xxx.xx/Abzc4 ,对Abzc4中最后一个单字符{0-Z}共62次变化。若均存在记录或存在a,c,e等有规律间隔情况,则同样可以认为使用了进制算法。
2、hash算法&随机数算法
(1)第三方短网址服务
对于第三方可以多次输入网址,查看返回短网址是否连续,不连续无规律则为HASH算法&随机数算法。如下图:
(2)自营短网址服务
① 直接访问xx.xxx/1及xx.xxx/2低位等后缀,若均不存在则进行步骤2。
② 对存在记录的后缀进行增加或减少尝试,若非均匀间隔存在记录则基本认为使用了进制算法。
即:若某短网址存在http://xxx.xx/Abzc4 ,对Abzc4中最后一个单字符{0-Z}共62次变化。若无明显规律则基本认为为HASH&随机数算法
接下来,我们分享一下短网址的两个攻击场景,第一个是由于部分短网址在传输过程使用了含有敏感权限和敏感信息的长网址,由此造成大量个人信息泄露:,第二个是由于短网址的可预测和可爆破,有时候可能会产生一些想象不到的效果。
本文来自无奈人生安全网