概要
今回、Basic認証が使われているサイトのパスワードを忘れてしまったため、そのパスワードを調べる方法について調べた時に、Basic認証を突破する方法を知ったので、そのことについて書きます。
Basic認証とは
Basic認証は、Webページでユーザー名とパスワードを知らない人にアクセスさせないための認証方法のひとつです。
似たような仕組みとして他にも、Digest認証があります。
BASIC認証の特徴として、リクエストのHeader内に、ユーザー名とパスワードがBase64でエンコードされて、セットされています。
そのため、Base64でエンコードされた文字列をデコードすることで、簡単に突破することができてしまうため、セキュリティ上の問題が発生します。
このことから、通信を傍受されたときにパスワードが漏洩するということで、最近では平文で通信を行うhttpでの使用は推奨されておらず、httpsの環境において使うように言われています。
ちなみに、今回紹介する方法が使えるのは既に一度パスワードを入力してBasic認証を突破したことがある場合で使える方法です。
もし、何も知らない場合はhydraなどのツールを使うことでパスワードを割り出すことができます。
デコード
Base64でエンコードされているということは、その情報をデコードすれば、元の情報が分かるということです。
では、その情報がどこに書かれているかというと、認証時のページのAuthorizationというヘッダーに書かれています。
そこには「Basic ほにゃらら」のように「ユーザー名:パスワード」をBase64でエンコードした情報が書かれています。
Base64の文字列をデコードする方法として、「Base64 デコード」などで検索すると、復号してくれるサイトがあるのでそれらを利用するのが一番簡単です。
例えば、Base64でエンコードされた「cm9vdDpyb290」という文字列をデコードすると「root:root」のように出力されます。
順番は「ユーザー名:パスワード」です。
デコードが終わったらその情報を入力するとBasic認証に成功することができます。
まとめ
今回この方法で認証を突破したものは外部に公開しているものではなかったので良かったのですが、もしこれが外部に公開しているものであれば、通信を傍受することができれば認証を突破できるということを表しています。
なので、今後Basic認証を使うのであれば、できるだけhttpsで通信できるような環境を利用すべきです。
もしくは、Basic認証ではなく、パスワードを復号できる状態で通信しないDigest認証を使うようにした方がいいです。