ホームページ バックエンド開発 PHPチュートリアル PHP キャスト タイプとリモート管理プラグインのセキュリティ リスクの分析_PHP チュートリアル

PHP キャスト タイプとリモート管理プラグインのセキュリティ リスクの分析_PHP チュートリアル

Jul 13, 2016 am 10:26 AM
php 安全性 プラグイン 管理 リモートで

リモート管理プラグインは、WordPress サイト管理者にとって人気のあるユーティリティ ツールで、ユーザーは最新リリースへの更新やプラグインのインストールなど、複数のサイトで同時に同じ操作を実行できます。ただし、これらの操作を実装するには、クライアント プラグインはリモート ユーザーに重要な権限を付与する必要があります。したがって、管理サーバーとクライアント プラグイン間の通信が安全であり、攻撃者によって偽造できないことを保証することが重要です。この記事では、利用可能ないくつかのプラグインを簡単に分析します。これらのプラグインの弱点を悪用すると、攻撃者はこれらのプラグインを実行しているサイト自体を完全に侵害することさえできます。

WP の管理InfiniteWP、および CMS コマンダー

これら 3 つのサービスは同じ基本的なクライアント プラグイン コードを持っているため (視覚的には、もともと ManageWp によって実装され、その後、他の 2 つがそれを調整したものです)、そのため、それらはすべてシグネチャ バイパスの脆弱性を抱えており、リモートでコードが実行される可能性があります。

管理サーバーは、ユーザーに管理者の資格情報 (MAC、通常はハードウェアの MAC アドレスとして認識されます。ここではメッセージ認証コード)。メッセージ ダイジェストは、メッセージが共有秘密キーを使用してメッセージ ダイジェスト アルゴリズムを通過するときに生成されます。 MAC はメッセージに添付されて送信され、受信後、受信側は共有秘密キーを使用して受信メッセージを計算し、MAC2 を生成し、それを MAC1 と比較します。メッセージ ダイジェストは、メッセージの信頼性と整合性を検証するために使用されます (暗号化を学習した学生はこれを知っているはずです)。ただし、これら 3 つのサービスのクライアント プラグインには実装上の欠陥があります。これにより、重大な脆弱性が発生しました。

helper.class.php によって認証された受信メッセージは次のようになります:

リーリー

非厳密な等号を使用すると、比較の前に型の「スプーフィング」[型変換] が発生します。 md5() 関数の出力は常に文字列ですが、$signature が整数に変更されると、比較中に発生する型変換により、一致する MAC が簡単に偽造される可能性があります。たとえば、実際の MAC が「0」または数字以外の文字で始まる場合は、0 が一致し、「1xxx」の場合は整数 1 が一致します。 (これは実際には PHP の機能であり、もちろん他の言語にもあります。文字列と数値が非厳密に等しいかどうかを比較するとき、最初の文字が数値の場合は、対応する整数に変換されます比較用の場合 0-9 以外の文字の場合は 0 として扱います。 php.net の公式説明: 数値と文字列を比較する場合、または数値の内容を含む文字列を比較する場合、文字列は次のようになります。数値に変換され、数値に基づいて比較が続行されます。

文字列を数値に変換します:

文字列を数値として扱う場合、結果と型は以下のようになります。

文字列に「.」、「e」、または「E」が含まれておらず、その数値が整数の範囲内(PHP_INT_MAX で定義されている)の場合、文字列は整数として扱われます。それ以外の場合はすべて、値は浮動小数点数として扱われます。

文字列の先頭によって値が決まります。文字列が有効な数値で始まる場合は、その数値が使用されます。それ以外の場合、その値は 0 (ゼロ) です。有効な値は、オプションの符号、その後に続く 1 つ以上の数字 (小数点を含む場合もあります)、およびオプションの指数部分で構成されます。指数部は、「e」または「E」とそれに続く 1 つ以上の数字で構成されます。

リーリー

残念なことに、攻撃者は署名として整数を提供する可能性があります。 init.php では、受信リクエストはbase64_decode() を使用してデコードされ、結果が逆シリアル化されます。 Unserialize() を使用すると、入力データの種類を制御できることを意味します。 偽のシリアル化メッセージは次のとおりです。

a:4:{s:9:"署名";i:0;s:2:"id";i:100000;s:6:"アクション";s:16:"execute_php_code";s:6: "params";a:2:{s:8:"ユーザー名";s:5:"管理者";s:4:"コード";s:25:"exec('touch /tmp/owned');" ;}}

このメッセージは整数 0 を署名として使用し、プラグインによって提供されるexecute_php_codeを使用して任意のPHPコードを実行します。

リーリー
この偽造された例は、直接使用することはできません。まず、id のキーの値は、以前の正規のメッセージの値よりも大きい必要があります (増加したメッセージ ID は、リプレイ攻撃を防ぐために使用されます。現在、両方のリクエストの偽造が存在します)。これは、CSRF、クロスサイト リクエスト フォージェリを思い出させます。中間者攻撃はありますか?)、次に、署名の照合に使用される整数は、ブルート フォース クラッキングによって突破される可能性があります。 。

リーリー

上面的伪代码尝试发送具有很大ID值得虚假消息,并且对每个ID都进行十次单独的数字指纹匹配(前面说到过,对于一个字符串,只要一个数字就可以在比较时进行匹配,这里从0-9是因为每一种情况都能遇到)。

这一缺陷可以通过使用全等运算符[===]和对传入的指纹进行检查来修复。这几个插件服务都通过使用严格的全等运算符进行了修复(php.net的说明:a===b,则a和b值相等,且类型也相等;a==b,在发生类型转换后再判断其值是否相等)。

另外还有一些其他的问题,但是他们还没有采取行动。首先,这一做法是有弱点的(密钥追加到$data,然后进行散列),应该用HMAC(Hash-based Message Authentication Code,以一个密钥和一个消息为输入,生成一个消息摘要作为输出)。其次,仅用于操作的action和消息ID被用于创建签名。这意味着,一个活跃的网络攻击者可以改变消息中的参数而签名依旧是有效的(例如改变execute_php_code消息执行任意代码)。为了进行保护,MAC应该包含整条消息。

(注意,基于MD5的消息摘要是一种后退,可以的话这些插件使用openssl_verify();***2014-04公布出来的Openssl 1.0.f heartbleed漏洞号称世纪级漏洞***)

WORPIT

Worpit是另一个远程管理服务,但它使用从头开始构建的客户端插件,它同样有强制类型转换漏洞,可以让攻击者以管理员权限登陆。

该插件提了远程管理员登陆的方法,使用仅Woprit传递系统可配置的临时的token值。这款插件会检查请求中提供的token值是否和存储在数据库中的值匹配。

if ( $_GET['token'] != $oWpHelper->getTransient( 'worpit_login_token' ) ) { 
  die( 'WorpitError: Invalid token' ); 
}
ログイン後にコピー

令牌是从一次使用的数据库中删除。这意味着大多数的时候都是在数据库中没有令牌。因此,在调用getTransient()方法可能返回false。非严格的比较是,这意味着任何“falsey价值,比如字符串0,将被视为一个有效的令牌。一个例子网址以管理员身份登录:

这个token一经使用就会从数据库中删除,这意味着,大多数时候数据库中是没有token的。因此,对getTransient()方法的调用很可能返回false。非严格的比较也用到了,这意味着任何相当于false的值,例如字符串0会被当做一个有效的token,以管理员身份登陆的例子如:http://victim/?worpit_api=1&m=login&token=0

至此,该站点就为攻击者所控制了,他有权限安装恶意插件或修改已有的插件。

这里的修复方案是使用!==并进行其他检查及从数据库进行检索。

结论:

一定要记住检查用户输入的是预期的类型并在安全性很重要的函数中使用进行严格比较,如检查身份验证令牌。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/824742.htmlTechArticle远程管理插件是目前广受WordPress站点管理员欢迎的实用工具,它允许用户同时对多个站点执行相同的操作,如更新到最新的发行版或安装插...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles