1.短链概述
短网址服务可以提供一个非常短小的URL以代替原来的可能较长的URL,将长的URL地址缩短。用户访问缩短后的URL时,通常将会重定向到原来的URL。短网址服务主要起源于一些具有字数限制的微博客服务,但是现在广泛用于短信、邮件等。
短网址服务的基本流程:用户将长网址提交到短网址服务中,之后短网址服务经过URL处理之后,利用转换算法对长网址进行转换,最后分别将长网址和短网址存储到数据库之中。部分短网址服务为了防止出现对短地址进行连续转化或者提供一些展示长网址TITLE的功能,所以会对长网址进行访问。
用户访问短网址,短网址服务返回一个302或者301的响应,从而跳转到长网址。这个地方,几乎所有短网址服务商会选择302,因为302方便统计和分析用户属性等数据。
短网址的生成算法大概有三类:大致分为三类:进制算法、随机数算法和HASH算法
1、进制算法
数据库中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
2.短链爆破原理
由于短网址服务自身存在的设计缺陷问题,尤其是一般短网址采用6位或者7位字母和数字的集合,可以被很好的预测,从而被针对性的爆破。而在爆破中最重要的一个步骤就是如何检测当前短网址使用的算法,从而生成该算法对应的字典
进制算法
针对第三方的短网址服务,可以多次输入网址,查看返回短网址是否连续,连续则为进制算法
此外注意,由于个别为分布式短网址服务,id非单一递增,会出现多个字符规律变化,如:87BNwj、87BO82、87BOqw、87BOGz、87BPpD
对于自营短网址服务可以采用以下两个步骤进行:
- 直接访问xx.xxx/1及xx.xxx/2低位等后缀,若均存在基本可以判定使用了进制算法进行转换。
- 对存在记录的后缀进行增加或减少尝试,若均存在记录或者规律间隔存在记录则基本认为使用了进制算法。即:若某短网址存在http://xxx.xx/Abzc4 ,对Abzc4中最后一个单字符{0-Z}共62次变化。若均存在记录或存在a,c,e等有规律间隔情况,则同样可以认为使用了进制算法。
hash算法&随机数算法
对于第三方可以多次输入网址,查看返回短网址是否连续,不连续无规律则为HASH算法&随机数算法
- 直接访问xx.xxx/1及xx.xxx/2低位等后缀,若均不存在则进行步骤2。
- 对存在记录的后缀进行增加或减少尝试,若无明显规律则基本认为为HASH&随机数算法。
3.短链带来的安全问题
短网址敏感信息泄漏
原理:由于部分短网址在传输过程使用了含有敏感权限和敏感信息的长网址,由此造成大量个人信息泄露,则可以爆破短网址服务获取大量服务、系统敏感信息:
例如:
1、获取个人信息
http://xx.xx/auth?contractId=d57f17139247036b72******b5554a830305ec139d
2、获取合同
https://xx.xx/get.action?transaction_id=290414****03784&msg_digest=RUQ2MUQ5NjcxQzc5MjcxQ*******4QTExNTZFNjgzQTJENEExQjc5Nw==
3、重置密码
https://xx.xx/resetPassword?emailType=RESET_PASSWORD&encryptionEmail=***GHOsR%2FMfiNEv8xOC29.&countersign=eyJhbGciOiJIUzUxMiJ9.eyJBQlNPTFV
业务安全风险
案例1:批量注册薅羊毛
1、邀请链接直接发送给邀请人,邀请人点击即可完成注册;
2、邀请链接以短网址发送;
3、批量邀请,爆破短网址,批量点击注册,即可完成薅羊毛;
案例2:赏金活动
某个应用有老用户邀请新用户的赚赏金活动,邀请链接以短网址形式发送给新用户,新用户点击链接之后,则赏金会放到老用户账户之中。那么在这个活动中,攻击者用户A可以随机选择两个手机号,我们分别用用户B和用户C来代替这两个用户,那么攻击用户A邀请随机选择的这两个手机号,之后直接爆破短网址进行确认,则在B和C不知情的情况下让A用户完成了赏金的领取。
案例3:短链源URL可控,导致用户可以利用短链进行钓鱼
引入的基本漏洞风险
1、远程访问功能在过滤不严谨的情况下会造成SSRF
2、部分短网址服务提供了长网址TITLE的展示功能和在当前页展示长网址的功能,在过滤不严谨的情况下也会造成XSS
3、进行拼接查询时会造成SQL注入
4.短链的安全措施
- 加强算法,生成不易被破解的KEY;
- 设置短链接生存周期,过期即失效;
- 增加访问限制,比如访问频率和访问总量;
- 源地址不应包含敏感信息;
- 源地址应做二次鉴权,若特殊情况可结合访问周期进行限制;