ホームページ > バックエンド開発 > PHPチュートリアル > 新しい PHP 脆弱性マイニング: デバッグによって引き起こされるセキュリティ脆弱性 (Edusoho)

新しい PHP 脆弱性マイニング: デバッグによって引き起こされるセキュリティ脆弱性 (Edusoho)

WBOY
リリース: 2016-06-23 13:16:57
オリジナル
1819 人が閲覧しました

【旧正月なので、過去記事を毎日1記事、計7記事投稿していきます。 】

最新の cms フレームワーク (laraval/symfony/slim) の出現により、今日の PHP 脆弱性の出現ポイント、原理、利用方法にいくつかの変化が生じています このシリーズでは、私が発見したそのような cms 脆弱性についてまとめていきたいと思います。

今日の脆弱性は、Edusoho のユーザー テーブル ダンプの脆弱性です。

まず、脆弱性の原理を簡単に説明します。

[脆弱性ソースコードのダウンロード: https://mega.nz/#!4chVWCAB!xBVyC9QqxMCmeuLu3rGx__PwgkLe_a5NWUITLS3QzuM]

0x01 DEBUG モードをオンにすることによって引き起こされる隠れた危険

Edusoho は後にデバッグを出力しますデバッグモード情報をオンにした後のプログラムエラー、現在の環境のすべての変数の値を含みます。デフォルトのindex.phpはデバッグを有効にしませんが、/api/index.phpはデバッグを有効にします:

フレームワークの例外処理メソッドをフォローアップします。例外処理は Index.php に登録されます:

ErrorHandler::register();ExceptionHandler::register();
ログイン後にコピー

Symfony フレームワークに付属する例外処理クラスがここで使用されます: use SymfonyComponentDebugExceptionHandler; フォローアップ:

set_Exception_handler によって登録された例外処理メソッドが呼び出されます。追跡を続けた結果、このクラスの getContent メソッドがエラー内容を出力するメソッドであることがわかりました。

この例外クラスは、例外オブジェクトの "args" 属性を出力していることがわかります。 PHP 例外処理クラスを注意深く学習した学生は、例外クラス (http://php.net/manual/zh/Exception.gettrace.php) の getTrace メソッドが現在のコンテキスト内のすべての変数を取得できることを知っているはずです。 したがって、ここでのデバッグ モードは、現在の関数で定義されているすべての変数を出力できることを意味します。そこで、想像してみてください。現在の関数が例外が発生する前にデータベースまたはファイルから何らかの「機密」情報を読み取ると仮定すると、この例外を出力することによって、この「機密変数」をダンプできるでしょうか?

明らかに、この推測は実現可能です。

次に、/api で誤ったコードを見つけるだけで済みます。現在の関数には「大きな脆弱性」を引き起こす可能性のある機密情報が含まれています。 幸運にもいくつか見つかりました。最も単純なものは、 /api/src/user.php:373

この $follwers 変数は未定義の変数であるため、間違いなくエラーがトリガーされます。

現在の関数には $user と $follwings という 2 つの変数が存在します。$user 変数は指定されたユーザーであり、$follwings はそれがフォローするユーザーです。

したがって、エラーが報告され、デバッグ情報が出力された後、これら 2 つの変数の値が完全に出力されます。これら 2 つの変数は、データベースのユーザー テーブルから取得されたデータであり、すべてのユーザー情報 (電子メール、パスワード ハッシュ、トランザクション パスワード ハッシュ、ソルト、セッション、IP アドレス、ニックネーム、ログイン時間など) が含まれています。

さらに、$follwings 変数にもこの情報が含まれており、全員を一括でフォローしている限り、この脆弱性はデータベースのユーザー テーブルをダンプする脆弱性になります。

0x02 任意のユーザーのユーザーテーブル情報を直接取得するには、方法 1 を使用します。

http://demo.edusoho.com/api/users/{userid}/followings (例: http://demo.edusoho.com/api/users/5/followings) にアクセスしてください

0x02方法 2、ソーシャル属性を使用して情報をバッチで取得します

方法 2 を使用して、まずパスワードを取得したい人をフォローします。たとえば、私はこの 4 人、ID 1、2、3、4 のユーザーをフォローしました。 1、4 は管理者です:

私の ID は 15670 です。http://demo.edusoho.com/api/users/15670/followings に直接アクセスして、パスワードなどを含むすべてのフォローしているユーザーの情報を取得します。 :

ここのような場所は他にもあります。

http://demo.edusoho.com/api/users/1/friendship?toIds[]=a 配列を渡して警告を作成します:

間違いなく他の場所があり、他の情報が存在する可能性があります。漏洩しましたが、問題が存在することを証明するためだけに、それらを 1 つずつ掘り起こしたわけではありません。 この脆弱性は公式に非公開で報告されており、デモサイトは修正されています。ただし、「powered by edusoho」で検索すると、まだ脆弱性のあるサイトが多数見つかります。時間的には、この脆弱性はまだ 0day です。 たとえば、このサイト: http://mooc.sinepharm.com/api/users/1/followings

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート