[WARGAME][webhacking.kr] old-24

jckim22·2022년 11월 19일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
92/114

아래는 서버 코드이다.

<?php
  extract($_SERVER);
  extract($_COOKIE);
  $ip = $REMOTE_ADDR;
  $agent = $HTTP_USER_AGENT;
  if($REMOTE_ADDR){
    $ip = htmlspecialchars($REMOTE_ADDR);
    $ip = str_replace("..",".",$ip);
    $ip = str_replace("12","",$ip);
    $ip = str_replace("7.","",$ip);
    $ip = str_replace("0.","",$ip);
  }
  if($HTTP_USER_AGENT){
    $agent=htmlspecialchars($HTTP_USER_AGENT);
  }
  echo "<table border=1><tr><td>client ip</td><td>{$ip}</td></tr><tr><td>agent</td><td>{$agent}</td></tr></table>";
  if($ip=="127.0.0.1"){
    solve(24);
    exit();
  }
  else{
    echo "<hr><center>Wrong IP!</center>";
  }
?>

대충 해석하면 reomote addr을 변조하고 replace우회를 피해서 마지막에는 127.0.0.1로 맞추는 문제였다.

이때는 $_SERVER['REMOTE_ADDR']와 혼동하여 패킷을 잡아서 접속자의 ip를 변조한다고 생각했다.

일단 아래처럼 구글링을 했다.

구글링을 하며 또 $_GET['REMOTE ADDR']과 혼동하여 아래처럼도 했었다.
replace를 우회하기 위해 value는 저렇게 입력했다.
아무튼 $_GET도 아니고 $_SERVER도 아니 그저 일반 변수였다.
선언한걸 본적이 없는데 어떻게 그럴 수 있었을까 의문이 들어서

아래에 extract함수를 알아보았다.

extract함수는 연관배열에서 예시로
key1:123
key2:1234
이렇게 있다면
$key1=123
$key2=1234
처럼 자체적인 변수로 만들어주는 함수이다.


extract($_SERVER)와 extract($_COOKIE)가 있다.
처음에 웹페이지에 나의 ip가 뜨는 것은 $_SERVER를 extract로 각각의 변수로 만들어주기 때문에 $REMOTE_ADDR이라는 변수가 생겼던 것이다.

쿠키에도 extract변수를 사용한다는 점을 참고하고 쿠키가 서버 다음 줄에 선언되기 때문에 쿠키에서 생긴 $REMOTE_ADDR로 덮어 씌워질 것이다.

그러면 쿠키에 REMOTE_ADDR을 추가하여 변수로 만들어주면 되겠다.
아래는 쿠키를 만들어본 것이다.

처음에는 ..은 .으로 바뀐다는 생각에 ..만 넣어줬다 그렇게 만들고 새로고침을 해주었더니 아래와 같이 떴다.

위와 같이 떴다는 것은 12와 12 둘 다 사라진 것이고 7은 잘되었다.
그리고 .이 없기 때문에 .을 하나 더 추가해야할 것 같다.
그래서 아래와 같이 수정을 했다.

그랬더니 $_COOKiE의 요소 중에 REMOTE_ADDR이 변수가 되어 replace를 다 우회하고 127.0.0.1로 if문에 들어오게 되어서 flag를 얻을 수 있었다.

profile
개발/보안

0개의 댓글