A ship in harbor is safe, but that is not what ships are built for.

STUDY/WEB_Hacking

Webhacking.kr 24번 문제(old)

플리피나리 2019. 12. 17. 13:41
반응형

 

24번 문제의 메인화면이다. 소스코드를 확인해보자.

 

중요한 부분만 간단히 확인해보겠다.

 

<?php
  extract
($_SERVER);      //$_SERVER의 값을 변수화
  
extract($_COOKIE);      //$_COOKIE의 값을 변수화
  
$ip $REMOTE_ADDR;    //ip 변수에 $REMOTE_ADDR의 값 저장
  
$agent $HTTP_USER_AGENT;    //agent 변수에 $HTTP_USER_AGENT의 값 저장
  if(
$REMOTE_ADDR){      //$REMOTE_ADDR의 값이 존재한다면
    
$ip htmlspecialchars($REMOTE_ADDR);   //$REMOTE_ADDR의 값에서 특수문자를 html 엔터티로 변환해 ip에 재저장
    
$ip str_replace("..",".",$ip);   //ip의 값에서 ".."를 "."로 치환
    
$ip str_replace("12","",$ip);  //ip의 값에서 "12"를 공백으로 치환
    
$ip str_replace("7.","",$ip);  //ip의 값에서 "7."를 공백으로 치환
    
$ip str_replace("0.","",$ip);  //ip의 값에서 "0."를 공백으로 치환
  }
  if(
$HTTP_USER_AGENT){   //$HTTP_USER_AGENT의 값이 존재한다면
    
$agent=htmlspecialchars($HTTP_USER_AGENT);  //$HTTP_USER_AGENT의 값에서 특수문자를 html 엔터티로 변환해 agent에 재저장
  }
  echo 
"<table border=1><tr><td>client ip</td><td>{$ip}</td></tr><tr><td>agent</td><td>{$agent}</td></tr></table>";    //테이블 형태로 $ip와 $agent의 값을 보여줌
  if(
$ip=="127.0.0.1"){  //ip가 127.0.0.1이라면
    
solve(24);      //문제해결
    exit();
  }
  else{   //ip가 127.0.0.1이 아니라면
    echo 
"<hr><center>Wrong IP!</center>";   //Wrong IP!를 출력
  }
?>

 

extract( ) : 배열 속의 키값을 변수화 시키는 함수

htmlspecialchars( ) : 문자열에서 특정한 특수문자를 html 엔터티로 변환하는 함수

$REMOTE_ADDR : 클라이언트의 IP를 가져오는 PHP의 환경변수

$HTTP_USER_AGENT : 클라이언틔의 접속환경 정보를 가져오는 PHP의 환경변수

***여기서는 $_SERVER 보다 $COOKIE가 나중에 처리되었기 때문에 위의 두 환경변수들을 쿠기로 조작할 수 있다!!!

 

 

결과를 확인해보기 위해 REMOTE_ADDR이라는 COOKIE를 만들어 그 값에 127.0.0.1을 넣어보았다.

 

결과는 위와 같다. 1이 나온 이유는 str_replace로 한번 검열이 되기 때문인데 (12)(7.)(0.)(0.)1와 같이 괄호친 부분이 공백으로 대체되어 ip의 값이 1이 된 것이다.

 

str_replace는 처음 한 번 변수에 저장된 값을 검사해 치환을 하고 그 후 저장된 값에 대해서는 검사를 하지 않는다.

 

따라서 str_replace가 실행된 후의 결과가 127.0.0.1인 값을 REMOTE_ADDR의 COOKIE값으로 넣어보자.

112277...00...00...1 값을 넣어보자. 1(12)27(7.)(.. -> .)0(0.)(.. -> .)0(0.)(.. -> .)1로 str_replace된 결과가 127.0.0.1이 나올 것이다.

 

그리고 새로고침을 하면

 

문제가 해결되었음을 확인할 수 있다!

반응형

'STUDY > WEB_Hacking' 카테고리의 다른 글

Webhacking.kr 39번 문제(old)  (3) 2019.12.20
Webhacking.kr 26번 문제(old)  (0) 2019.12.18
Webhacking.kr 18번 문제(old)  (0) 2019.12.03
Webhacking.kr 17번 문제(old)  (0) 2019.11.30
Webhacking.kr 14번 문제(old)  (0) 2019.11.29