Cooxie 사용법이나 php 코드에 대한 자세한 분석은 넣지 않았습니다.

읽고 이해가 가지 않으신다면 댓글로 질문해주세요~

php나 Tool 사용법을 모르신다면 따로 공부를 먼저 하시고 보시길 권장해드립니다 ㅇㅅㅇ


------------------------------------------------------------------------------------


어떠한 분이 댓글로 풀이를 올려달라고 하셔서 이렇게 쓰게 됩니다.

간단한 문제이니 살펴봅시다 ^^

http://yangws13.myfeelclub.com/bbs/zboard.php?id=query_Q

위 URL 로 들어가게 되면 아래와 같은 문제 페이지가 나오게 됩니다.


client ip에는 접속한 사용자의 아이피가 출력되며 agent 에는 사용자 시스템 정보등이 나오게 됩니다.

문제 목적은 client ip 에 루프백 주소인 127.0.0.1을 출력하게 하는 것 입니다.

힌트 페이지를 보시면 아래와 같이 소스가 나와있습니다.

<?
$answer="????????";
extract($_SERVER);
extract($_COOKIE);
$ip=$REMOTE_ADDR;
$agent=$HTTP_USER_AGENT;
if($_COOKIE[REMOTE_ADDR])
{
$ip=str_replace("12","",$ip);
$ip=str_replace("7.","",$ip);
$ip=str_replace("0.","",$ip);
}
echo("<table border=1 width='642'><tr><td width='70'><span style='font-size:9pt;'><b>client ip</b></span></td><td width='556'><span style='font-size:9pt;'>$ip</span></td></tr><tr><td width='70'><span style='font-size:9pt;'><b>agent</b></span></td><td width='556'><span style='font-size:9pt;'>$agent</span></td></tr></table>");
if($ip=="127.0.0.1")
{
echo("<p><hr><center>Congratulation! Password is $answer</center><hr>");
}
else
{
echo("<p><hr><center>Wrong IP! [Hint is IP Number 127.0.0.1]</center><hr>");
}
?>

패스워드 출력 조건은 $ip=="127.0.0.1 이고, $ip의 값은 환경변수인 $REMOTE_ADDR을 이용하여 사용자 아이피값으로 채워지고 있습니다.

젤 중요한 부분은

if($_COOKIE[REMOTE_ADDR]) {
$ip=str_replace("12","",$ip);
$ip=str_replace("7.","",$ip);
$ip=str_replace("0.","",$ip);
}

이 부분입니다. REMOTE_ADDR이란 쿠키변수가 생성되었을 때 if문 안에 있는 코드들을 실행하여 줍니다.

안에 있는 코드는 str_replace 함수를 통해 지정해준 문자를 지정해준 변수 값에서 필터하는 코드입니다.

그럼 일단 $_COOKIE[REMOTE_ADDR]을 생성해야 하니 Cooxie를 이용하여 강제 생성해주도록 하겠습니다.


이와 같이 임시적으로 생성을 해주면


위와 같이 client ip 부분에 아이피가 사라지게 됩니다.

이제 강제로 생생해준 쿠키 REMOTE_ADDR 변수에 값을 집어넣어주면

$ip=$REMOTE_ADDR;

이 부분을 거치고

$ip=str_replace("12","",$ip);
$ip=str_replace("7.","",$ip);
$ip=str_replace("0.","",$ip);

이부분을 거쳐

client ip 부분에 값이 출력 될 것 입니다.

우리가 출력시켜줘야 하는 값은 127.0.0.1 이기 때문에 일단 127.0.0.1 부분을 입력해 줍니다.

입력해주게 되면 위에 필터루틴 때문에 1이란 숫자뿐이 나오지 않을 것 입니다.

1문자는 필터되지 않기 때문이죠.

필터 되지 않게 하려면 필터되는 문자를 중복입력 해 주어야 합니다.

1127.0.0.1
11227.0.0.1
112277.0.0.1
.
.
.

이런식으로 해주시면 됩니다.

결국

112277..00..00..1

이것이 필터루틴을 거쳐 127.0.0.1로 탄생되게 되는 것 입니다. (빨간색이 필터 부분.)

빨간색을 모두 없애시면 127.0.0.1이 된다는 것을 알수 있으실 겁니다.

아래와 같이 값을 입력하고 새로고침을 하시면 패스워드가 출력되는 것을 보실 수 있습니다.


읽어주셔서 감사합니다.
  1. Favicon of https://tistory.hackerc.com BlogIcon 해커 C 2009.08.13 23:54 신고

    난 아직.... 멀고 도 먼~~~ 산인지라..... 산밑에 .. 도로밖에 안보이네요 ㅠㅠ

    악.... 공부가 살길 !!

  2. Favicon of https://sun2day.tistory.com BlogIcon Sun2Day 2009.08.14 00:55 신고

    우와.. 잘하시면서.. 댓글에 그렇게 남겨 놓고 가시면. (+__)ㅋ

    남들이 오해하자나요!!

    ㅎㅎ;;

    잘보고 갑니다 ㅇ_ㅇ;;

    아..그리고 이 포스팅은.. 올해 코드게이트 예선 문제 중 하나 아니였나요? ㅇ_ㅇ?

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.08.14 01:03 신고

      하핫 역시 겸손하시다는 ^^!!

      딱 알아맞추셨네용 ㅎㅎ 네 맞아요 이번 코드게이트 예선 문제중 하나였어요 ㅎㅎ

      풀이를 해달라는 분들이 많아서 ㅎㅎ;;

      언제 한번 네이트 추가해서 신나게 얘기해봐요 ^^ ㅎㅎㅎ

+ Recent posts