PentesterLab의 Code Execution 03 문제에 대한 접근 방법을 기록
이번 문제는 아래와 같이 정규식 패턴(pattern)을 입력받아 문자열(base)을 비교해 새로운 문자열(new)로 수정할 수 있는 페이지이다.
특정 값을 입력받기에 에러를 유발시켜 에러 메세지를 확인해보니 preg_replace함수를 사용하고있으며 해당 PHP에서 유명한 RCE가 함수로 해당 함수는 PHP5.5 이후부터는 사용할 수 없다.
그렇다면 어떤식으로 RCE에 연결할 수 있을까? 먼저 preg_replace함수는 다음과 같은 형태를 가진다.
여기서 우리가 눈여겨볼 부분은 $replacement이다. 해당 인자는 정규식 형태로 입력받으며 여기서 /pattern/e 과 같이 e 옵션을 줄 경우 치환될 문자를 php 코드 그대로 해석한다.
테스트 결과 아래와같이 paatern인자에 "//e"형태의 정규식을 전달하여 new인자가 php 코드로 인식된다😨