クライアントのWebポータルのセキュリティを評価していますが、脆弱性を発見しました。
これはPHPコード:
echo(file_get_contents("template/data/" $_GET['id']));
../../../index.php、config.phpなどを正常に読み取ることができました。
しかし、このバグが設定の読み取りよりも重要であることを証明できるようにしたいだけです。 MySQLのユーザー/パスを読み取りましたが、ローカルホストでのみリッスンしているため、接続できません。私が読んだ他のすべてのコードは何にもつながりませんでした。だから基本的に私が得たすべてはちょっと秘密のソースコードだけでした。
文字列の先頭に「template/data /」が含まれているため、phpフィルターを実行できません。
この脆弱なコードで他に何ができますか?何か案は?
MySQLデータベースは同じマシン上にありますか?もしそうなら、あなたはデータベースファイルを引っ張ってあなたのマシンでDBを再構築することができますか?
他のユーザーが述べたように、ユーザーレイアウトに関する多くの情報を含む/ etc/passwdをプルできます。/etc/shadowにアクセスできれば、オフラインでパスワードを解読することができます。
Webアプリケーションにログインポータルがある場合は、mysql資格情報と、「admin」、「root」などをパスワードで試行します。
ソースコードまたは構成ファイルに他のアクセス認証情報/ APIキーが含まれていますか?サイトのSSL証明書は読み取り可能ですか?読み取り可能な場合は、Man In the Middle接続を使用できますか?
/ proc/version、/ etc/issueなど、およびWebサーバーのバージョンから詳細をプルして、他の既知の脆弱性を探すこともできます。
最後に、ソースは公開されているはずですか?そうでなければ、ソースコードはしばしば価値があると見なされます。そして、さらなる脆弱性についてそれを検査することができます。
ヘクターの答えにはいくつかの素晴らしい例がありますが、私はもう1つの非常に重要なポイントを強調したいと思います。
これは小さな脆弱性ではありません
「すべて」がシステム上の任意のファイルを読み取ることができる場合、この脆弱性は実際には脆弱性ではないという印象を受けているようです。私は正反対を主張します。セキュリティは多層防御の観点から最もよくアプローチされることを理解する必要があります。脆弱性のないシステムを構築することは事実上不可能である可能性があるため、目標はできるだけ多くの領域で可能な限り多くの防御層を持つことです。これにより、悪意のある俳優が1つの領域の弱点を見つけた場合、システム全体で防御することができます。それらが実際の損傷を引き起こすことを防ぎます。実際の侵害の多くは、誰かが利用した脆弱性があったからではなく、別の脆弱性を利用したり、何かを発見したりするまで別のことをさせてしまう脆弱性があったからです本当に =危険。
この小さな脆弱性により、悪意のある攻撃者はシステムへの完全な読み取りアクセス権を与えられます。これは、これがかなり明白なセキュリティの失敗であったという事実によってさらに悪化します。問題の会社に十分な訓練を受けた開発者がいて、定期的なコードレビューを行っている場合、そのようなコードが実稼働システムに移行することは(IMO)非常にありません。この事実の重要性は、これが存在する唯一のセキュリティ脆弱性ではないことを示唆していることです。システムのソースコードを直接表示できるようになったということは、セキュリティの脆弱性をさらに見つけるのが実質的に簡単になるということです。かなりゲームオーバーかもしれません。私が悪意のある俳優であった場合、私はこれを見つけました:
これは孤立したセキュリティ問題ではありません。そのようなことは実際には決してありません。
多くの現実が含まれる可能性があり、真剣に受け止める必要がある他の回答の多くの良い情報。
ホスティングの設定は不明ですが、他のアカウントでWHMサーバーを使用していて、関数が/etc/passwd
のコンテンツを取得するために使用されているとします。
username:x:123:654::/home/username:/usr/local/cpanel/bin/noshell
username:x:123:654::/home/username:/usr/local/cpanel/bin/noshell
username:x:123:654::/home/username:/usr/local/cpanel/bin/noshell
etc...
次に、ユーザー名のパスごとに:
/home/username/public_html/wp-config.php
そして、すべてのwpサイトの構成ファイルが作成されます。これはほんの一例です...最終的には、別のレイヤーとして、コードより上位のものを保護するために最善を尽くす必要があります。
/ etc/passwdのようなローカルパスが関数に提供された場合、すべきが発生します。
<br />
<b>Warning</b>: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/home/uservalue/public_html) in <b>/home/uservalue/public_html/test.php</b> on line <b>2</b><br />
<br />
<b>Warning</b>: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in <b>/home/uservalue/public_html/test.php</b> on line <b>2</b><br />
"open_basedir制限が有効です。"