view-source를 누르자.
PHPSESSID 쿠키 값이 정수가 아니면 Access Denied가 뜬다.
get으로 mode=auth를 입력하면 세션 idx 값에 해당되는 txt 값이 result에 저장된다.
이때 이 result값과 idx 값이 일치하면 문제가 풀리게 된다.
아래를 보면 if문이 하나 더 있는데 IP 주소가 127.0.0.1이 아닐 경우, 생성한 txt 파일을 1초 후 삭제하는 것을 볼 수 있다.
일단 PHPSESSID 값을 정수형으로 바꿔주자.
PHPSESSID 값을 1234577로 변경한 후, 새로 고침을 하니 로그인을 하라는 메시지가 뜬다.
다시 로그인을 하니, Access Denied라는 문자열이 없어졌다.
?mode=auth를 입력하자.
역시 풀리지 않았다. idx가 세션에 있는 것으로 보아 idx를 변경하는 것은 어려울 것으로 보인다.
소스 코드를 다시 보니 생성한 txt 파일을 삭제하기 전에 sleep 함수가 있는 것을 볼 수 있다.
그럼 sleep 함수가 작동하는 1초 동안 같은 idx 값으로 다시 접근을 한다면, 생성된 파일을 읽을 수 있을 것이다.
이때 이 공격을 레이스 컨디션 공격이라고 한다.
레이스 컨디션 공격 : 공유 자원에 대해 여러 개의 프로세스가 동시에 접근하기 위해 경쟁하는 것을 이용해 관리자 권한을 얻는 공격(출처 : https://d4m0n.tistory.com/3)
그럼 창을 2개 띄워놓고, 동시에 접근해보자.
이때, 쿠키 값을 같게 하면 동일한 프로세스로 인식되기 때문에 쿠키 값을 다르게 설정해야 한다.
즉 2개의 브라우저를 사용하면 된다.
Cooxie Toolbar를 사용하여 IE의 PHPSESSID 쿠키 값을 12345로 변경해주었다.
새로 고침을 하면 크롬과 동일하게 로그인 하라는 메시지가 뜬다.
이에 로그인을 하고 들어가면, 또 로그인을 하라고 뜬다 . . 무한 반복 . . 아무래도 뭔가를 잘못 한 것 같다.
그래서 파이어폭스로 진행했다.
쿠키 값을 1234567로 설정하고 재로그인을 했다.
그런 다음 파이어폭스에 https://webhacking.kr/challenge/web-37/?mode=auth 를 입력하여 파일을 생성하고
크롬에도 거의 동시에 동일한 URL을 입력하여 생성한 파일에 접근했다.
그랬더니 문제가 풀렸다!
'Wargame > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr old 11번 문제 풀이 (0) | 2021.06.29 |
---|---|
Webhacking.kr old 37번 문제 풀이 (0) | 2021.06.21 |
Webhacking.kr old 49번 문제 풀이 (0) | 2021.05.26 |
Webhacking.kr old 10번 문제 풀이 (0) | 2021.05.26 |
Webhacking.kr old 46번 문제 풀이 (0) | 2021.05.25 |