何謂短網(wǎng)址(Short URL)?顧名思義,就是形式上比較短的網(wǎng)址,當(dāng)前主要是借助短網(wǎng)址來(lái)替代原先冗長(zhǎng)的網(wǎng)址,方便傳輸和分享。短網(wǎng)址服務(wù)也就是將長(zhǎng)網(wǎng)址轉(zhuǎn)換為短網(wǎng)址的服務(wù),這種服務(wù)在方便了廣大網(wǎng)民的同時(shí)也帶來(lái)了一定的安全風(fēng)險(xiǎn)。
Tencent Blade Team專(zhuān)門(mén)對(duì)短網(wǎng)址的安全問(wèn)題進(jìn)行過(guò)研究,也在KCON 2018上進(jìn)行過(guò)分享過(guò)部分成果,本文也是對(duì)議題《短網(wǎng)址的攻擊與防御》的解讀和補(bǔ)充。
特別感謝:lake2、Wester、martinzhou
一、短網(wǎng)址基礎(chǔ)
短網(wǎng)址服務(wù)可以提供一個(gè)非常短小的URL以代替原來(lái)的可能較長(zhǎng)的URL,將長(zhǎng)的URL地址縮短。用戶訪問(wèn)縮短后的URL時(shí),通常將會(huì)重定向到原來(lái)的URL。短網(wǎng)址服務(wù)主要起源于一些具有字?jǐn)?shù)限制的微博客服務(wù),但是現(xiàn)在廣泛用于短信、郵件等。
很多安全問(wèn)題是跟安全場(chǎng)景相關(guān)的,隨著場(chǎng)景的不斷變化,安全問(wèn)題也是變化的。短網(wǎng)址的初衷是在微博這種限制字?jǐn)?shù)的公共平臺(tái)使用,也就是說(shuō)它基本是公開(kāi)的,但是后續(xù)在個(gè)人短信和郵件之中,其實(shí)有部分已經(jīng)是私密的。 這直接引發(fā)了短網(wǎng)址第一個(gè)比較大的潛在風(fēng)險(xiǎn)。
在了解短網(wǎng)址風(fēng)險(xiǎn)和漏洞之前,我們首先應(yīng)該了解下短網(wǎng)址是什么以及如何工作。
短網(wǎng)址服務(wù)的基本流程:用戶將長(zhǎng)網(wǎng)址提交到短網(wǎng)址服務(wù)中,之后短網(wǎng)址服務(wù)經(jīng)過(guò)URL處理之后,利用轉(zhuǎn)換算法對(duì)長(zhǎng)網(wǎng)址進(jìn)行轉(zhuǎn)換,最后分別將長(zhǎng)網(wǎng)址和短網(wǎng)址存儲(chǔ)到數(shù)據(jù)庫(kù)之中。部分短網(wǎng)址服務(wù)為了防止出現(xiàn)對(duì)短地址進(jìn)行連續(xù)轉(zhuǎn)化或者提供一些展示長(zhǎng)網(wǎng)址TITLE的功能,所以會(huì)對(duì)長(zhǎng)網(wǎng)址進(jìn)行訪問(wèn)。

其實(shí)對(duì)于短網(wǎng)址服務(wù)最核心的問(wèn)題就是短網(wǎng)址的轉(zhuǎn)換算法。那么常用的短網(wǎng)址算法有哪些呢?我們分析了GitHub上star數(shù)量最多的十個(gè)短網(wǎng)址服務(wù)對(duì)應(yīng)的算法,大致分為三類(lèi):進(jìn)制算法、隨機(jī)數(shù)算法和HASH算法。
下面我利用簡(jiǎn)單的三個(gè)小例子介紹下對(duì)應(yīng)的算法:
(1)進(jìn)制算法:
算法簡(jiǎn)述:一個(gè)以數(shù)字、大小寫(xiě)字母共62個(gè)字符的任意進(jìn)制的算法。
數(shù)據(jù)庫(kù)中ID遞增,當(dāng)ID為233,則對(duì)應(yīng)短網(wǎng)址計(jì)算過(guò)程如下:
①設(shè)置序列為“0123456789abcdefghijklmnopqrstuvwxyz”
② 233/36=6
③ 233%36= 17
④依次取上述字符的6位,17位,則為6h
其生成之后的短網(wǎng)址為xx.xx/6h
(2)隨機(jī)數(shù)算法:
算法簡(jiǎn)述:每次對(duì)候選字符進(jìn)行任意次隨機(jī)位數(shù)選擇,拼接之后檢查是否重復(fù)
若要求位數(shù)為2,則其對(duì)應(yīng)短地址為計(jì)算過(guò)程如下:
①設(shè)置字符序列“0123456789abcdefghijklmnopqrstuvwxyz”
②根據(jù)字符個(gè)數(shù)設(shè)置最大值為35,最小值為0,取2次隨機(jī)數(shù)假設(shè)為:6,17
③依次取上述字符的6位和17位,則為6h
其生成之后的短網(wǎng)址為xx.xx/6h
(3)HASH算法:
算法簡(jiǎn)述:對(duì)id進(jìn)行hash操作( 可選:利用隨機(jī)數(shù)進(jìn)行加鹽),并檢查是否重復(fù)
設(shè)置ID自增,若ID=233,則其對(duì)應(yīng)短地址為計(jì)算過(guò)程如下:
①取隨機(jī)數(shù)為鹽
②對(duì)233進(jìn)行sha1加密為:aaccb8bb2b4c442a7c16a9b209c9ff448c6c5f35:2
③要求位數(shù)為7,直接取上述加密結(jié)果的前7位為:aaccb8
其生成之后的短網(wǎng)址為xx.xx/2e8c027
了解完長(zhǎng)網(wǎng)址轉(zhuǎn)為短網(wǎng)址的流程之后,我們下邊主要簡(jiǎn)單說(shuō)明下短網(wǎng)址轉(zhuǎn)化為長(zhǎng)網(wǎng)址的流程,用戶訪問(wèn)短網(wǎng)址,短網(wǎng)址服務(wù)返回一個(gè)302或者301的響應(yīng),從而跳轉(zhuǎn)到長(zhǎng)網(wǎng)址。這個(gè)地方,幾乎所有短網(wǎng)址服務(wù)商會(huì)選擇302,因?yàn)?02方便統(tǒng)計(jì)和分析用戶屬性等數(shù)據(jù)。

二、短網(wǎng)址服務(wù)風(fēng)險(xiǎn)
由于短網(wǎng)址服務(wù)自身存在的設(shè)計(jì)缺陷問(wèn)題,尤其是一般短網(wǎng)址采用6位或者7位字母和數(shù)字的集合,可以被很好的預(yù)測(cè),從而被針對(duì)性的爆破。
而在爆破中最重要的一個(gè)步驟就是如何檢測(cè)當(dāng)前短網(wǎng)址使用的算法,從而生成該算法對(duì)應(yīng)的字典,下邊我們給出一些常見(jiàn)的算法檢測(cè)過(guò)程:
1、進(jìn)制算法
(1)第三方短網(wǎng)址服務(wù)
針對(duì)第三方的短網(wǎng)址服務(wù),可以多次輸入網(wǎng)址,查看返回短網(wǎng)址是否連續(xù),連續(xù)則為進(jìn)制算法,如下:

此外注意,由于個(gè)別為分布式短網(wǎng)址服務(wù),id非單一遞增,會(huì)出現(xiàn)多個(gè)字符規(guī)律變化,如:87BNwj、87BO82、87BOqw、87BOGz、87BPpD
(2)自營(yíng)短網(wǎng)址服務(wù):
對(duì)于自營(yíng)短網(wǎng)址服務(wù)可以采用以下兩個(gè)步驟進(jìn)行,,
① 直接訪問(wèn)xx.xxx/1及xx.xxx/2低位等后綴,若均存在基本可以判定使用了進(jìn)制算法進(jìn)行轉(zhuǎn)換。
② 對(duì)存在記錄的后綴進(jìn)行增加或減少嘗試,若均存在記錄或者規(guī)律間隔存在記錄則基本認(rèn)為使用了進(jìn)制算法。
即:若某短網(wǎng)址存在http://xxx.xx/Abzc4 ,對(duì)Abzc4中最后一個(gè)單字符{0-Z}共62次變化。若均存在記錄或存在a,c,e等有規(guī)律間隔情況,則同樣可以認(rèn)為使用了進(jìn)制算法。
2、hash算法&隨機(jī)數(shù)算法
(1)第三方短網(wǎng)址服務(wù)
對(duì)于第三方可以多次輸入網(wǎng)址,查看返回短網(wǎng)址是否連續(xù),不連續(xù)無(wú)規(guī)律則為HASH算法&隨機(jī)數(shù)算法。如下圖:

(2)自營(yíng)短網(wǎng)址服務(wù)
① 直接訪問(wèn)xx.xxx/1及xx.xxx/2低位等后綴,若均不存在則進(jìn)行步驟2。
② 對(duì)存在記錄的后綴進(jìn)行增加或減少嘗試,若非均勻間隔存在記錄則基本認(rèn)為使用了進(jìn)制算法。
即:若某短網(wǎng)址存在http://xxx.xx/Abzc4 ,對(duì)Abzc4中最后一個(gè)單字符{0-Z}共62次變化。若無(wú)明顯規(guī)律則基本認(rèn)為為HASH&隨機(jī)數(shù)算法
接下來(lái),我們分享一下短網(wǎng)址的兩個(gè)攻擊場(chǎng)景,第一個(gè)是由于部分短網(wǎng)址在傳輸過(guò)程使用了含有敏感權(quán)限和敏感信息的長(zhǎng)網(wǎng)址,由此造成大量個(gè)人信息泄露:,第二個(gè)是由于短網(wǎng)址的可預(yù)測(cè)和可爆破,有時(shí)候可能會(huì)產(chǎn)生一些想象不到的效果。 案例一:爆破短網(wǎng)址服務(wù)獲取大量服務(wù)、系統(tǒng)敏感信息:
1、獲取個(gè)人信息
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.eyJBQlNPTFVURV9FWFBJUkVfVElNRV9NSUxMUyI6IjE1M******zA1OTMxNjU4OTQiLCJORVdfRU1BSUwiOiJ5YW54aXUwNjE0QGdtYWlsLmNvbSIsIlRPS0VOX1RZUEUiOiJSRVNFVF9QQVNTV09SRCIsIkVNQUlMIjoieWFueGl1MDYxNEBnbWFpbC5jb20ifQ
其實(shí)單從上邊的爆破出來(lái)的鏈接來(lái)看,每一個(gè)都極其的難以猜解,但是正是因?yàn)槭褂昧硕叹W(wǎng)址,從而把一些非常難猜解的高維度信息降低成了非常容易預(yù)測(cè)的低維度信息,就像你造了很堅(jiān)固的房門(mén),但是別人手里卻有備用鑰匙。
案例二:業(yè)務(wù)安全攻擊鏈
1、邀請(qǐng)鏈接直接發(fā)送給邀請(qǐng)人,邀請(qǐng)人點(diǎn)擊即可完成注冊(cè);
2、邀請(qǐng)鏈接以短網(wǎng)址發(fā)送;
3、批量邀請(qǐng),爆破短網(wǎng)址,批量點(diǎn)擊注冊(cè),即可完成薅羊毛;
某個(gè)應(yīng)用有老用戶邀請(qǐng)新用戶的賺賞金活動(dòng),邀請(qǐng)鏈接以短網(wǎng)址形式發(fā)送給新用戶,新用戶點(diǎn)擊鏈接之后,則賞金會(huì)放到老用戶賬戶之中。那么在這個(gè)活動(dòng)中,攻擊者用戶A可以隨機(jī)選擇兩個(gè)手機(jī)號(hào),我們分別用用戶B和用戶C來(lái)代替這兩個(gè)用戶,那么攻擊用戶A邀請(qǐng)隨機(jī)選擇的這兩個(gè)手機(jī)號(hào),之后直接爆破短網(wǎng)址進(jìn)行確認(rèn),則在B和C不知情的情況下完成了賞金的領(lǐng)取。
三、短網(wǎng)址服務(wù)漏洞
其實(shí)當(dāng)短網(wǎng)址出現(xiàn)短網(wǎng)址被猜解、爆破的問(wèn)題,那么是不是會(huì)出現(xiàn)其他的問(wèn)題,所以我們還對(duì)其進(jìn)行了其他的安全測(cè)試。
1、SSRF安全問(wèn)題
遠(yuǎn)程訪問(wèn)功能在過(guò)濾不嚴(yán)謹(jǐn)?shù)那闆r下會(huì)造成SSRF,測(cè)試時(shí)使用自定義域名綁定一個(gè)內(nèi)網(wǎng)地址之后進(jìn)行訪問(wèn),該短網(wǎng)址服務(wù)展示了長(zhǎng)網(wǎng)址的TITLE,如下成功訪問(wèn)到了內(nèi)網(wǎng)地址:

2、獲取TITLE功能和展示長(zhǎng)網(wǎng)址頁(yè)面,在過(guò)濾不嚴(yán)謹(jǐn)?shù)那闆r下,造成XSS。
部分短網(wǎng)址服務(wù)提供了長(zhǎng)網(wǎng)址TITLE的展示功能和在當(dāng)前頁(yè)展示長(zhǎng)網(wǎng)址的功能,在過(guò)濾不嚴(yán)謹(jǐn)?shù)那闆r下也會(huì)造成xss。

如上圖中cve為在展示長(zhǎng)網(wǎng)址頁(yè)面造成了xss問(wèn)題。而同時(shí)取title并在頁(yè)面上展示也會(huì)造成xss,比如可以構(gòu)造payload:“alert(1)“。
3、sql注入問(wèn)題
進(jìn)行拼接查詢時(shí)會(huì)造成SQL注入。在測(cè)試中我們先進(jìn)行了and 1=1的測(cè)試,發(fā)現(xiàn)可以正常讀取,如下圖:

之后再進(jìn)行數(shù)據(jù)庫(kù)版本的聯(lián)合注入,如下圖:

四、短網(wǎng)址防御實(shí)踐
對(duì)于短網(wǎng)址服務(wù),建議以下措施提升安全性:
1、增加單IP訪問(wèn)頻率和單IP訪問(wèn)總量的限制,超過(guò)閾值進(jìn)行封禁。
2、對(duì)包含權(quán)限、敏感信息的短網(wǎng)址進(jìn)行過(guò)期處理。
3、對(duì)包含權(quán)限、敏感信息的長(zhǎng)網(wǎng)址增加二次鑒權(quán)。
五、影響范圍
秉承“負(fù)責(zé)任的漏洞披露過(guò)程”,我們?cè)跍y(cè)試過(guò)程中發(fā)現(xiàn)的短網(wǎng)址安全問(wèn)題,均已通過(guò)對(duì)應(yīng)SRC通知相關(guān)廠商,廠商均已快速修復(fù)完畢。
精力有限,未能一一測(cè)試,還請(qǐng)各廠商自測(cè)修復(fù)。
|