Smarty SSTiの使い方
タイトルの説明
タイトルには、XFF ヘッダーを読み取るための API が提供されています。ページの下部に Build With Smarty という文字があります。Smarty エンジンで記述されていると判断できます。
基本的には OK このページで SSTi の可能性を判断します
xff ヘッダーを 127.0.0.1 から 127.0.0{1 2} に変更すると、次の結果が表示されます。
ssti は間違いなく
最終ペイロードは
XX-Forwarded-For: {if var_dump(file_get_contents(' /flag')) }{/if }
Smarty SSTI 活用法
Smarty は PHP をベースに開発されています。フラスコの一般的な SSTI とは大きく異なります。
脆弱性の確認
通常、「{$smarty.version}」と入力すると、返された Smarty のバージョン番号を確認できます。このトピックの Smarty バージョンは 3.1.30です。
一般的な使用法
Smarty は、ラップされたコードを実行するための {php}{/php} タグの使用をサポートしています。 php コマンドを使用する場合、最も一般的な考え方は、最初にタグをテストすることです。ただし、このトピックに関する限り、{php}{/php} タグを使用するとエラーが報告されます:
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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