PHP の eval 関数の解析と処理
P粉476547076
P粉476547076 2023-08-13 17:40:10
0
2
578
<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>
    <li>ここにコードを挿入する正しい方法は何ですか? </li> <li>なぜ<code>$a='1');phpinfo();echo($a</code> は機能するのでしょうか?</li> </ul>


P粉476547076
P粉476547076

全員に返信(2)
P粉561749334

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

リーリー

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

いいねを押す +0
P粉033429162

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

リーリー

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

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート