Webhacking.kr 24번 문제 풀이
1. 24번 메인화면
- 겉만 보기에는 현재 사이트에 접속해있는 ip와 agent를 가져오네요.
2. index.phps로 들어가보면 소스가 나옵니다.
- 첫 번째 소스를 보시면 extract는 배열속의 키의 값들을 변수화 시키는데, 예를 들어서
ex) extract($_GET); -> $_GET['a'] == $a 같이 배열속의 a를 변수화 시킵니다.
$_SERVER와 $_COOKIE 배열속의 무언가를 변수화 시키겠죠?
밑에 $REMOTE_ADDR는 클라이언트의 IP주소를 가져오고, $HTTP_USER_AGENT는 클라이언트의 접속환경 정보를 가져오는 PHP의 환경변수에요.
여기서 중요한 것은 $_SERVER 보다 $_COOKIE가 나중에 처리되었기 때문에 $REMOTE_ADDR, $HTTP_USER_AGENT 같은 쿠키를 조작할 수가 있습니다. 많이 쓰이니까 찾아서 공부하시는 것도 좋을 겁니다.
if문을 보시면 만약 쿠키 중에서 이름이 "REMOTE_ADDR"인 값이 있으면, str_replace함수로 인해서 값이 변경됩니다.
그 밑의 if문을 보시면 $ip 값이 127.0.0.1이되면 성공이라고 뜨는데, (12/7./0.)을 공백으로 바꿔버리니 127.0.0.1로 ip를 쿠키변조해도 남는 것은 '1'이 될 것입니다. 전체적인 소스 설명은 이렇구요. 쿠키 변조를 해보겠습니다.
3. 저 같은 경우는 크롬을 쓰다보니 EditThisCookie 확장프로그램을 사용해요. 편리하기도 하구요.
EditThisCookie를 열고서 REMOTE_ADDR 쿠키값을 생성해줍니다.
4. 값을 SUSPECT로 바꿨더니 client ip가 SUSPECT로 바뀌는 것을 볼 수가 있습니다. 쿠키 변조가 통한다는 것을 의미하는데, 이 것을 응용해서 client ip를 루프백 주소(127.0.0.1)로 변경을 해보겠습니다.
5. 예상대로 str_replace로 필터링을 당해서 1만 남은 것을 볼 수가 있습니다.
6. (12/7./0.)가 필터 된다는 것을 유의하고 127.0.0.1에 우회할 수 있는 숫자를 추가해보면 밑의 그림과 같이 빨간 색 부분이 필터링 되고 남은 검정 색 부분 127.0.0.1이 남는 것을 볼 수가 있습니다.
7. 우회 값을 만들었으니, REMOTE_ADDR 쿠키 값에 넣어 보겠습니다.
8. client ip가 127.0.0.1이 된 것을 볼 수가 있습니다. Clear!