Rumah  >  Soal Jawab  >  teks badan

Menghuraikan dan menangani fungsi eval dalam PHP

<p>Penafian: Ini hanyalah contoh untuk mempelajari suntikan kod PHP, bukan kod pengeluaran untuk digunakan dalam apa jua cara. Saya sedar sepenuhnya bahawa ini bukan amalan pengekodan yang baik. </p> <p>Saya mempunyai skrip PHP berikut: </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="en"> <kepala> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <tajuk>Contoh skrip</title> </head> <badan> <h1>Contoh halaman</h1> <p>Sekarang untuk matematik. Sila masukkan formula untuk mengira. Contohnya: 1+1. </p> <form method="get"> <p>Formula: <input type="text" name="maths" /></p> <p><input type="submit" value="calculate" /></p> </form> <? if (( isset($_REQUEST["maths"])) && ($_REQUEST["maths"] != "") ) { echo "<p>Hasilnya ialah:"; eval("echo (".$_REQUEST["matematik"].");"); echo "</p>"; } ?> </badan> </html></pre> <p>Skrip ini terdedah kepada suntikan kod PHP, saya dapat memecahkannya dengan melakukan perkara berikut (kebanyakannya didapati melalui percubaan dan ralat): </p> <pre class="brush:php;toolbar:false;">$a='1');phpinfo();echo($a</pre> <p>Namun, saya tidak memahami sepenuhnya rasionalnya. Daripada apa yang saya faham, saya perlu melengkapkan pernyataan gema, masukkan kod saya sendiri (cth. phpinfo()), dan kemudian tulis fungsi lain (cth. echo) untuk mengendalikan kurungan penutup. </p> <p>Saya fikir kod seperti ini akan berfungsi: </p> <pre class="brush:php;toolbar:false;">");phpinfo();echo("</pre> <p>Walau bagaimanapun, ini tidak berfungsi kerana phpinfo dianggap sebagai sebahagian daripada rentetan dan tidak dinilai oleh fungsi eval. Saya juga cuba melarikan diri dari petikan tanpa kejayaan. </p> <p>Soalan:</p> <ul> <li>Apakah cara yang betul untuk menyuntik kod di sini? </li> <li>Mengapa<kod>$a='1');phpinfo();echo($a</code> berfungsi?</li> </ul><p><br /></p>
P粉476547076P粉476547076455 hari yang lalu568

membalas semua(2)saya akan balas

  • P粉561749334

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

    Masalahnya ialah kenyataan ini tidak sah:

    echo ();

    Ia menyebabkan ralat penghuraian. Jadi anda perlu menyuntik sesuatu untuk mengelakkan ralat ini. Contohnya:

    $var = "1); phpinfo(); echo (1";
    eval("echo ($var);");

    balas
    0
  • P粉033429162

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

    Apabila anda menggunakan input itu, hasil menggantikan pembolehubah ialah:

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

    Jadi nilai $a='1',并且输出了该赋值的结果(即被赋给 $a 的值)。然后执行了 phpinfo()。最后再次输出了 $a ditetapkan di sini.

    Jika anda cuba menggunakan );phpinfo();echo(,它不会起作用,因为它试图执行 echo ()。但是 echo sekurang-kurangnya satu hujah diperlukan.

    Jadi untuk menyuntik kod di sini, anda perlu memastikan input berakhir dengan sesuatu yang sah sebelum ini echo ( 之后是有效的内容开头,并且以在 ); . Letakkan sebarang kod tambahan yang anda ingin suntik di antara dua bahagian ini.

    balas
    0
  • Batalbalas