안경잡이개발자

728x90
반응형

  PHP에서 strcmp() 함수에 대한 문제인 것 같습니다. 마찬가지로 문제 유형은 웹 해킹이 되겠습니다.

 

 

  페이지에 접속하면 다음과 같이 소스코드를 확인할 수 있는 [view-source] 버튼이 보입니다.

 

 

  다음과 같이 소스코드를 확인할 수 있는데요. 한 번 소스코드를 분석해 보겠습니다.

 

 

  strcmp(A, B) 함수는 두 개의 문자열을 비교하는 대표적인 함수입니다. A가 B보다 작으면 음수 값, B가 작으면 양수 값, 그리고 같은 경우에 0을 반환합니다. 따라서 문제를 해결하기 위해서는 strcmp() 함수의 결과로 0이라는 값이 출력되어야 한다는 것을 알 수 있습니다.

 

  특정한 PHP 버전대에서는 strcmp()의 인자 값으로 배열을 넣는 경우 NULL 값이 반환된다고 합니다. 또한 PHP에서는 NULL과 0을 == 연산자를 이용하여 비교했을 때 같다(True) 값을 내뱉기 때문에 strcmp() 함수의 취약점을 이용하면 문제를 풀 수 있습니다. 이렇게 되는 이유는 == 연산자의 경우 느슨하게 검증을 수행하기 때문이라고 합니다.

 

  따라서 다음과 같이 개발자 도구(F12)를 실행하여 보내는 데이터의 형태를 password[]로 배열 형태로 변경하여 전송할 수 있습니다. 그러면 아무런 값이나 보내도 결과적으로 필터링을 우회할 수 있을 것입니다.

 

 

  사실 PHP에서도 === 연산자를 지원합니다. 이것을 이용하면 정확히 동일한 Type일 때에만 참(True) 값이 반환되기 때문에 이러한 취약점을 해결하기 위한 효과적인 방법이라고 할 수 있습니다.

 

 

 

728x90
반응형