Wargame/Web-W
wargame.kr strcmp
p3ngdump
2017. 8. 4. 17:25
wargame.kr 의 strcmp 문제다.
strcmp 함수의 우회법을 알면 플래그를 가질 수 있단다.
딱 들어가면 password를 입력받는 박스와 밑의 소스코드가 있다.
소스코드부터 살펴보도록하자.
랜덤값으로 password를 파일에서 가져오는데
어쨌든간 그 password랑 내가 입력한 password랑 같아야지 키 값이 출력된다.
그럼 정상적으로는 거의 불가능에 가깝게 패스워드가 일치할 수 없다는것이다.
strcmp 함수의 취약점을 이용하면 손쉽게 풀 수 있다.
php 버전마다 다르지만, strcmp 함수에는 배열과 문자열을 비교했을 때
NULL을 반환하게 되어있다. 즉 0 을 반환한다.
그게 무슨소리냐? strcmp는 두 문자열이 같을 때 0을 반환하게 된다.
결국 문자열과 배열을 비교하게되면 무조건 0을 반환하므로
두 개의 문자열과 배열이 같지 않더라도 같은 것처럼 인식한다는 얘기다.
막는 방법은 간단하게 '=='을 '==='으로 고쳐주면된다.
어쨌든, 배열과 비교하면 무조건 0을 반환하므로
입력폼의 password를 배열 형식으로 바꿔주자.
그리고 아무런 문자, 숫자나 입력하고 chk!
플래그를 얻었다. 끝.
반응형