반응형

PHP - assert() 함수 문제를 풀어보겠습니다.

취약한 부분을 찾아서 .passwd 파일을 읽어야합니다.

 

우선, assert() 함수란, 조건이 참이 아닌 경우(거짓인 경우) 경고/에러를 출력하게 하는 함수로, 주로 디버깅 시 많이 사용됩니다. 

 

문제에 들어가보면, [Home], [About], [Contact] 3개의 탭이 있습니다.

일단, [About] 탭을 눌러보겠습니다.

 

"page" 라는 파라미터가 GET 메소드로 전송되고 있고, [About] 탭에 해당하는 페이지가 출력되고 있습니다.

 

"page" 파라미터에 상위 폴더로 이동 가능한 특수문자 "../" 을 입력해보았더니,

assert() 함수로 인해 에러가 출력되고 있습니다.

 

strpos 함수는 문자열이 포함되는지 검사하는 함수인데, 문자 ".." 때문에 공격이 탐지됨을 알 수 있습니다.

 

이번에는 "./" 을 입력해보았는데, 공격이 탐지가 되지는 않지만, 파일이 없다고 나오네요.

 

혹시 될까 싶어서 .passwd 파일을 바로 넣어 보았는데, .php가 자동으로 합쳐져서 없는 파일이라고 출력되는 것을 다시 한 번 확인할 수 있었습니다.

 

"../"을 입력했을 때 출력된 에러메시지를 이용해서 strpos 함수를 강제로 완료한 후 system 명령어를 작성해보았습니다.

system 명령어는 따로 문자열 검사를 하지 않아서 공격으로 간주되지는 않아 보였습니다.

하지만, .php가 강제로 붙어 버려서 syntax 에러가 발생하는 것을 알 수 있습니다.

 

강제로 완료한 strpos 함수를 뒤에 다시 써주고, .passwd 파일을 여는 시스템 명령어를 삽입하면!

FLAG 값을 얻을 수 있습니다.

 

','ㅁ') << 이 ㅁ 부분에 a, b 등이 들어가면 문자열 탐지로 인해 공격으로 간주하는 것 같습니다...

탐지가 안되는 문자 값을 입력해주어야 합니다.

반응형

+ Recent posts