まず、自分自身を確認したいと思います。
拡張機能はモジュール、プラグイン、コンポーネントの集合ですよね?
それが正しい場合、モジュール、プラグイン、コンポーネントのバージョンは同じです。これも本当ですか?
問題は、私が行っているセキュリティ調査の一環として、(任意の)Joomlaサイトで使用されている拡張機能のバージョンを調べる必要があることです。
単純なケースでは、バージョンはすでに次のように記述されています。
JWallpapers - A lightweight yet powerful image gallery component with community building capabilities
*
* @version 2.2.2 $Id: default.css 558 2010-12-16 12:29:41Z amazeika $
* @package JWallpapers
* @copyright Copyright (C) 2009 Arunas Mazeika, http://www.wextend.com. All rights reserved
* @author Arunas Mazeika
* @license GNU General Public License v2+ (GNU GPL v2+). See license.php
*
*/
#picture_container,#picture_right_content,#thumbs_right_section,#thumbs_left_section,#frontend_tagging_section,#pic_tags_section
{
float: left;
border: none !important;
}
.jw_category_title {
float: left;
border: none !important;
}
しかし、そのようなレコードがない場合、どうすれば拡張機能のバージョンを確認できますか?
私も here を見ましたが、回答者はphp-scriptを使用しました。通常のユーザーがそのようなスクリプトを実行することは可能ですか?
Joomlaサイトの拡張バージョンを見つける他の方法はありますか?
免責事項:これは純粋にJoomla内の起こり得るセキュリティの脆弱性を調査するためのものです
UDP_1
OWASP-ZAPを使用してサイトのツリーを取得しています。つまり、すべてのディレクトリにあるすべてのファイルを取得しています。このような : - 。
それで、モジュール、プラグイン、またはコンポーネントはどこかにマークを残すことができますか?(たとえば、コンポーネントディレクトリだけではありません)
@Sharkyが言ったように、マニフェストファイルにアクセスして拡張機能のバージョンを確認できます。次に、拡張子のタイプごとのファイルのパスを示します。
コンポーネント:
../administrator/components/com_extension_name/extension_name.xml
モジュール:
../modules/mod_extension_name/mod_extension_name.xml
プラグイン:
../plugins/plugin_type/extension_name/extension_name.xml
テンプレート:
../templates/extension_name/templateDetails.xml
サイトの管理者でない場合、この情報を完全に入手することはできません。インストールされている拡張機能がわかっている場合は、マニフェストファイルにアクセスして、それらのバージョンを確認できます。たとえば、Joomla! administrator/manifests/files/joomla.xml
ファイルにアクセスしてバージョンを確認します。
インストールされている拡張機能を見つけるのに最も近い方法は、実際に見つかるだけの拡張機能のリストをコンパイルし、マニフェストファイルがWebサイトに存在するかどうかを確認するスクリプトを記述することです。
拡張機能はモジュール、プラグイン、コンポーネントの集合体ですか?
extensionは、コンポーネント、モジュール、プラグインの組み合わせではありません。これはパッケージが何であるかです
プラグイン、モジュール、コンポーネント、テンプレートはすべてtypesの拡張機能です。
したがって、私が正しい場合、モジュール、プラグイン、コンポーネントのバージョンは同じです。それも本当ですか?
いいえ。それらはすべて独立しているため、異なるバージョンを使用します。
しかし、そのようなレコードがない場合、拡張機能のバージョンを見つけるにはどうすればよいですか?
Joomlaバックエンド(管理パネル)で、Extensions>>Manage>>Manage.
これにより、インストールされているすべての拡張機能とそれぞれのバージョンのリストが表示されます。
次に例を示します。
*更新*私はこの回答を投稿し、後でSharkyと後でNeil Robertsが.xmlファイルが利用可能であると回答を確認しました。私は自分のサイトの1つでこれをテストしたので、この情報が利用可能であり、それについて何かをしなければならないことに非常に驚きました。一般的な参照のために元の回答をここに残し、他のユーザーによる回答に投票して、コンポーネントディレクトリでマニフェストxmlファイルを探すと述べました。
この情報は、エンドユーザーやWebサイトの訪問者が利用することはできません。
Joomlaのバックエンドへの管理者アクセス権またはデータベースクエリを実行するためのアクセス権のいずれかが必要です。サイトをハッキングしていない限り、それもありません。
Webサイトのパブリックビューアーとして、表示されているHTMLで何が利用できるかを確認することができます。 Lodderの回答で説明したように、拡張機能はプラグイン、モジュール、コンポーネントで構成されており、ほとんどの場合、サーバー側でページを作成してレンダリングされ、ブラウザーに送信されます。
一部のコンポーネントは、ページのフッターにバックリンクまたは「powered by ....」というテキストを表示する場合があります。これは、コード内での意図的なアクションによるものですが、通常、プラグインとモジュールは、それら自体の痕跡をほとんど残しません。彼らのバージョン。 Joomlaのコードの深部で実行され、値をAからBに変更するプラグインは、映画に取り組んでいる人が最後にリストされると言うように、ページの下部でクレジットを取得しません。
JoomlaサイトのすべてのページのHTMLコードを分析し、拡張機能がページの作成に関与しているかどうかに関係なく、信頼できるバージョン情報がないという証拠のブレッドクラムのカタログをゆっくりと構築できます。また、息が長く残っていないことをお勧めします。
多分あなたがあなたがしている研究とあなたの要件が何であるかについてもっと説明すると、おそらくここにいる人々は別のアプローチを提案するでしょう。
Sharky が言うように、データベースへの管理者アクセス権がない場合、この情報を確認する最良の方法は、XMLマニフェストファイルなどのWebサイト上の一般にアクセス可能なファイルから取得することです。一部のWebサイトのセキュリティでは、これらのファイルを表示できないため、この方法は常に信頼できるとは限りません。
マニフェストファイルにアクセスできる場合でも、拡張機能のすべてのバージョンが同じマニフェストファイルを使用するわけではありません。
いくつかの例については、以下のコードを参照してください。AkeebaBackupとJCE Editorはすべてのバージョンで同じマニフェストファイルを使用しますが、ChronoFormsとGantry Frameworkの場合は、いくつかのファイルをチェックしてバージョン番号を取得する必要があります。
// Display Akeeba Version
echo "<div class='item'>Akeeba Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_akeeba/akeeba.xml");
if (isset($xml->version)) {
echo "<div class='column'>$xml->version</div>";
} else {
echo "<div class='column'>Unknown</div>";
}
// Display JCE Version
echo "<div class='item'>JCE Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_jce/jce.xml");
if (isset($xml->version)) {
echo "<div class='column'>$xml->version</div>";
} else {
echo "<div class='column'>Unknown</div>";
}
// Display ChronoForms Version
echo "<div class='item'>ChronoForms Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_chronoforms6/chronoforms6.xml");
if (isset($xml->version)) {
//ChronoForms v6
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_chronoforms5/chronoforms5.xml");
if (isset($xml->version)) {
//ChronoForms v5
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_chronoforms/chronoforms.xml");
if (isset($xml->version)) {
//ChronoForms v4
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_chronocontact/chronocontact.xml");
if (isset($xml->version)) {
//ChronoForms v3
echo "<div class='column'>$xml->version</div>";
} else {
//Unknown
echo "<div class='column'>Unknown</div>";
}
}
}
}
// Display Gantry Version
echo "<div class='item'>Gantry Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_gantry5/gantry5.xml");
if (isset($xml->version)) {
//Gantry v5
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_gantry/gantry.xml");
if (isset($xml->version)) {
//Gantry v4
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_gantry/manifest.xml");
if (isset($xml->version)) {
//Gantry v3
echo "<div class='column'>$xml->version</div>";
} else {
//Unknown
echo "<div class='column'>Unknown</div>";
}
}
}