본문 바로가기
Web/Webhacking.kr

Webhacking.kr Challenge old-60 문제 풀이

by jh117jh 2024. 2. 16.
728x90

 

이번 문제는 접속 시 내 idx값이 출력되고 있다.

 

소스코드를 보면 

 

$_COOKIE['PHPSESSID']값이 숫자로 되어 있지 않을 시 해당 코드가 종료되고 숫자일시 mode파라미터값이 auth면 $_SESSION['idx'].txt파일을 불러와 내 $_SESSION ['idx'] 값이랑 같을 시 문제가 풀린다.

 

하지만 아래 코드를 보면 로컬ip가 아닐 시 1초의 딜레이 후 $_SESSION['idx'].txt가 삭제되는어 불러올 수 없다.

 

학교 선배님이 말씀하신게 항상 문제를 코드분석을 할 때 굳이?라는 기능의 코드가 있으면 거기에 취약점이 있을 가능성이 있다 하셨다.

 

위에 코드에서 굳이 있어야 될까 라는 코드는 sleep(1)이라 생각이 되어 보면

 

드림핵 login-1과 비슷한 문제임을 알 수 있다. (레이스 컨디션으로 멀티 스레드 환경에서는 프로세스 내의 모든 자원을 공유할 수 있다는 점에서 동기화 문제가 발생한다.)

 

1초의 딜레이 후 파일이 삭제되므로 1초안에 다른 세션으로 접속하면 파일이 삭제되기 전에 확인할 수 있을 것이다.

 

우선 $_COOKIE ['PHPSESSID']가 숫자여야되므로 1로 변경 후 재 로그인해 준다.

이후 다른 브라우저 IE, 파이어폭스 등등으로 로그인 후 $_COOKIE ['PHPSESSID'] 값을 다른 숫자로 변경해 준다. (같은 숫자로 할시 같은 프로세스로 인식되기 때문에)

 

이제 mode파라미터를 auth로 요청해 주면 

 

Auth~로 인증된 걸 확인할 수 있고 

두 브라우저에서 동시에 요청을 보내주면 

문제가 풀리는 걸 확인할 수 있다.

728x90