
これは、WebERPバージョン4.15におけるBlind SQL Injectionの脆弱性に対するエクスプロイトを実証するPython3スクリプトです。
これは、2019年6月10日にSemen Alexandrovich Lyhin氏によって発見されたWebERP 4.15のBlind SQLインジェクション脆弱性を実証するPython3スクリプトです。オリジナルのエクスプロイトはこちらにあり、WebERPシステムに関する詳細はWebERP公式ウェブサイトから入手できます。 概要
この脆弱性は、WebERPがbase64エンコードで受信したクエリをunserialize()関数に渡す処理方法に存在します。特に、このスクリプトはこれらのクエリをサニタイズなしで配列にデシリアライズできます。その後、この配列の各要素はさらなるチェックなしでSQLクエリに直接渡されるため、システムはSQLインジェクション攻撃に対して脆弱になります。 スクリプトの動作
このスクリプトは、以下の手順で上記の脆弱性を悪用します。
generatePayload()関数を使用して悪意のあるクエリを準備します。この関数は、SQLインジェクションペイロードを含むシリアライズされた配列を構築し、base64形式にエンコードします。
スクリプトは、提供された認証情報と、セッションクッキーを取得するgetCookies()関数を使用してWebERPシステムにログインします。
addSupplierID()関数を使用して、新しい仕入先がシステムに追加されます。この仕入先名は、後でシステムの応答を識別するためのマーカーとして使用されます。
runExploit()関数を使用してエクスプロイトが実行されます。この関数はWebERPシステムの"Payments.php"ページにPOSTリクエストを送信します。この関数は、base64エンコードされたペイロードをPOSTデータのパラメータとして埋め込みます。
リクエストに対する応答時間が測定されます。応答時間が大幅に長い場合、注入されたsleep()コマンドによってSQLクエリが遅延したことを示唆しており、SQLインジェクション脆弱性の存在が確認されます。
python3 exploit.py <target> <path> <login> <password> <order>
<target>、<path>、<login>、<password>、<order>を、それぞれ対象のIPアドレス、対象パス、ユーザーログイン、ユーザーパスワード、会社の注文に置き換えてください。
例:
python exploit.py 192.168.1.1 'WEBerp/' admin weberp 1