ホームページ  >  に質問  >  本文

PHP の eval 関数の解析と処理

<p>免責事項: これは PHP コード インジェクションを学習するための単なる例であり、運用コードを何らかの形で使用するものではありません。これが良いコーディング手法ではないことは十分に承知しています。 </p> <p>次の PHP スクリプトがあります: </p> <pre class="brush:php;toolbar:false;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 「http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd」> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <頭> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>サンプルスクリプト</title> </head> <本体> <h1>サンプルページ</h1> <p>それでは計算してみましょう。計算する式を入力してください。例: 1 1。 </p> <フォームメソッド="get"> <p>数式: <input type="text" name="maths" /></p> <p><input type="submit" value="calculate" /></p> </フォーム> </ボディ> </html></pre> <p>このスクリプトは PHP コード インジェクションに対して脆弱ですが、次のことを行うことでこれを突破することができました (ほとんどの場合、試行錯誤によって判明しました)。 </p> <pre class="brush:php;toolbar:false;">$a='1');phpinfo();echo($a</pre> <p>しかし、その根拠はよくわかりません。私が理解しているところによると、echo ステートメントを完成させ、独自のコード (phpinfo() など) を挿入してから、閉じ括弧を処理する別の関数 (echo など) を記述する必要があります。 </p> <p>次のようなコードが機能すると思いました:</p> <pre class="brush:php;toolbar:false;">");phpinfo();echo("</pre> <p>ただし、phpinfo は文字列の一部とみなされ、eval 関数によって評価されないため、これは機能しません。 また、引用符をエスケープしようとしましたが、成功しませんでした。 </p> <p>質問:</p>
P粉476547076P粉476547076455日前569

全員に返信(2)返信します

  • P粉561749334

    P粉5617493342023-08-14 11:40:29

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

    リーリー

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

    返事
    0
  • P粉033429162

    P粉0334291622023-08-14 09:44:22

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

    リーリー

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

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

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

    返事
    0
  • キャンセル返事