BUUCTF-[ACTF2020 新人大会] BackupFile

【ACTF2020新人戦】BackupFile

トピック

画像-20230627204937152

答え

範囲内に開く

画像-20230627205010403

ソースファイルを探してみるよう指示してください

Web ページのソース コードを表示します。

画像-20230627205052363

何も見つかりませんでした

トピックプロンプトによると

トピック分析によると、ディレクトリを爆破して情報を取得したり、/index.php にアクセスして応答があるかどうか、ページのバックアップ ファイルがあるかどうかを確認したりできます。

/index.php にアクセスしてみます

画像-20230627205721071

正常にアクセスできることが確認されました。

/flag.php にアクセスしてください (存在するかどうか)

画像-20230627205823997

正常にアクセスできますが、エコーは発生しないことがわかります。これは、ソース コードに特定の条件またはフィルタリング情報があることを示しています。

次に解析を続けて、Webサイトのソースコードのバックアップファイルが/index.php.bakであるか推測し、アクセスしてみます。

バックアップファイルのダウンロードに関する情報が表示されることがわかります

画像-20230627210045623

ローカルにダウンロードした後、テキストエディタで開きます

ソースコードを開いて見つけます

画像-20230627210136405

ソースコードを分析すると、渡されたキーパラメータの中にPHPの弱い比較(==)があり、キーポイントはis_numeric関数であることがわかります。

PHPには2つの比較記号==と===があります

=== 比較する場合、まず 2 つの文字列の型が等しいかどうかを判断してから比較します。

== 比較する場合、まず文字列の型を同じに変換してから比較します。

"=="类型转换的规则
1、字符串和数字比较,字符串会被转换成数字。
如:"root"==0(true)//root被转换成数字,由于root是字符串,转换失败,int(root)=0,所以比较结果是true。

2、混合字符串转换成数字,看字符串的第一个。
如:"123root"==123 "2goodyou"==2

is_numeric() 関数は、変数が数値であるか数値の文字列であるかを検出するために使用されます。指定された変数が数値および数値の文字列である場合は TRUE を返し、それ以外の場合は FALSE を返します。

ソースコードの str 変数で指定された文字列を確認し、if 制御ステートメントを出力します。

画像-20230627211900346上記の結論によれば、ペイロードは次のように構築できます。

/index.php?key=123

画像-20230627211926664

この質問のフラグを取得します。フラグは次のとおりです。

フラグ{73b7db44-cd8f-4f2c-958f-9492738f0fdd}

記事が不適切な場合は批判・修正大歓迎です!

おすすめ

転載: blog.csdn.net/rumil/article/details/131430484