家里最近接入了廣電有線電視,配了三個創維 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,如果你用的是其它版本,可能需要對代碼做少許修改。
