처음 들어가게 되면 이런 화면이 보입니다.
Wrong IP! 라는 문구가 왠지 저한테 IP를 바꿔야 한다고 말하고 있는 것 같군요.
그래서 일단 view-source를 통해 소스를 보기로 했습니다.
여기서 주목해야 할 점은 바로 extract(\$_SERVER), extract(\$_COOKIE) 입니다.
php에서 extract() 함수는 배열 속의 키 값을 변수화 시켜줍니다.
REMOTE_ADDR, HTTP_USER_AGENT 같은 변수들이 변수화되었다는 것을 알 수 있습니다.
(저는 나중에 안 사실이지만, \$_SERVER보다 \$_COOKIE가 나중에 선언되었기 때문에 cookie를 통해 조작이 가능한 것이었습니다.)
풀이 방법을 먼저 말해버린 것 같지만 아무튼 cookie를 조작해야 한다는 것을 알게 되었습니다.
이제 cookie 조작에 유용한 툴인 'EditThisCookie'를 통해 현제 페이지의 쿠키들을 살펴보도록 하겠습니다.
cookie를 살펴보았지만 아쉽게도 REMOTE_ADDR 이라는 이름을 가지는 cookie는 없었습니다.
그렇다면 우리가 해줄 단 하나의 일은 바로 해당하는 쿠키를 추가해주는 것!
'+' 버튼을 눌러 쿠키를 추가해주었습니다.
이렇게 추가해준 다음에 페이지를 새로고침 해주었습니다.
이상하게도 1 밖에 출력이 되질 않으면서 여전히 Wrong IP!라는 문구가 보이고 있습니다.
우리는 하나의 조건을 놓친 것이죠.
이 구문을 통과하고 나서의 결과가 127.0.0.1이 되도록 해야 한다는 것을요.
php의 str_replace는 해당하는 문자열의 앞 쪽 부분을 뒤 쪽 부분으로 치환하게 됩니다.
한 번만 쓱 훑는 거죠.
그렇다면 우리는 값을 저 치환 구문을 통과하고도 127.0.0.1이라는 값이 나오도록 만들어야 합니다.
저는 112277...00...00...1 이렇게 만들었습니다.
걸려서 없어지는 부분들을 강조해보면...
- (.. 없애기) 112277...00...00...1 -> 112277..00..00..1
- (12 없애기) 112277.00.00.1 -> 1277..00..00..1
- (7. 없애기) 1277..00..00..1 -> 127.00..00..1
- (0. 없애기) 127.00..00..1 -> 127.0.0.1
그래서 해당 값을 넣어서 세팅하고
리로딩 해주면
라고 뜨면서 통과했다고 뜹니다. (저는 푼 뒤에 쓰는 글이라 그런 게 없네여...)
\$ 라는 구문들은 제가 코딩 관련해서 포스팅 할 때 수학 기호들 쓰려고 넣은 것 땜에 인식 안되도록 한 것이니 양해부탁드려요...ㅎㅎ
그리고 저는 보통 문제를 하나 풀고 나면 다른 분들의 풀이를 찾아보는 데
https://hackingboy.tistory.com/7
이 분의 풀이가 굉장히 신기했습니다.
보통은 다들 저처럼 확장 프로그램 등을 이용하여 cookie를 추가하거나 그러시는데
javascript:alert(document.cookie="REMOTE_ADDR=~~~");
이렇게 쓰시는 거 보고 정말 신기했습니다.