반응형
제목과 같이 strcmp 취약점을 이용하여, 우회하면 flag를 얻을 수 있는 문제이다.
서버에 접속하면 패스워드를 입력할 수 있는 폼과 소스코드를 확인할 수 있는 링크가 나온다.
먼저 아무 값이나 넣어보면 Wrong password라는 문구가 뜬다.
소스코드를 확인했다.
strcmp($_POST['password'], $password) == 0
strcmp 함수는 POST 방식으로 입력받은 password와 $password를 비교하여 같으면 0을 출력한다.
PHP의 strcmp() 함수는 두 개의 문자열을 비교하고 같으면 0을 반환, 다르면 그 차이에 따라 양수 또는 음수를 반환한다.
이러한 strcmp 함수에는 취약점이 존재한다. 문자열을 비교하기 위한 함수이지만, 문자열이 아닌 다른 유형의 데이터(특히 배열)를 인자로 전달하는 것은 취약점을 발생시킨다.
PHP의 타입 강제 변환 규칙에 따라 배열이 'Array' 라는 문자열로 변환된다. 만약 $a가 배열이라면, PHP는 배열을 문자열로 반환한 후에 그 문자열을 비교하며 이 과정에서 PHP는 배열을 'Array' 문자열로 반환하게 된다.
이 'Array' 문자열과 어떠한 문자열이든 비교하면 항상 0이 반환된다.
따라서 위와 같이 password를 배열로 바꾸고 아무거나 입력하면 문제를 해결할 수 있다.
반응형
'Dreamhack > Web' 카테고리의 다른 글
web-ssrf (0) | 2024.09.19 |
---|---|
php-1 (0) | 2024.03.27 |
csrf-2 (0) | 2023.11.09 |
csrf-1 (0) | 2023.11.09 |
XSS Filtering Bypass (0) | 2023.11.09 |