Home

Awesome

BadLibrary - 脆弱性を試すためのサンプルWebアプリケーション

BadLibraryは初めて脆弱性を探すのに最適な、小さくて簡単に動かせる脆弱なサンプルWebアプリケーションです。 node.jsだけ入っていれば特にそれ以外には何も必要なく動くので、BadStoreなどのようにVM環境を用意する必要もありません。

また、Webアプリケーションとして最小限の機能のみを備えているため、全体像の把握もしやすくなっています。

インストール

% https://github.com/SecureSkyTechnology/BadLibrary
% cd BadLibrary/src
% npm install

起動

単純に src/app.js を起動するだけです。デフォルトでは8080でlistenします。

% npm start 

または

% node app.js

で起動するので、Webブラウザで http://127.0.0.1:8080 などへアクセスしてください。

引数として -p または --port でポート番号を、 -h または --host でlistenするホストアドレスを指定することができます。

% node app.js -p 80
% node app.js --port 8080 --host 127.0.0.1

また、-c あるいは --config で設定ファイルを指定できます。省略時は同一ディレクトリ内の config.json が読み込まれます。

% node app.js --config /tmp/config.json

デフォルトでユーザー名 user パスワード pass でBASIC認証がかけられています。BASIC認証が不要な場合は設定ファイルを編集してください。

また、利用できるユーザーは複数登録されていますが、利用者(練習用)としてはメールアドレス akita@example.jp 暗証番号 1234 を利用するといいでしょう。それ以外のアカウントについては、脆弱性を利用して利用してみましょう。

設定ファイル

設定ファイル config.json にて、サイト自体へのBASIC認証有無や含まれる脆弱性の有効無効を設定できます。

{
    "global" : {
        "basic" : "user:1234" // BASIC認証のユーザー名とパスワード
    },
    "vulnerabilities" : {
        "sqli" : ["auth", "search", "blind"],          // SQLインジェクション 
        "xss" : ["reflect", "dom" ],                   // XSS
        "session" : [ "no-refresh", "no-httponly", "serial" ], //セッション情報の不備
        "expose" : ["contaft", "dirindex", "admin"],   // 情報の露出
        "xxe" : true,                                  // XXE
        "csrf" : true                                  // CSRF
    }
}

安全性

BadLibraryには、OSコマンドインジェクションのように環境を破壊するものは含まれていません。また、データベースもreadonlyで開いていますのでデータベースが壊れるといったことも発生しません。そのため、1台のサーバーに対して複数人で同時にアクセスしても環境が壊れて診断が継続できなくなるということは通常はありません。 ただし、BadLibraryを誰でもアクセス可能な状態で公開する場合には以下の点に気をつけてください。

これら以外にも、意図していない本来の意味での脆弱性が含まれる可能性もあります。

ライセンス

This software is released under the MIT License, see LICENSE.txt.