QQ重大漏洞:教你通過QQ號獲取綁定手機號

偶有奇想,我們可以通過手機號來搜索獲取其對應的QQ號,那麼,反過來呢?

一,縮小範圍

由於手機號屬於隱私數據,騰訊QQ並沒有直接給出通過QQ號查找對應手機號的接口。

國內的手機號有十一位數字,從數學的角度上來說,包含了10^11種可能。如果遍歷這10^11個數據,通過QQ中手機號查找QQ號的接口來尋找,未免太過費時費力,根據網上查到的資料,同一個QQ號,在十分鐘內只能進行30次查詢(未驗證)。因此,直接遍歷的方法不現實。

在這10^13個數據中,包含著大量的可去除的無用數據。我們很容易就能想到,去除無用數據,縮小範圍。

1,通過“找回密碼”

在所有需要密碼的社交軟件中,都會有處理用戶遺忘密碼情況的機制(通常為“找回密碼”或“重置密碼”),QQ也不例外。

通過搜索“QQ 找回密碼”,很容易可以進到找回密碼的頁面,輸入對應的QQ號,選擇“驗證密保找回密碼”,得到如下彈窗:

QQ重大漏洞:教你通過QQ號獲取綁定手機號

Bingo!

現在我們獲取到了手機號十一位數字中的五位(前三位與後兩位)!

2,通過號碼歸屬地區

即便如此,現在依然有一百萬種可能的情況,依然不適合遍歷的方法。我們需要進一步縮小範圍。

以什麼為篩選條件呢?位置。

目前我國使用的手機號碼為11位數字,我們的手機號可以分為三段,都有不同的編碼含義:前3位是網絡識別號、4-7位是地區編碼(HLR歸屬位置寄存器)、8-11位是用戶號碼(隨機分配)。

現在,我們已經得到了,手機號碼的前三位代表了運營商,之後四位代表了地區。顯然,我們可以通過遍歷手機號中的4-7位,即一萬個數據,以所屬地區為篩選條件進一步縮小範圍。

此處,我採用百度APIStore中的通過手機號查詢歸屬地的API來進行查詢,該API查詢返回結果如下(測試了一個手機號,已略去):

{“data”:{“areacode”:”0510”,”city”:”無錫市”,”operator”:”電信177卡”,”phone”:”177**77”,”postcode”:”214000”,”province”:”江蘇”},”error”:0,”msg”:”succeed”}

遍歷代碼如下(以查詢所在地“上海”為例):

public static void main(String[] args0) throws IOException {FileWriter fileWriter = new FileWriter("/Users/huang/test/test1.txt");String httpUrl = "http://apis.baidu.com/chazhao/mobilesearch/phonesearch";String httpArg = "";for (int i = 0; i < 9999; i++) {if (i >= 1000) {httpArg = "phone=178" + String.valueOf(i) + "0077";} else if (i >= 100) {httpArg = "phone=1780" + String.valueOf(i) + "0077";} else if (i >= 10) {httpArg = "phone=17800" + String.valueOf(i) + "0077";} else {httpArg = "phone=178000" + String.valueOf(i) + "0077";}String jsonResult = request(httpUrl, httpArg);if (jsonResult.contains("上海")) {fileWriter.write(httpArg + "\n\t");}}fileWriter.flush();fileWriter.close();}/*** @param urlAll* :請求接口* @param httpArg* :參數* @return 返回結果*/public static String request(String httpUrl, String httpArg) {BufferedReader reader = null;String result = null;StringBuffer sbf = new StringBuffer();httpUrl = httpUrl + "?" + httpArg;try {URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");// 填入apikey到HTTP headerconnection.setRequestProperty("apikey", "您自己的apikey");connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();result = sbf.toString();} catch (Exception e) {e.printStackTrace();}return result;}

在我的查詢中,4-7位共有36個可能,乘上第八位和第九位的一百種可能,我們已經把數據範圍縮小到3600個!

二,生成通訊錄並導入手機

3600個數據已經足夠小,我們可以直接將其作為通訊錄傳入手機:

在Excel中填入36個手機號,並使其自動填充完3600個數據(首列為姓名)。

將其導出為.csv格式,我們可以利用QQ同步助手的導入聯繫人功能,將其導入至雲端,之後通過手機端APP同步進手機。

在導入完成之後,我們便可以直接在好友列表下得到其對應的手機號(在已加為好友的狀態下),或者通過通訊錄添加好友的方式,在眾多的新好友中找到對應的那一個,此時,其手機號便是所尋找的。

三、總結

通過QQ號查詢綁定的手機,我們總共用到了兩個信息以及一個前提,即QQ號和歸屬地,前提是QQ號綁定了手機。


更新


在上文中,已經提出了一種通過QQ號來獲取綁定手機號的方法,下面將對上文中的不足之處加以補全。

#Point.1 針對上文中提及的“縮小範圍”

在上文中,我們通過QQ的“找回密碼”功能確定了手機號的前三位以及後兩位,並且,通過查找歸屬地的方法將4-7位控制在一個很小的範圍。

現在,我們唯一不確定的只剩下第8、9位,那麼是否有方法來進一步縮小範圍呢?

答案是有的。

1.1 查找註冊的網站

曾經,在網站REG007中,我們可以通過郵箱或手機號查找大部分以此為賬號註冊的網站,現在依然無法訪問。

這類網站的原理,就是通過使用者輸入的手機號或者郵箱去各大網站註冊新用戶,如果在網站中已經註冊,它的返回值和未註冊的用戶返回值不相同,據此,可以區分手機號或郵箱是否在某個網站中註冊。

同理,我們可以使用需要查找的QQ郵箱來作為賬號在別的網站中測試“找回密碼”功能,通過使用上文中提到的“找回你”等網站,我們可以獲取該QQ郵箱註冊過的網站。

1.2 在註冊的網站中使用“找回密碼”功能

筆者此次測試的是支付寶。

筆者發現僅需通過郵箱+圖片驗證就可以輕易進入到充值登錄密碼的界面,而這個頁面包含的信息就是我們想要的。

在上圖中,我們可以看到其已經顯示了綁定手機號的前三位+後四位。

根據這個方法,由於各個網站“找回密碼”的機制不盡相同,我們可以將範圍進一步縮小。

Point.2 針對上文中提及的“位置信息”

在上文中,我們在對手機號進行篩選時用到了一個關鍵的信息:位置。那麼,位置信息又該從何處獲取呢?筆者於此提供兩種思路。

2.1 在社交賬戶中的“個人信息”

在我們僅有QQ號這一個條件的情況下,我們可以通過兩種方式來查看,其一是個人資料的基本信息,其二是QQ空間中的“個人檔”。

2.2 發表的狀態中定位及照片

我們大多都會注意到,在發表的狀態中可能會包含著位置的信息,此處略表不提。

筆者需要說明的是,在圖像文件中,並不僅僅包含著圖片的像素信息,還有可能包含著Exif信息。

Exif是一種圖像文件格式,它的數據存儲與JPEG格式是完全相同的。實際上Exif格式就是在JPEG格式頭部插入了數碼照片的信息,包括拍攝時的光圈、快門、白平衡、ISO、焦距、日期時間等各種和拍攝條件以及相機品牌、型號、色彩編碼、拍攝時錄製的聲音以及GPS全球定位系統數據、縮略圖等。你可以利用任何可以查看JPEG文件的看圖軟件瀏覽Exif格式的照片,但並不是所有的圖形程序都能處理Exif信息。

查看照片的Exif信息有許多工具,如PS等軟件。

更新總結

此更新主要提供了一種進一步縮小範圍的思路,以此為基礎,我們可以在一小時之內就能確定與QQ號綁定的手機號。


分享到:


相關文章: