PHP の eval 関数の解析と処理
P粉476547076
P粉476547076 2023-08-13 17:40:10
0
2
519

免責事項: これは PHP コード インジェクションを学習するための単なる例であり、運用コードを何らかの形で使用するものではありません。これが良いコーディング手法ではないことは十分に承知しています。

次の PHP スクリプトがあります:

 
      <頭>
        サンプルスクリプト 

       <本体>
        

サンプルページ

それでは計算してみましょう。計算する式を入力してください。例: 1 1。

<フォームメソッド="get">

数式:

このスクリプトは PHP コード インジェクションに対して脆弱ですが、次のことを行うことでこれを突破することができました (ほとんどの場合、試行錯誤によって判明しました)。

$a='1');phpinfo();echo($a

しかし、その根拠はよくわかりません。私が理解しているところによると、echo ステートメントを完成させ、独自のコード (phpinfo() など) を挿入してから、閉じ括弧を処理する別の関数 (echo など) を記述する必要があります。

次のようなコードが機能すると思いました:

");phpinfo();echo("

ただし、phpinfo は文字列の一部とみなされ、eval 関数によって評価されないため、これは機能しません。 また、引用符をエスケープしようとしましたが、成功しませんでした。

質問:

  • ここにコードを挿入する正しい方法は何ですか?
  • なぜ$a='1');phpinfo();echo($a は機能するのでしょうか?


P粉476547076
P粉476547076

全員に返信 (2)
P粉561749334

問題は、このステートメントが無効であることです:

リーリー

解析エラーが発生します。したがって、このエラーを回避するには何かを注入する必要があります。例えば:### リーリー

いいねを押す+0
    P粉033429162

    その入力を使用すると、変数を置換した結果は次のようになります:

    リーリー

    したがって、ここでは$a='1'が代入され、代入結果 (つまり、$aに代入された値) が出力されます。次にphpinfo()が実行されました。最後に$aが再度出力されます。

    );phpinfo();echo(を使用しようとすると、echo ()を実行しようとしているため、機能しません。ただし、echo少なくとも 1 つのパラメータが必要です。

    したがって、ここにコードを挿入するには、入力がecho () の後の有効な何かで始まり、);の前の有効な何かで終わることを確認する必要があります。挿入する追加のコードをこれら 2 つの部分の間に配置します。

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!