인디안 보호구역

Webhacking.kr 24 본문

Study/WebHacking 공부하는 인디안

Webhacking.kr 24

Indie-An 2019. 5. 25. 21:00
  1. 문제 풀이

<첫인상>

내 IP주소와 접속 정보가 보이고, 그 밑에는 Wrong IP라고 나오는 것으로 보아 IP를 조작해야 한다고 생각이 들었다.

 

<코드 확인>

아래 주석처리된 source 페이지 외에는 별다른 특이점을 발견할 수 없었기에 문제 url에 index.phps 라고 덧붙여 해당 소스 페이지에 들어갔다. (http://webhacking.kr/challenge/bonus/bonus-4/index.phps)

[사전 설명]

  • extract() 함수란?
    배열을 인자로 가지며, 배열 안의 인덱스를 변수화 시킨다.(?)
    예를 들어, Info[ip] = 123, Info[mac]=456 일 때, extract(Info)를 호출하면
    ip=123, mac=456 이라는 두개의 변수가 생성된다.
    *변수 명이 충돌하면, 기존 변수를 덮어쓴다.!!

 

이렇다면, $_SERVER라는 배열과 $_COOKIE 라는 배열이 존재하며, 그 안의 속성들이 다 변수화 되었을 것이라고 판단할 수 있음.

 

  • $_SERVER 배열이란?
    PHP 예약 변수 중 하나이며, 서버와 실행환경 등의 정보를 담고 있는 배열이다.
    위의 코드에서는 extract로 추출된 $REMOTE_ADDR 변수와 $HTTP_USER_AGENT 변수를 지역변수 $ip와 $agent에 대입하는 것을 볼 수 있다.

 

$_SERVER[REMOTE_ADDR] 변수는 웹페이지를 접속한 클라이언트의 IP를 킷 값으로 갖는다.

 

<문제 풀이>

extract() 함수가 두번 쓰이면서 $_SERVER의 배열을 변수화 한 다음, $_COOKIE의 배열을 변수화 하는데, extract() 함수 특성상 같은 변수명이 발생하면 이후에 만들어진 변수만 남기 때문에 COOKIE에 있을 REMOTE_ADDR 값을 변경해줘야 한다고 생각했다.
(정확히는 extract 함수 속성의 default가 EXT_OVERWRITE라서 덮어쓴다. 다른 방식으로 변경 가능)

 

또한 문자열 치환 함수때문에 REMOTE_ADDR의 값에 127.0.0.1을 대입하면 필터링될 것으로 보였다.

12와 7 0 등이 치환되는 것으로 보아 온점(.)과 1만 남을 것이라고 생각했다. 우선 쿠키를 확인하고 값을 변경하려고 했는데,

웬걸! 없어서 만들어줬다. EditThisCookie 라는 크롬 확장 프로그램을 활용했다.

문제 페이지에 다시 접속해보았다. 예상 되는 결과는 ‘...1’ 이었다.

예상은 빗나가기 마련, 온점들이 다 사라졌다. 그래서 소스를 다시 한번 봤더니

‘12 / 7. / 0. ‘ 처럼 온점이 포함된 문자열을 제거하는 것이었다..! 다시 한번 띵킹하기 시작했다. 그 결과는  ‘17.270..00..00..1’ 이 문자열을 REMOTE_ADDR의 값으로 주면 str_replace 함수가 알아서 문자를 제거할 것이라는 걸 알 수 있다.

100점 획득.!

2. 배운 점

  • extract() 함수가 인덱스..?를 변수화 시키는 함수라는 것.

  • $_SERVER 배열이 서버와 실행환경 등의 정보를 가진 배열이라는 것.

  • 쿠키가 여러개면 $_COOKIE가 배열이 된다는 것?

 

3. 참고 링크

 

'Study > WebHacking 공부하는 인디안' 카테고리의 다른 글

Webhacking.kr 4  (0) 2019.05.27
Webhacking.kr 15  (0) 2019.05.25
WebHacking.kr 32  (0) 2019.05.22
Webhacking.kr 10  (0) 2019.05.19
WebHacking.kr 14  (0) 2019.05.11
Comments