【ACTF2020新人戦】BackupFile
トピック
答え
範囲内に開く
ソースファイルを探してみるよう指示してください
Web ページのソース コードを表示します。
何も見つかりませんでした
トピックプロンプトによると
トピック分析によると、ディレクトリを爆破して情報を取得したり、/index.php にアクセスして応答があるかどうか、ページのバックアップ ファイルがあるかどうかを確認したりできます。
/index.php にアクセスしてみます
正常にアクセスできることが確認されました。
/flag.php にアクセスしてください (存在するかどうか)
正常にアクセスできますが、エコーは発生しないことがわかります。これは、ソース コードに特定の条件またはフィルタリング情報があることを示しています。
次に解析を続けて、Webサイトのソースコードのバックアップファイルが/index.php.bakであるか推測し、アクセスしてみます。
バックアップファイルのダウンロードに関する情報が表示されることがわかります
ローカルにダウンロードした後、テキストエディタで開きます
ソースコードを開いて見つけます
ソースコードを分析すると、渡されたキーパラメータの中に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 制御ステートメントを出力します。
上記の結論によれば、ペイロードは次のように構築できます。
/index.php?key=123
この質問のフラグを取得します。フラグは次のとおりです。
フラグ{73b7db44-cd8f-4f2c-958f-9492738f0fdd}
記事が不適切な場合は批判・修正大歓迎です!