이 영역을 누르면 첫 페이지로 이동
caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

페이지 맨 위로 올라가기

caputdraconis

네트워크 관점에서의 클라우드 컴퓨팅을 공부하는 중입니다 :)

[Webhacking.kr] Challenge old-24

  • 2020.08.14 14:26
  • Security/WebHacking
글 작성자: caputdraconis
반응형
 <?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 24</title>
</head>
<body>
<p>
<?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>";
  }
?><hr>
<a href=?view_source=1>view-source</a>
</body>
</html>

이 문제를 정확하게 이해하려면 php에 내장된 함수인 exract() 함수에 대해서 살펴볼 필요가 있다.

extract는 '추출하다'라는 의미를 가진 영어단어다. 이 뜻에 맞게 어느 배열로부터 추출하면 인덱스(?)만으로 그 값에 접근할 수 있다. 직접 살펴보자. 

만약 GET 방식으로 데이터를 주고받을 때 우리는 GET 방식으로 전해진 데이터에 접근하기 위해 $_GET['x'], $_GET['y']와 같이 사용한다. 

여기서 만약 extract($_GET)을 앞에 적어준다면????? $_GET['x']는 $x로,  $_GET['y']는 $y로 접근할 수 있다.

 

그럼 위의 코드에서 살펴봐보자.

extract($_SERVER);
extract($_COOKIE);
$ip = $REMOTE_ADDR;
$agent = $HTTP_USER_AGENT;

$REMOTE_ADDR은 따로 선언된 적이 없는 변수다. 그런데 이를 사용하고 있다. 이유는 바로 앞의 extract($_COOKIE)에 있다. 쿠키값이 저장되는 배열인 $_COOKIE로부터 추출한 결과 $_COOKIE['REMOTE_ADDR], 즉 REMOTE_ADDR이라는 이름의 쿠키값에 $REMOTE_ADDR만을 사용해서 접근할 수 있다.

 

그렇다면 이번 문제는 REMOTE_ADDR이라는 쿠키값을 저 밑에 있는 변환과정을 거쳤을때 127.0.0.1이 되게 하면 된다. Editthiscookie 확장 프로그램을 이용한다.

 

딱 열었을 때 REMOTE_ADDR이라는 이름의 쿠키가 없다. + 버튼을 이용해 만들어주자.

 

밑에 있는 replace 함수를 모두 거칠거를 생각해서 위와 같이 쿠키값을 작성하고 새로고침을 누르니깐?

으악! ..을 .으로 변환하는 replace 함수가 있었다. 

이대로 간다!!!!!

 

 

 

 

끼요오오옷! 률류~~

 

 

반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Webhacking.kr] Challenge old-11

    [Webhacking.kr] Challenge old-11

    2020.08.15
  • [Webhacking.kr] Challenge old-10

    [Webhacking.kr] Challenge old-10

    2020.08.14
  • [Webhacking.kr] Challenge old-17

    [Webhacking.kr] Challenge old-17

    2020.08.14
  • [Webhacking.kr] Challenge old-16

    [Webhacking.kr] Challenge old-16

    2020.08.14
다른 글 더 둘러보기

정보

caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

  • caputdraconis의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (168)
      • Cloud (3)
      • Computer Network (12)
      • Database (2)
      • Terraform (2)
      • 🥚고리즘 (13)
      • 겅부겅부🙃 (10)
        • Naver CS50 코칭스터디 (2)
        • Machine Learning (1)
        • Computing System (6)
      • 언어&프레임워크 (20)
        • Python (4)
        • Django (10)
        • Node JS (1)
        • C++ (2)
        • Java (1)
        • Flutter (2)
      • Security (76)
        • WebHacking Study (11)
        • 지옥방 스터디 (22)
        • 여름방학 스터디 (2)
        • PWN Study (6)
        • SUA Reversing Study (3)
        • PWN (3)
        • WebHacking (20)
        • Reversing (4)
      • 알고 있으면 도움되지 않을까,,? (23)
      • 일상다반사 (1)
      • 근황 정리 (1)
      • 42 Seoul (1)
        • Setting (1)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • old-16
    • 파이썬
    • 파이썬함수
    • Python
    • 웹해킹.kr
    • 파이썬기초
    • 드림핵
    • 리스트함수

    나의 외부 링크

    • Github
    • solved.ac
    • caputdraconis@kakao.com

    정보

    caputdraconis의 caputdraconis

    caputdraconis

    caputdraconis

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © caputdraconis.

    티스토리툴바