제 아이피와 사용자 에이전트(User agent)가 보이고, 그 아래 잘못된 아이피(Wrong IP!)라고 표시가 되어있네요. 일단 소스 코드를 확인해 보겠습니다.
PHP 코드가 있네요. 대충 보니 $ip
변수에 클라이언트의 아이피 주소를 담고, 이 값이 127.0.0.1
일 경우 문제가 풀리는 것 같습니다. 하지만 아이피 주소는 서버의 REMOTE_ADDR
로 얻어오기에 얼핏 보면 불가능해 보이지만, 상단에 extract($_COOKIE);
코드가 있기 때문에 값을 제 마음대로 바꿀 수 있습니다.
https://www.php.net/manual/en/function.extract.php
extract
함수를 PHP 매뉴얼에서 살펴보았습니다. 배열에 있는 데이터를 변수에 각각 매핑시키는 역할을 하는 것 같아 보이는데요. 사실 $ip
변수에 값을 담을 때에도 원래는 $_SERVER['REMOTE_ADDR']
로 가져와야 하지만, extract($_SERVER);
코드가 있기 때문에 $ip = $REMOTE_ADDR;
이 가능한 것입니다.
어쨌든 extract($_COOKIE);
코드 덕분에 우리는 쿠키에 값을 설정하는 것으로 언제든지 $ip
변수의 값을 바꿀 수 있습니다. 테스트로 REMOTE_ADDR
이름의 쿠키를 만들고 값을 123.123.123.123
으로 설정해 보았습니다.
정말로 값이 바뀌었네요! 3.3.3.3
으로 나오는 이유는 str_replace
함수를 이용한 필터링 때문입니다. 하지만 딱 1번만 실행되도록 코딩해놨기 때문에 이를 쉽게 우회할 수 있습니다. 예를 들어 12
가 필터링 되는 경우에 1122
로 입력하면, 내부의 12
가 사라지면서 결과적으로 12
가 나오게 됩니다. 이런 방식으로 필터링을 우회하면 됩니다.
123.123.123.123
으로 입력했던 값을 지우고 112277....00....00....1
를 입력해 보았습니다. str_replace
함수에 의해 최종적으로 127.0.0.1
로 바뀌게 될 것입니다.
아이피가 127.0.0.1
이 나오게 되면서 문제가 풀렸습니다! PHP의 extract
함수의 문제점을 알고 있는지 묻는 문제였습니다.