webhacking.kr old 60번 문제풀이(Writeup)
문제를 들어가면 위와 같이 출력된다. 코드에서 힌트를 확인해보자.
첫 if문을 보면! is_numeric()을 통해 PHPSESSID값이 숫자가 아니면 Access Denied를 출력하고 1초를 sleep 한다. 이후
가장 눈에 띄는 것은 다음 if문이다. Get 메소드에서 mode가 "auth"이면 Auth가 출력되고, session[idx].txt 파일을 읽어서 result 변수에 저장하고, result값과 session[idx]값이 같으면 해결된다.
마지막 if문에선 자신의 주소가 127.0.0.1이 아니면 readme/session[idx].txt 파일을 1초 쉬고 삭제한다. 그렇다면 session[idx]값이 삭제되기 전에 조회하면 해결될 것으로 보인다.
하지만 쿠키 값이 변경되면 로그인을 재시도해야 하기에 현재 사용 중인 Chrome 브라우저만 사용할 때 해결이 되지 않았다. 따라서 Chrome과 Edge 브라우저 두 개를 사용해서 Chrome 브라우저에서 쿠키값은 1로 넣고, Edge 브라우저에서 56763을 넣었다.
값을 넣고 ?mode=auth 화면에서 거의 동시에 새로고침을 클릭해서 값을 넣었다.
두 번째 if문이 실행되어 문제가 해결된 것을 확인할 수 있다.
문제를 풀고 취약점에 대해서 찾던 중에 이번 문제의 취약점이 레이스 컨디션 공격 공격이다. 그래서 레이스 컨디션에 대해 정리를 해보려고 한다.
레이스 컨디션이란?
: 한정된 자원을 동시에 이용하려는 여러 프로세스가 자원의 이용을 위해 경쟁을 벌이는 현상
레이스 컨디션 공격이란?
: 실행 프로세스가 임시파일을 생성할 시, 실행 중에 끼어들어 임시 파일을 목적 파일로 연결(심볼릭 링크)하여 권한 상승(setuid를 이용) 등 악용하는 공격이다. 쉽게 말하면 레이스 컨디션을 이용하여 root 권한을 얻는 공격이다.
공격 방식
1) 생성할 임시파일의 경로에 동일한 이름의 파일이 있는 확인
2) 동일한 파일이 있으면 해당 파일을 삭제
3) 임시파일 생성
4) 임시파일 실행
대응방안
1. 가능하면 임시파일 생성 자제
2. 임시파일에 심볼릭 링크가 있는지 검사
3. 임시파일을 만들 때 이름을 추측하지 못하도록 랜덤하게 생성
4. umask을 최하인 022(쓰기 권한 제거)로 설정. 임시 생성 파일이 공격자에 의해 악의적으로 삭제되지 않도록 한다.
참고문헌
https://isc9511.tistory.com/120
https://d4m0n.tistory.com/3
https://jennana.tistory.com/385
'웹해킹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr old 48번 문제풀이(Writeup) (0) | 2022.11.04 |
---|---|
webhacking.kr old 34번 문제풀이(Writeup) (0) | 2022.11.04 |
webhacking.kr old 46번 문제풀이(Writeup) (0) | 2022.11.01 |
webhacking.kr old 44번 문제풀이(Writeup) (0) | 2022.10.31 |
webhacking.kr old 49번 문제풀이(Writeup) (0) | 2022.10.30 |