문제
if you can bypass the strcmp function, you get the flag.
Strcmp 기능을 우회할 수 있다면 Flag를 찾을 수 있다.
풀이
문제 접근 시 password 입력 폼 및 source를 볼 수 있는 하이퍼링크가 확인된다. 우선 문제에서 제시된 strcmp 기능의 대해서 알아보자.
[참조] strcmp() 함수
strcmp( string1, string2 ) 형식, php에서 사용되는 함수로 string1과 string2 을 비교한다 해당 인자는 문자열 형식이고 대소문자를 구분한다 문자열 대신 변수를 값으로 넣을 수 도 있다.
비교 결과는 다음과 같다
1) string1 > string2 : 음수값을 반환 (0보다 작은값)
2) string1 < string2 : 양수값을 반환 (0 보다 큰값)
3) string1 = string2 : 0 을 반환
view-source 소스코드 확인 시 strcmp($_POST['password'], $password) == 0있다. 문제에서 제시된 strcmp() 함수 구문이고 POST_Method 방식으로 입력 받은 변수값과 $password 변수값을 비교하여 값이 0일경우 Flag값을 출력하는걸 확인할 수 있다.
php 5.3이상 버전에는 두가지 특이점이 있다.
1) strcmp() 함수의 비교 인자가 배열과 문자열일 경우 Null을 출력한다.
2) Null == 0 을 비교 할 경우 True가 출력된다.
_POST 변수의 내용을 배열로 입력하여 Null값으로 만든 후 Null == 0 을 비교하여 True값의 결과를 출력받을 수 있다.
개발자 도구(F12) -> Elements 탭을 통하여 input 함수의 name=”password[]” 수정하여 입력 을 배열로 변경시킨 후 임의의 문자를 입력 시 Null 값이 Post로 전송 되며 이에 True값으로 정답 페이지에 접속할 수 있다.
Flag : 789b3066f63b82fcf29dbab6e199df62366e9443 |
성공적으로 Flag 값을 획득하고 초기 화면에 해당 Flag 값을 제출하면 통과할 수 있다.
strcmp() 의 취약점을 이용한 문제이나 비교연산자를 === 으로 사용할 경우 정확한 값의 비교를 요구하게 되기 때문에 문제 같은 상황을 막을 수 있다.
'Hacking > wargame.kr' 카테고리의 다른 글
[wargame.kr] Question 9. DB is really GOOD (0) | 2021.06.28 |
---|---|
[wargame.kr] Question 8. md5 password (0) | 2021.06.28 |
[wargame.kr] Question 6. Fly me to the moon (0) | 2021.06.24 |
[wargame.kr] Question 5. WTF_CODE (0) | 2021.06.23 |
[wargame.kr] Question 4. Login filtering (0) | 2021.06.23 |