[해킹 대회 문제] wargame.kr - strcmp 문제풀이(Write Up)
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) 값이 반환되기 때문에 이러한 취약점을 해결하기 위한 효과적인 방법이라고 할 수 있습니다.
'해킹 방어 대회(CTF)' 카테고리의 다른 글
[해킹 대회 문제] wargame.kr - tmitter 문제풀이(Write Up) (0) | 2019.07.13 |
---|---|
[해킹 대회 문제] wargame.kr - md5_compare 문제풀이(Write Up) (0) | 2019.07.13 |
[해킹 대회 문제] wargame.kr - DB is really GOOD 문제풀이(Write Up) (0) | 2019.07.13 |
[해킹 대회 문제] wargame.kr - md5 password 문제풀이(Write Up) (0) | 2019.07.13 |
[해킹 대회 문제] wargame.kr - fly me to the moon 문제풀이(Write Up) (0) | 2019.07.13 |