찾다

 >  Q&A  >  본문

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="en"> <머리> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>예제 스크립트</title> </머리> <본문> <h1>예제 페이지</h1> <p>이제 수학을 해보세요. 계산할 수식을 입력해주세요. 예: 1+1. </p> <form method="get"> <p>공식: <input type="text" name="maths" /></p> <p><input type="submit" value="calculate" /></p> </양식> <? if (( isset($_REQUEST["maths"])) && ($_REQUEST["maths"] != "") ) { echo "<p>결과는 다음과 같습니다:"; eval("echo (".$_REQUEST["수학"].");"); echo "</p>"; } ?> </body> </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粉476547076472일 전586

모든 응답(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를 사용하려면 하나 이상의 인수가 필요합니다.

    여기에 코드를 삽입하려면 입력이 이전에 유효한 것으로 끝나는지 확인해야 합니다. echo ( 之后是有效的内容开头,并且以在 ); . 이 두 부분 사이에 삽입하려는 추가 코드를 배치하세요.

    회신하다
    0
  • 취소회신하다